首页

通过Redis主从复制和哨兵模式进行可行性验证实践

标签:redis,主从,cluster,master,slave,哨兵模式,同步策略     发布时间:2017-11-02   

一、前言

下面主要从Redis主从复制的工作原理(全量同步、增量同步、Redis主从同步策略)、Redis哨兵模式介绍(应用场景、哨兵模式的工作原理)、Redis主从复制的可用性验证等及具体分析说明

二、Redis主从复制的工作原理

1.全量同步 - Redis全量复制一般发生在从服务器(Slave)初始化阶段, Slave需要将主服务器(Master)上的所有数据都复制一份。具体步骤如下:

1)从服务器连接主服务器,发送SYNC命令;@b@2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;@b@3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;@b@4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;@b@5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;@b@6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

通过Redis主从复制和哨兵模式进行可行性验证实践

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

2.增量同步 - Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。 

3.Redis主从同步策略 - 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave在任何时候都可以发起全量同步。redis策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

三、Redis哨兵模式介绍

1.Redis哨兵的应用场景

通过Redis主从复制和哨兵模式进行可行性验证实践

Redis的哨兵(sentinel)系统用于管理多个Redis服务器,该系统执行以下三个任务:

1.监控(Monitoring):哨兵(sentinel)会不断地检查Master和Slave是否运作正常。@b@2.提醒(Notification):当被监控的某个Redis出现问题时,哨兵(sentinel)可以通过API向管理员或者其他应用程序发送通知。@b@3.自动故障迁移(Automatic failover): @b@  1)如果Master异常,哨兵(sentinel)会开始一次自动故障迁移操作, Master-Slave切换进程将会启动,将其中一个Slave作为Master,将之前的Master作为Slave;@b@  2) Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换;

四、Redis主从复制的可用性验证

1.主从复制可用性验证步骤

1.1.redis主服务器测试命令(10.20.113.28)

A.进入命令可执行位置:cd /usr/local/redis/redis-3.2.6/src@b@B.打开redis客户端:redis-cli -a YourOwnPassword -h 10.20.113.28 -p 6379@b@注:其中本文中的"YourOwnPassword"为用户自定义的主服务器redis链接密码(对应masterauth属性),若搭建环境时未设置密码,打开redis客户端时需省略"-a YourOwnPassword";@b@C.执行主服务器的写入命令:set test success

1.2.redis从服务器测试命令(10.20.113.69)

A.进入命令可执行位置:cd /usr/local/redis/redis-3.2.6/src@b@B.打开redis客户端:./redis-cli -a YourOwnPassword -h 10.20.113.69 -p 6379@b@C.执行主服务器的读取命令:get test@b@D.c步骤执行完成后,预期结果为"success",则为主从同步成功;

1.3.redis从服务器测试命令(10.20.117.229)

A.进入命令可执行位置:cd /usr/local/redis/redis-3.2.6/src@b@B.打开redis客户端:./redis-cli -a YourOwnPassword -h 10.20.117.229 -p 6379@b@C.执行主服务器的读取命令:get test@b@D.c步骤执行完成后,预期结果为"success",则为主从复制同步成功;

2.哨兵模式可用性验证步骤

2.1.链接云主机Redis环境 - 链接任意一台云主机(10.20.113.28或10.20.113.69或10.20.117.229,此验证步骤以链接10.20.117.229为例);

A.链接云主机成功后,打开redis客户端:redis-cli -a YourOwnPassword -h 10.20.117.229 -p 6379

通过Redis主从复制和哨兵模式进行可行性验证实践

B.输入命令info replication(该命令用于查看主从复制的角色)

通过Redis主从复制和哨兵模式进行可行性验证实践

C.输入ctrl+c退出redis客户端

D.输入命令ps -ef|grep redis,查看到redis客户端pid为20390

E.输入命令:kill -9 20390(测试时以实际的pid为准)

F.切换云主机,输入命令:ssh 10.20.113.28,接着按Enter,然后输入云主机链接密码,切换主机成功!

通过Redis主从复制和哨兵模式进行可行性验证实践

G.输入命令:redis-cli -a YourOwnPassword -h 10.20.113.28 -p 6379,然后输入info replication,查看到当前服务器的角色和master的ip

通过Redis主从复制和哨兵模式进行可行性验证实践

F. ctrl+c退出redis客户端,输入命令:ssh 10.20.113.69(同步骤F),切换到master主机;

G.输入命令:ps –aux|grep redis查看redis的pid

通过Redis主从复制和哨兵模式进行可行性验证实践

H.输入命令:kill -9 4612(测试时以redis-server的实际pid为准),即将redis主从复制的主服务器的redis-server关掉,此时剩余一台服务器(10.20.113.28)的redis-server为开启状态。Redis故障迁移时,主从切换成功的标志为正常运行的slave服务器需由slave角色升级为master。

I.切换到10.20.113.28服务器,进行角色的升级验证;

通过Redis主从复制和哨兵模式进行可行性验证实践

J. 输入命令:redis-cli -a YourOwnPassword -h 10.20.113.28 -p 6379,然后输入info replication,查看到当前服务器的角色和master的ip,此时可见到10.20.113.28服务器成功由slave角色升级为master;

通过Redis主从复制和哨兵模式进行可行性验证实践

K.链接另两台服务器,链接成功后输入命令redis-server /usr/local/redis/redis-3.2.6/redis.conf,启动另两台服务器各自的redis-server;

L.在10.20.113.28服务器,输入命令:redis-cli -a YourOwnPassword -h 10.20.113.28 -p 6379,然后输入info replication,此时可见到哨兵已监控到另外两台从机启动,并对从机进行链接成功,此结果说明redis哨兵模式可行;

通过Redis主从复制和哨兵模式进行可行性验证实践