Docker-Redis3主3从配置
- --clusten-enabled yes 是否开启集群
- --appendonly no ##默认是不开启aof模式的, 默认是使用rdb方式持久化,在大部分所有的情况下,rdb完全够用
docker run -d --name redis-node-1 --net host --privileged=true -v /soft/redis-cluster/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /soft/redis-cluster/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /soft/redis-cluster/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /soft/redis-cluster/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /soft/redis-cluster/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /soft/redis-cluster/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386
以6381作为切入点进入其中:执行以下命令:注意真实IP地址
- --cluster create 构建集群
- --cluster-replicas 1 表示为每个master创建一个slave节点
redis-cli --cluster create 192.168.19.133:6381 192.168.19.133:6382 192.168.19.133:6383 192.168.19.133:6384 192.168.19.133:6385 192.168.19.133:6386 --cluster-replicas 1
进入redis
docker exec -it redis-node-1 /bin/bash
进入单机连接
集群这样子会出问题
redis-cli -p 6381
cluster info
cluster nodes
查看所有节点信息
集群方式链接redis
redis-cli -c -p 6381
应为redis用的是哈希槽算法
127.0.0.1:6381>set k1 v1 ()不同的key会跳转到不同的槽
进入其中一台容器执行
redis-cli --cluster check 192.168.19.133:6381
主从容错切换迁移
场景:主机宕机 从机切换
1.停掉redis master1
docker stop redis-node-1
2.进入redis查看
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
cluster nodes
正常来说可以看到master1 宕机了 fail
他的从机会切换成master
继续:恢复master1
docker start redis-noded-1
再次查看集群状态
cluster nodes
正常来说从机已经篡位变成主机
主从扩容
1.新建6387、6388两个节点+新建后启动+查看是否8节点
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388
docker ps
2.进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
3.将新增的6387节点(空槽号)作为master节点加入原集群
|将新增的主从节点加入集群
|redis-cli --cluster add-node 实际ip地址:6387 实际ip地址:6381
|6387就是将要作为master新增节点
|6381就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli --cluster add-node 192.168.19.133:6387 192.168.19.133:6381
4.检查集群情况第1次
root@zzyy: /data# redis-cli --cluster check 192.168.19.133:6381
现在是没有槽位的
5.重新分派槽号
命令:redis-cli --cluster reshard lP地址:端口号
redis-cli --cluster reshard 192.168.19.133:6381
4096怎么来的
16394个槽分成4分 现在是4主4从
16384 / 4(master台数) = 4096
all
6.检查集群情况第2次1
root@zzyy: /data# redis-cli --cluster check 192.168.19.133:6381
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
7.为主节点6387分配从节点6388
redis-cli --cluster add-node 192.168.19.133:6388 192.168.19.133:6387 --cluster-slave --cluster-master-id
473ee1852959c0957f7d58bd794963a5011c3ff9
e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况
8.检查集群情况第3次
root@zzyy: /data# redis-cli --cluster check 192.168.19.133:6381
主从缩容
- 需求顺序
1先清除从节点6388
2清出来的槽号重新分配
3再删除6387
4恢复成3主3从
- 案例演示
目的:6387和6388下线
检查集群情况 获得6388的节点ID
root@zzyy: /data# redis-cli --cluster check 192.168.19.133:6381
将6388删除
从集群中将4号从节点6388删除
命令: redis-cli --cluster del-node ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 192.168.19.133:6388 5d14907457e57b802287d1797a874ed7a1a284a8
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
root@zzyy: /data# redis-cli --cluster reshard 192.168.19.133:6381
检查集群情况第二次
root@zzyy: /data# redis-cli --cluster check 192.168.19.133:6381
将6387删除
命令: redis-cli --cluster del-node ip:端口6387节点ID
redis-cli --cluster del-node 192.168.19.133:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451I
-检查集群情况第三次
docker start redis-node-1
docker start redis-node-2
docker start redis-node-3
docker start redis-node-4
docker start redis-node-5
docker start redis-node-6
已有 0 条评论