> 文章列表 > 7.redis-集群

7.redis-集群

7.redis-集群

目录

1. 概念

2. 三主三从redis集群配置

3. redis集群读写

4. 主从扩展案例

5.主从降容案例

6.用到的命令


1. 概念

  1).分片: 集群中的每个redis实例都被认为是整个数据的一个分片,官方建议是最大1000个

  2).槽位: redis集群有16384个哈希槽,每个key通过CRC16校验后通过总分片数量,对16384取模来决定放哪个槽,集群的每个节点负责一部分hash槽位。

  3).槽位算法 哈希取余,一致性哈希算法,哈希槽

2. 三主三从redis集群配置

  1) 3台虚拟机,各自创建 mkdir -p /myredis/cluster

  2) 新建6个独立的redis实例,次处只列出一个配置,其他配置改相应的端口号就可以

bind 0.0.0.0
daemonize yes
protected-mode no
port 6381
logfile "/myredis/cluster/cluster6381.log"
pidfile /myredis/cluster/cluster6381.pid
dir /myredis/cluster
dbfilename dump6381.rdb
appendonly yes
appendfilename "appendonly6381.aof"
requirepass 123456
masterauth 123456

cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

  3) 分别在三台服务器上启动6个实例

# 192.168.3.128

redis-server /myredis/cluster/redisCluster6381.conf

redis-server /myredis/cluster/redisCluster6382.conf

# 192.168.3.129 

redis-server /myredis/cluster/redisCluster6383.conf

redis-server /myredis/cluster/redisCluster6384.conf

#192.168.3.130

redis-server /myredis/cluster/redisCluster6385.conf

redis-server /myredis/cluster/redisCluster6386.conf

  4) 通过redis-cli 命令为6台机器构建集群关系,

redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.3.128:6381 192.168.3.128:6382 192.168.3.129:6383 192.168.3.129:6384 192.168.3.130:6385 192.168.3.130:6386

     --cluster-replicas 1 表示为每个maser创建一个slave节点

 

  5) 链接进入6381作为切入点,查看并检验集群状态

info replication

cluster info

cluster nodes

3. redis集群读写

  1) 登录

redis-cli -a 123456 -p 6381 -c

  2) 查看某个key属于对应的槽位值

cluster keyslot 键名称

4. 主从容错切换迁移案例

  1) 主6381和从机切换,先停止主机6381

redis-cli -a 123456 -p 6381 shutdown

  2) 再次查看集群信息,本次6381主6384从

       此时从变成主

  3) 随后,6381原来的主机回来了,是否会上位

      曾经的主变成从

  4) 手动故障迁移or节点从属调整如何处理, 强制让6381做为主节点

redis-cli -a 123456 -p 6381

cluster failover

4. 主从扩展案例

  1) 新创建6378,6388两个服务实例

# 192.168.3.131

redis-server /myredis/cluster/redisCluster6387.conf

redis-server /myredis/cluster/redisCluster6388.conf

  2) 将新增加的6387节点作为master节点加入原集群

redis-cli -a 123456 --cluster add-node 192.168.3.131:6387 192.168.3.128:6381

  3) 检查集群情况第1次,此时没有分配槽号

redis-cli -a 123456 --cluster check 192.168.3.128:6381

  4) 重新分派槽号

redis-cli -a 123456 --cluster reshard 192.168.3.128:6381

这个值=16384 / master节点数 = 4096

     谁来接收这个槽位,复制 6387的RunID

        输入 all

       输入yes

  5) 检查集群情况第2次

redis-cli -a 123456 --cluster check 192.168.3.128:6381

  6) 3687实例的槽位是从已有的三个主节点中分配一段,而不是全部重新分配

  7) 为主节点6387分配从节点6388

        命令: redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口

                                           --cluster-slave  --cluster-master-id 新主机节点ID,6387的ID

redis-cli -a 123456 --cluster add-node 192.168.3.131:6388 192.168.3.131:6387 --cluster-slave --cluster-master-id 4e8ad91bf03e1d6cc9b1068a3b3783b6fc675064

   8) 检查集群情况第3次

redis-cli -a 123456 --cluster check 192.168.3.128:6381

5.主从降容案例

  1) 先获取从节点6388的节点ID

redis-cli -a 123456 --cluster check 192.168.3.131:6388

  3) 从集群中将6388删除

redis-cli -a 123456 --cluster del-node 192.168.3.131:6388 c7f076d01bef40047750c89cbee34e6abb690285

  4) 检查是否剩下7个,同时复制6381的RunID

redis-cli -a 123456 --cluster check 192.168.3.128:6381

  5) 清空6387的槽号,重新分配,本例将清出来的槽号都给6381

redis-cli -a 123456 --cluster reshard 192.168.3.128:6381

  6) 删除6387

redis-cli -a 123456 --cluster del-node 192.168.3.131:6387 4e8ad91bf03e1d6cc9b1068a3b3783b6fc675064

  7) 查看结果

redis-cli -a 123456 --cluster check 192.168.3.128:6381

6.用到的命令

# 查看集群节点信息

redis-cli -a 密码 --cluster check host:port

# 创建集群

redis-cli -a 123456 --cluster create --cluster-replicas 1 host1:port1 host2:port2

# 登录

redis-cli -a 123456 -p 6381 -c

# key属于对应的槽位值

cluster keyslot 键名称

# 重新分配槽位

redis-cli -a 密码 --cluster reshard host:port

# 为主节点添加从节点

redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口

                          --cluster-slave  --cluster-master-id 新主机节点ID,6387的ID

# 删除节点

redis-cli -a 密码 --cluster del-node host:port node_id

# --------------------------------------------------

info replication #

cluster info       # 当前节点的集群信息

cluster nodes   # 所有节点集群信息

cluster failover  # 指定从节点发起转移