1. 操作过程(举例用三主三从的集群)
1. 修改6台redis服务器的配置文件
port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /tmp/6379
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 192.168.150.101
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /tmp/6379/run.log
2. 启动这6台redis
- 启动之后,这6台机器还是孤立的节点,相互之间还没有进行连接形成集群。
3. Redis5.0之前
- 安装ruby
yum install ruby
- 进入任意一个redis的src目录下执行命令
# 1 代表一个主配1个从,后面6台机器,前三台式主,后三台式从
./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006
-
分片集群搭建完毕
4. Redis5.0后
redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
命令说明
- redis-cli --cluster 或者./redis-trib.rb:代表集群操作命令
- create:代表创建集群
- --replicas 1或者--cluster-replicas 1:代表一个master的副本个数为1。前面三个为master,后面三个为slaver。
至此,分片集群环境搭建完毕
6 如何向集群中添加数据
# 客户端连接其中一个master
# 加参数-c 表示集群相关操作
redis-cli -c
# 然后就正常数据读取或写入
# 客户端下查看集群节点状态
cluster nodes
2. 往集群中添加值
1. 添加单值
# 跟非集群一样
set k1 v1
2. 添加多值
# 需要给key分配一个组名user,然后根据组名映射找到卡槽
mset name{user} lucy age{user} 20
3. 计算key的插槽值是多少
# 查看k1这个键在哪个slot槽
cluster keyslot k1
4. 计算slot槽中有多少个key
# 查看4847这个slot槽包含多少个key
# 这个只能查看自己服务器上的slot槽,别的服务器上看不见
cluster countkeysinslot 4847
5. 返回指定slot槽里的10个键
cluster getkeysinslot 4847 10
3. 故障恢复
- 主节点下线后,从节点会自动升为主节点
- 主节点恢复后,会变为从机
- 如果某一段插槽的主从节点都宕机了
- 若配置文件中配置了cluster-require-full-coverage为yes 那么整个集群都挂掉
- 若配置文件中配置了cluster-require-full-coverage为no,那么该段的插槽里数据全都不能使用,也无法存储
3.1 相关配置
# 默认是yes
cluster-require-full-coverage yes
- 举例:对于一个3主6从的redis集群
- 那么3个master会平分16384个slot(0~16383),每个master的小集群负责1/3的slot,对应一部分数据
- 通常情况,如果这三个小集群中,任何一个小集群(一主二从)全挂了,这时整个集群只能对外提供2/3的数据,已经是不完整的了,redis默认在这种情况下,是不对外提供服务的
- 但你可以通过设置cluster-require-full-coverage为no,使得不完整的集群也能对外提供服务
3.2 如何确定数据key的插槽
redis通过根据key的有效部分来计算插槽值
- 如果key中包含{},且{}中至少有一个字符,则{}中的部分作为有效部分
- 如果key中没有包含{},则整个key作为有效部分。
4. 故障转移
4.1 自动故障转移
- 分片集群中某个分片的master节点宕机后,会自动提升相关个一个slave为新的master
4.2 手动故障转移
- 手动将某个分片的slave提升为新的master,将原先的master变为slave
- 具体步骤
- 在将要提升为master的节点客户端上执行 cluster failover即可