哨兵机制和集群
1、Sentinel(哨兵)
1.1 sentinel是redis的高可用性解决方案,有一个或多个sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器继续处理命令请求
如图所示:双环(server1)为主服务器,单环(server2,server3,server4)为从服务器
当server1的下线时长超过用户设定的下线时长上线时,Sentinel会对server1执行故障转移操作(分二步):
第一步:Sentinel会挑选server1属下的其中一个从服务器,并将这个被选中的从服务器升级为新的主服务器
第二步:sentinel会向server1属下的所有从服务器发送新的复制指令,让他们成为新的主服务器的从服务器,当所有从服务器都开始复制新的服务器时,故障转移操作执行完毕 另外:sentinel还会继续监视已下线的server1,并在它重新上线时,将它设置为新的主服务器的从服务器
1.2 启动并初始化Sentinel
2 集群
redis集群时redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,提供复制和故障转移功能
2.1 节点:节点之间以握手的方式
节点的启动:节点会继续使用所有再单机模式中使用的配置信息
2.2 槽指派
redis cluster通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为16384个slot(槽),数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以处理一个或最多16384个slot
当16384个槽都有节点在处理时,集群处于上线状态(ok);反之则集群处于下线状态(fail)
可以随意的分配槽范围给节点 ,如下:
cluster addslots 0 1 2 3 4 ... 5000
即将0至5000指派给相应节点 会将自己的负责的槽范围发送给集群中的其他节点
2.3 在集群中执行的命令
节点只能使用0号数据库,单机redis没有这个限制