![4515dbc98c5b0d95612eb9029b287567.png](https://i-blog.csdnimg.cn/blog_migrate/5e20c84f00fc034510a737abcb3a3cdf.jpeg)
【76】
五、 安装 Redis 集群
1 Redis 集群介绍
Redis3.0 版本之后支持 Cluster。集群要求集群节点中必须要支持主备模式,也就说集 中的主节点(Master)至少要有一个从节点(Slave) 每一个蓝色的圈都代表着一个 redis 集群中的主节点。它们任何两个节点之间都是相互 连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其 进行存取和其他操作
1.1 Redis-Cluster 架构图
![6fe6500e0443bf3e1a1039fc4088d785.png](https://i-blog.csdnimg.cn/blog_migrate/192007129e0e8d683af744899a273700.jpeg)
1.2 Redis-Cluster 选举:容错
Redis 之间通过互相的 ping-pong 判断是否节点可以连接上。如果有一半以上的节点去 ping 一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的从节点。如 果某个节点和所有从节点全部挂掉,我们集群就进入 fail 状态。还有就是如果有一半以上的 主节点宕机,那么我们集群同样进入 fail 了状态。这就是我们的 redis 的投票机制,具体原 理如下图所示:
![3cb04fc7fbf3cf788e8f1e9e03860779.png](https://i-blog.csdnimg.cn/blog_migrate/9689d0ef743f11b55f0a8a196e52f953.jpeg)
投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时 (cluster-node-timeout),认为当前 master 节点挂掉. 什么时候整个集群不可用(cluster_state:fail)? 1) 如果集群任意 master 挂掉,且当前 master 没有 slave。此时集群进入 fail 状态,也可 以理解成集群的 slot 映射[0-16383]不完整时进入 fail 状态。 2) 如果集群超过半数以上 master 挂掉,无论是否有 slave,集群进入 fail 状态.
1.3 Redis-Cluster 数据存储
当我们的存取的 key 到达的时候,redis 会根据 crc16 的算法得出一个结果,然后把 结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通 过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存 取操作。
![3cbf57947f3095dc9da7aad8a4ab59cc.png](https://i-blog.csdnimg.cn/blog_migrate/4c21ad0e359355b2675fd378976a0a09.jpeg)
在 Node1 执行 set name kevin 1. 使用 CRC16 算法对 key 进行计算,得到一个数字,然后对数字进行取余。 CRC16 : name = 26384 26384%16384 = 10000
2. 查找到包含 10000 插槽的节点,比如是 node2,自动跳转到 node2 3. 在 node2 上执行 set name kev