【redis-cluster模式】(redis 5.0)
1. 优点:
- 解决了redis内存不够用问题,通过多个master来增大redis集群内存
- master之间相互通讯,相互选举,保证故障转移
- 主从复制,master的从节点同步主节点数据,不做读写操作,作为master的备用节点,master宕机后由他的从节点顶替master
- 客户端连接任意一个节点就可以使用
2. 数据分配节点存储方式:
- 有几个master节点,就将16383个哈希槽平均分配
- 用CRC16计算出key的哈希值,哈希值%16384得到的数分配到对应哈希槽槽范围的节点中
3. 投票容错:
每秒发送心跳ping,超时算节点失效(配置cluster-node-timeout),集群中一半以上的master认为该节点失效,则认为该master节点挂掉
4. 集群失效条件(整个集群不可用):
- 集群任意master挂掉,且当前master没有slave,则集群进入fail状态(集群的[0-16383]slot映射不完全时进入fail状态)
- 集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态
5. 集群节点变动操作(黑窗口中输入命令)(具体命令见下面的命令栏):
创建集群:
- 输入创建集群命令
新增主节点:
- 输入创建主节点命令
- 重新分配哈希槽
新增从节点:
- 输入创建从节点命令
删除主节点:
- 将主节点哈希槽迁移到其他节点(执行重新分配哈希槽流程)
- 执行删除节点命令
删除从节点:
- 执行删除节点命令
重新分配哈希槽:查看【redis专栏】的 redis-cluster重新分配哈哈希槽
6. 使用到的命令:
查看集群哈希槽分配情况:cluster slots
查看集群状态:cluster info
查看集群中的节点:cluster nodes
操作集群的命令:
- create:创建一个集群环境host1:port1 … hostN:portN
- call:可以执行redis命令
- add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
- del-node:移除一个节点
- reshard:重新分片
- check:检查集群状态
创建集群:
格式:./redis-cli --cluster create <集群某个节点的ip>:<端口> <集群某个节点的ip>:<端口> ...... --cluster-replicas <1 主节点的从节点数量>
例如:redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1
新增一个主节点:
格式:./redis-cli --cluster add-node <新增节点IP>:<新增节点端口> <集群中任意存在节点IP>:<集群中任意存在节点IP节点端口>
例如:./redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6381
新增一个从节点:
格式:./redis-cli --cluster add-node <新节点的ip>:<端口> <现存主节点的ip>:<端口> --cluster-slave --cluster-master-id <主节点id>
例如:./redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6386 --cluster-slave --cluster-master-id a29a1af143eb4997ed06d29c2af369fa7cfa093f
删除一个节点(删除主节点先把槽分配给其他节点):
格式:./redis-cli --cluster del-node <删除节点的ip>:<端口> <删除节点的ID>
例如:./redis-cli --cluster del-node 127.0.0.1:6386 a29a1af143eb4997ed06d29c2af369fa7cfa093f
重写分配哈希槽:
格式:./redis-cli --cluster reshard <集群中任意节点ip>:<端口>
例如:./redis-cli --cluster reshard 127.0.0.1:6386
7. cluster模式的配置方式:
- 每一个redis节点都有配置:redis.conf
-
# 开启集群模式 cluster-enabled yes # 集群节点生成的配置文件(存放集群信息) cluster-config-file nodes-6380.conf # 集群认为节点挂掉的超时时间(单位毫秒) cluster-node-timeout 15000 #集群总线监听TCP连接端口(每个节点都要配置不同端口,用于集群 故障检测、配置更新、故障转移,和6379是区分开的) cluster-port <端口>
- 保证redis集群端口号不一致
- 在随便一个redis目录下小黑床,输入【创建】命令:
redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1