redis内存分析
内存分析线上经常遇到用户想知道自己 Redis 实例中数据的内存分布情况。为了不影响线上实例的使用,我们一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sql 来进行静态分析。总的来说,整个分析的过程简单而实用,是每一个 Redis 的用户都非常值得掌握的一个方法。
创建备份 Redis 可在客户端执行 bgsave 生成 rdb 文件
12345678127.0.0.1:6401> bgsaveBackground saving started[root@mha-manager data]# ll /usr/local/redis-sentinel/redis1/data/total 257808-rw-r--r-- 1 root root 193360335 Jun 16 16:12 appendonly.aof-rw-r--r-- 1 root root 31586138 Jun 16 18:13 dump.rdb-rw-r--r-- 1 root root 39030784 Jun 16 18:20 memory.c ...
Redis Persistence
https://redis.io/topics/persistence
Redis provides a different range of persistence options:
The RDB persistence performs point-in-time snapshots of your dataset at specified intervals.
the AOF persistence logs every write operation received by the server, that will be played again at server startup, reconstructing the original dataset. Commands are logged using the same format as the Redis protocol itself, in an append-only fashion. Redis is able to rewrite the log on background when it gets ...
SQLAdvisor 安装&&简单测试
SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具。它基于MySQL原生态词法解析,结合分析SQL中的where条件、聚合条件、多表Join关系 给出索引优化建议。目前SQLAdvisor在美团点评内部广泛应用,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致。
开源地址:https://github.com/Meituan-Dianping/SQLAdvisor
1.拉取代码12git clone https://github.com/Meituan-Dianping/SQLAdvisor.git
2.安装依赖123456yum install cmake libaio-devel libffi-devel glib2 glib2-devel yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpmyum install Pe ...
MHA之masterha_master_switch
如下是 MHA 的 masterha_master_switch 功能的 官方介绍,大体翻译下,需要时候可以查阅。
masterha_master_switchmasterha_master_switch可以用来做master failover 也可以用来做在线的主库切换。
Manual Failover有时候需要做手动failover, 可以用如下命令:
1$ masterha_master_switch --master_state=dead --conf=/etc/app1.cnf --dead_master_host=host1
可用的参数如下:
–master_state=dead
强制参数. 可选有: “dead” or “alive”. 如果设置为 alive,将执行 在线切主操作。后面介绍。
–dead_master_host=(hostname)
强制参数,–dead_master_ip 和 –dead_master_port 也可以指定。
–new_master_host=(hostname)
可选参数。如果不指定,程序自 ...
虚拟机直接拷贝数据库到其他 server 要注意的几个点
有时候为了方便,我们将虚拟机上的server1上的数据库直接拷贝到其他server上,组建复制环境,因为是同一份数据文件,所以要主要:
1.server_id不能一样 否则复制配置不成功2.server-uuid 要重新生成 删除auto.cnf,重启服务,就重新生成了。
否则start slave 将报错:
1Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
NGX_HTTP_REALIP_MODULE模块的使用
realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP。
如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_SERVER[‘REMOTE_ADDR’]的值也是反向代理的IP。
而安装了realip模块,并且配置正确,就可以让nginx日志和php的REMOTE_ADDR都变成真实的用户IP。
举一个最简单的例子,网络架构如图:
如果不做任何配置,后端web服务器nginx日志里记录的IP将会是10.10.10.10,这个时候我们增加如下nginx配置:
123set_real_ip_from 10.10.10.10;real_ip_header X-Forwarded-For;
set_real_ip_from指令是告诉nginx,10.10.10.10是我们的反代服务器(信任服务器,记住这个名词,下面会提到),不是真实的用户IP,real_ip_header则是告诉nginx真正的用户IP是存在X-Forwarded-For请求头中。
重新加载nginx配置之后,就可以看到ngi ...
Nginx 与 FPM 的工作机制
要说 Nginx 与 PHP 是如何协同工作的,首先得说 CGI (Common Gateway Interface) 和 FastCGI 这两个协议。
CGI 是 Web Server 与后台语言交互的协议,有了这个协议,开发者可以使用任何语言处理 Web Server 发来的请求,动态的生成内容。但 CGI 有一个致命的缺点,那就是每处理一个请求都需要 fork 一个全新的进程,随着 Web 的兴起,高并发越来越成为常态,这样低效的方式明显不能满足需求。就这样,FastCGI 诞生了,CGI 很快就退出了历史的舞台。FastCGI,顾名思义为更快的 CGI,它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提高。
至于 FPM (FastCGI Process Manager),它是 FastCGI 的实现,任何实现了 FastCGI 协议的 Web Server 都能够与之通信。FPM 之于标准的 FastCGI,也提供了一些增强功能,具体可以参考官方文档:PHP: FPM Installation。
FPM 是一个 PHP 进 ...
MySQL日志管理
MySQL 服务器上一共有六种日志:错误日志,查询日志,慢查询日志,二进制日志,事务日志,中继日志。
一 错误日志错误日志不仅仅记录错误信息,它记录的事件有:- 服务器启动和关闭过程中的信息- 服务器运行过程中的错误信息- 事件调度器运行一个事件时产生的信息- (如果被配置为从服务器)启动从服务器进程时产生的信息
查看错误日志文件的路径在mysql数据库中,错误日志功能是默认开启的。
1234567mysql> SHOW VARIABLES LIKE 'log_error%';+---------------+-----------------------------------------------+| Variable_name | Value |+---------------+-----------------------------------------------+| log_error | /opt/lampstack-5.4.22-0/mysql/dat ...
使用mysqlslavetrx修复 errant transactions
使用场景 今天要节介绍的是关于 errant transaction 的问题,这个怎么翻译,额。。。异常事务? 这个问题出现的场景是:在slave上进行了DML操作,这时候slave就多出来一个或多个其他slave节点和master节点没有的事务。当发生failover 的时候,这个slave被提升为主,那么这些事务将会污染整个复制环境。我们通常的做法是注入一个空事务来解决。
关于这个问题的描述官方是这么说的:
An errant transaction is a transaction that exists on a slave but not on all of the slaves connected to the master. An errant transaction has a GTID associated with the UUID of the slave to which it was committed. These type of transac ...
HA集群概念
1、什么是高可用集群 高可用集群(High Availability Cluster,简称 HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。
2、高可用集群的衡量标准 要保证集群服务 100% 时间永远完全可用,几乎可以说是一件不可能完成的任务。比如,淘宝在这几年双十一刚开始的时候,一下子进来买东西的人很多,访问量大,都出现一些问题,如下单后却支付不了。所以说只能保证服务尽可能的可用,当然有些场景相信还是可能做到 100% 可用的。
通常用平均无故障时间 (MTTF:mean time to failure) 来度量系统的可靠性,用平均故障维修时间(MTTR:mean time to restoration)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%。
具体 HA 衡量标准:
描述
通俗叫法
可用性级别
年度停机时间
基本可用性
2 个 9
99% ...