概念
每次操作根据key进行hash运算,生成一个[0-16384]的hash值 (生成的hash值/16383取余数),最后找到对应hash值的节点
每次重启集群后,节点关系改变
删除主节点后,对应的从节点自动匹配新的主节点
集群配置
集群开关
cluster-enabled yes #默认关闭
集群节点名
cluster-config-file nodes-6379.conf
集群节点心跳超时时间
cluster-node-timeout 15000
子节点是否过载,是否能成为主节点的可能性
cluster-replica-validity-factor 10
从节点个数
cluster-migration-barrier 1 #实际从节点小于设置值时,主从切换不会触发
部分节点宕机,是否停止工作
cluster-require-full-coverage yes
子节点不允许成为主节点
cluster-replica-no-failover no
注意
每一台集群密码都要相同
集群运行
注意项
至少需要6个节点才能创建集群
每个节点数据必须是空
每个节点提供集群端口号 16379 ,注意防火墙
运行所有节点
所有节点配置完并运行后,检查 ps -ef |grep redis 是否有[cluster] 标识
开启集群
redis-cli --cluster create [ ] [ ] [ ] [ ] [ ] [ ] --cluster-replicas 1 #1代表1个主节点对应几个子节点,创建集群至少需要3个主节点
哈希槽分配: 16383个哈希槽 /主节点个数
节点配置文件
nodes-6379.conf #redis根目录,存放节点关系结构
节点管理
集群登入
redis-cli -c #集群后 不加-c 无法进行集群操作
查询集群信息
cluster info
查看节点信息
cluster nodes
redis-cli --cluster check [111.111.111.111:6379]
节点删除
1.删除主节点要先转移hash槽对应数据
redis-cli --cluster reshard [转移的ip:port] #提示 1.要转移多少个哈希槽 2.转移目标的节点ID 3.转移的节点id(可选all,从所有节点转移) 4.done
2.删除
redis-cli --cluster del-node [连接节点ip:port] [要删除的节点id] #删除主节点后,对应的从节点自动匹配新的主节点
主从转换,故障转移
1.登入从节点
redis-cli -h [从节点ip] -p [6379]
2.转移
cluster failover
添加节点
1.添加主节点
redis-cli --cluster add-node [新节点ip:port] [集群任意节点ip:port] #新节点不能包含数据和旧集群配置文件nodes-6379.conf
2.转移hash槽
redis-cli --cluster reshard [要转移的节点ip:port] #提示 1.要转移多少个哈希槽 2.转移目标的节点ID 3.转移的节点id(可选all,从所有节点转移) 4.done
3.平衡hash槽
redis-cli --cluster rebalance --cluster -threshold 1 [新节点ip:port]
4.添加从节点
redis-cli --cluster add-node [新节点ip:port] [集群任意节点ip:port] --cluster-slave --cluster-master-id [主节点id] #新节点不能包含数据和旧集群配置文件 nodes-6379.conf