redis sentinel

最通俗的解释:sentinel 一般翻译成哨兵,就是放哨的,这里它就是用来监控主从节点的健康状况。客户端链接redis主从的时候,先链接 sentinel,sentinel会告诉客户端主redis的地址是多少,而后客户端链接上redis并进行后续的操做。当主节点挂掉的时候,客户端就得不到链接了于是报错了,客户端从新想sentinel询问主master的地址,而后客户端获得了[新选举出来的主redis],而后又能够愉快的操做了。redis

了解哨兵的基本条件算法

  1. 一个健壮的部署至少须要三个哨兵实例,而且使用奇数个Sentinel.
  2. 三个哨兵实例应该放置在不一样计算机或虚拟机中。例如不一样的物理机或不一样可用区域的虚拟机。
  3. 全部节点彼此互联,redis启动两个端口,一个为服务客户端,另外一个服务内部通信,内部通信端口比服务端口大10000. 好比:6379与16379
# redis如何作分片的

Redis集群预分好16384个桶,当须要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪一个桶中。服务器

如今咱们是三个主节点分别是:A, B, C 三个节点,它们能够是一台机器上的三个端口,也能够是三台不一样的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:ide

节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16383

获取数据:翻译

若是存入一个值,按照redis cluster哈希槽的算法: CRC16('key')%16384 = 6782。 那么就会把这个key 的存储分配到 B 上了。一样,当我链接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,而后内部跳转到B节点上获取数据

新增一个主节点:code

新增一个节点D,redis cluster的这种作法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大体就会变成这样:部署

节点A覆盖1365-5460
节点B覆盖6827-10922
节点C覆盖12288-16383
节点D覆盖0-1364,5461-6826,10923-12287

一样删除一个节点也是相似,移动完成后就能够删除这个节点了。虚拟机

相关文章
相关标签/搜索