原理:
-
Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。
-
集群使用公式(CRC16 key)& 16384计算键key数据那个槽
-
16384个slot均匀分布在各个节点上
-
集群中每个主节点将承担一部分槽点的维护,而槽点中存储着数据,每个主节点都有至少一个从节点用于高可用。
节点通信方式:
-
开启一个端口 设置的端口号+10000,用于集群之间节点通信交换信息
-
每个节点默认每秒10次选择随机5个节点发送ping消息,将自身信息和知道的集群信息传递,收到ping消息后返回pong消息做回复,最后通过这种随机的消息交换,最终每个节点将获得所有信息
-
当某个主节点挂掉,所有节点将会发现主节点挂掉了,作为主节点的从节点,就会接替主节点的工作,然后告诉所有其它节点,他成为了主。这样其它存活节点,就将它们维护的信息表更新从节点将接任做主,如果都挂掉集群将报错。当从一个节点操作,根据一致性哈希计算后将存储在其中一个主节点中,从节点将同步主的数据
-
redis cluster是去中心化的,集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。
-
搭建集群时,会为每一个分片的主节点,对应一个从节点。实现slaveof功能,同时当主节点down,实现sentinel哨兵的自动failover切换功能
Redis分布式集群(部署):
端口号:7000-7005
- 本次分布式分片集群在一台LInux系统即可,只需要安装多个实例作为集群配置。
安装ruby环境支持:
- yum安装2.0.0版本,但是gem需要2.2.2版本以上,所以选择编译
下载并安装ruby环境:
修改gem工具国内源:
报错就修复ruby环境:参考链接
集群节点准备:
配置7000端口实例:
拷贝其他端口实例:
启动所有实例:
创建命令软链接:
- (这个命令过期了,现在使用redis-cli命令)(可选执行命令)
查看进程:
加入所有实例节点到集群管理:
分布式主从规则为,前三个实例节点是主,对应的后面三个实例节点为从节点,如果replicas 2,那就多加3个实例节点
查看主节点状态:
查看从节点状态:
Redis-分布式集群(管理):
集群节点增加准备:
拷贝其他端口实例:
启动新节点实例:
查看进程:
添加主节点:(7000实例是管理节点)
查看主节点状态:
转移slot(重新分片):
重新查看主节点状态:(可以看到集群数据的重新分片)
添加从节点:
查看从节点状态:
集群节点删除准备:
移动要删除节点的数据分片:
重新查看主节点状态:(可以看到集群数据的重新分片)
继续移动数据片:
重新查看主节点状态:(可以看到集群数据的重新分片)
最后一次移动数据片:
重新查看主节点状态:(可以看到集群数据的重新分片)
redis-cli -p 7000 cluster nodes|grep master