docker搭建redis集群(三主三从)及重启redis集群
一、docker搭建redis集群
1、下载redis镜像文件
从远程仓库先拉取一下redis的镜像文件,如果已经提前安装过镜像的,可以跳过此步骤:
docker pull redis:6.0.8
2、查看本地拉取到镜像文件
docker images
看到图上标识,就说明当前镜像文件已经下载好了。
3、启动6台redis docker实例
通过镜像文件,分别启动6台redis容器实例,并且数据卷挂载到宿主机上(保障容器被意外删除后数据不丢失):
#第一台redis容器实例启动,输入下列命令并回车
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
#第二台redis容器实例启动,输入下列命令并回车
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
#第三台redis实例,注意修改容器名字和端口
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
#第四台
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
#第五台
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
#第六台
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
每一台实例都是按照上述命令安装,只修改一下节点的名字和端口号即可:
4、查看6台redis容器是否启动成功
docker ps
5、将6台redis容器实例搭建成集群关系
先进入其中一台redis容器:
#进入redis-node-1这个节点的内部
docker exec -it redis-node-1 /bin/bash
然后开始搭建主从关系:
#简单的三主三从就是一台主机、对应一台复制机,所以--cluster-replicas 为1
redis-cli --cluster create 192.168.245.129:6381 192.168.245.129:6382 192.168.245.129:6383 192.168.245.129:6384 192.168.245.129:6385 192.168.245.129:6386 --cluster-replicas 1
#注意将ip修改为自己的宿主机ip,端口对应之前创建的节点port
当出现提示“Can I set the above configuration? (type 'yes' to accept):”的时候,输入yes即可;
这样就可以完成咱们三主三从的集群搭建了;
5、查看集群的状态的三种方式
可以进入任意一个redis容器内部:
#先通过容器名字或者容器的id进入容器内部
docker exec -it redis-node-1 /bin/bash
#然后进入6381端口的这个客户端,-c表示以集群的方式进入
redis-cli -p 6381 -c
通过cluster info 命令查看
通过cluster nodes查看
#查询集群信息的第二种方式
cluster nodes
结果:
通过redis-cli --cluster check 192.168.245.129:6381 查看(改成自己的ip哈)
具体操作:
6、数据的存取测试
比如在redis-node-1(port:6381)当中存数据:
在redis-node-5(port:6385)当中取数据呢?
二、重启redis docker 集群
当redis容器意外关闭之后,存在两个问题:
Q1:里边存储的数据会丢失
Q2:想要重启redis集群怎么办?
1、redis实例当中存储的数据会丢失吗?
由于咱们之前在创建redis实例的时候,已经做了数据卷的挂载,数据是和宿主机同在的,在容器当中保存的数据,在挂载的文件目录当中还可以找到:
进入挂载到宿主机的文件/data/redis/share/redis-node-1当中,可以看到存在有持久化的文件:dump.rdb和appendonly.aof。
之前启动redis实例的时候,同时做了数据卷的挂载:
宿主机挂载的文件:
2、怎么重启集群?还需要重新做集群配置吗?
先查看一下各个redis容器状态
#先查看一下所有的容器的状态,注意加-a可以显示所有容器,包括已经退出的
docker ps -a
比如:
所有的redis实例都已经关闭了!
重启redis的各个容器:
#可以通过start 容器id或者容器name启动
docker start redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 redis-node-6
此时再查看docker当中的各个容器状态:
然后进入任意一台redis容器当中,查看是否还存在集群的状态:
#进入redis-node-1的容器当中
docker exec -it redis-node-1 /bin/bash
#第一部分讲了有三种查看集群状态的方式,随意用一种都可以
可以看到,集群的状态还存在,不需要重新搭建集群模式了!
以集群模式进入任意一个redis客户端,验证一下数据是否还存在:
可以看到数据依然存在!
三、小结
1、搭建redis容器集群时:
启动6台redis实例:启动的同时最好完成数据卷挂载到宿主机(避免容器被误删,数据没有了),并且,为了保障持久化数据的完整性,最好开启aof持久化;
构建集群关系:需要进入任意一台redis容器内部,然后去通过:redis-cli --cluster create 6台redis的ip:端口 --cluster-replicas 1 ,完成构建集群关系;
最后有三种查看集群关系的方式;
2、重启redis docker集群:
只需要重启被关闭的redis实例即可,不需要重新构建集群关系!之前存储的数据,也没有丢失!
原文链接:https://blog.csdn.net/2301_78149288/article/details/135844683
新增redis 四主四从
#第七台
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --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:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
进入 redis-node-7 节点
redis-cli --cluster add-node 192.168.0.163:6387 192.168.0.163:6381 增加节点
redis-cli --cluster check 192.168.0.163:6381 查看主从情况
6387没有槽位,需要进一步分槽位 运行redis-cli --cluster reshard 192.168.0.163:6381
为6387分配从库6388
redis-cli --cluster add-node 192.168.0.163:6388 192.168.0.163:6387 --cluster-slave --cluster-master-id 8aab988fc5e97b0ca3c24ce6e149e8e1433ed990 (6387的iD)
标签:node,--,redis,cluster,集群,docker From: https://www.cnblogs.com/1204guo/p/18180342