目录
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 123456cluster-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 # 指定从节点发起转移