redis分片集群

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即可

redis分片集群_第1张图片

 

你可能感兴趣的:(redis,redis,数据库)