1.故障机制
1、集群中的每个节点都会定期的向其它节点发送PING命令,并且通过有没有收到回复判断目标节点是否下线;
2、集群中每一秒就会随机选择5个节点,然后选择其中最久没有响应的节点放PING命令;
3、如果一定时间内目标节点都没有响应,那么该节点就认为目标节点疑似下线;
4、当集群中的节点超过半数认为该目标节点疑似下线,那么该节点就会被标记为下线;
5、当集群中的任何一个节点下线,就会导致插槽区有空档,不完整,那么该集群将不可用;
如何解决上述问题?
1.在Redis集群中可以使用主从模式实现某一个节点的高可用。
2.当该节点(master)宕机后,集群会将该节点的从数据库(slave)转变为(master)继续完成集群服务;
2.集群中的主从复制架构
架构:
出现故障:
3.创建主从集群
需要启动6个redis实例,分别是:
6379(主) 6479(从)
6380(主) 6480(从)
6381(主) 6481(从)
启动redis实例:
cd 6379/ && redis-server ./redis.conf && cd .. cd 6380/ && redis-server ./redis.conf && cd .. cd 6381/ && redis-server ./redis.conf && cd .. cd 6479/ && redis-server ./redis.conf && cd .. cd 6480/ && redis-server ./redis.conf && cd .. cd 6481/ && redis-server ./redis.conf && cd ..
创建集群,指定了从库数量为1,创建顺序为主库(3个)、从库(3个):
./redis-trib.rb create --replicas 1 192.168.56.102:6379 192.168.56.102:6380 192.168.56.102:6381 192.168.56.102:6479 192.168.56.102:6480 192.168.56.102:6481
创建成功!查看集群信息:
4.测试
保存、读取数据OK!
查看下6480的从库数据:
看到从6480查看数据也是被重定向到6380.
说明集群一切运行OK!
5.测试集群中slave节点宕机
我们将6480节点kill掉,查看情况。
查看集群情况:
发现6480节点不可用。
那么整个集群可用吗?
发现集群可用,可见从数据库宕机不会影响集群正常服务。
恢复6480服务:
测试6480中的数据:
看到已经更新成最新数据。
6.测试集群中master宕机
假设6381宕机:
查看集群情况:
发现:
1、6381节点失效不可用
2、6481节点从slave转换为master
测试集群是否可用:
集群可用。
恢复6381:
发现:
1、6381节点可用
2、6481依然是主节点
3、6381成为6481的从数据库