首页 > 数据库 >docker搭建redis集群(三主三从)及重启redis集群 redis扩容新增集群

docker搭建redis集群(三主三从)及重启redis集群 redis扩容新增集群

时间:2024-05-08 17:33:05浏览次数:31  
标签:node -- redis cluster 集群 docker

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

相关文章

  • Redis
    redis是什么?为什么使用?基于内存的,k,v形式非关系型数据库,单机可支持十万tps。为什么使用?解决并发、性能问题,弥补关系型数据库的不足。redis的特点?1.高可用架构2.高性能3.支持持久化4.支持多种数据结构5.支持pub/sub消息模式6.支持多种语言7.原子操作,所有操作都是原子操作,......
  • 【container】【docker-compose】【mysql】【redis】【rabbit mq】【mongo】【elastic
    @目录写在前面mysqlredisrabbitmqmongoelasticsearch单节点多节点参考资料dockerkuberneteshelmk3s写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。mysqlversion:'3'services:......
  • 解决国产系统 Docker 拉取大镜像卡顿之谜
    今天解决了客户arm64机器上dockerpull大镜像卡住的问题。由来同事让我帮忙解决客户现场Docker镜像无法拉取的问题,故障如下会一直卡住: $ docker pull xxx:5000/xxxx xxx: Pulling from xxx/xxxxxx 7c0b344a74c2: Extracting [>     ......
  • Docker 部署 Redis
    获取镜像#拉取镜像此处我们拉取的是官方最新镜像,其它版本可以去DockerHub查询[root@VM-24-9-centos~]#dockerpullredis:7.2创建挂载目录并复制相关文件##创建挂载目录[root@VM-0-17-centos~]#mkdir-pdata/redis/{conf,data}##切换到conf目录并下载配置文件和......
  • redis
    一、Redis概述REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis与其他key-value缓存产品......
  • docker安装redis
    因为经常要自己弄服务器,有的命令用完就忘了。现在记一下拉取镜像dockerpullredis##创建目录mkdir-p/opt/docker/redis/confmkdir-p/opt/docker/redis/data #生成假的容器dockerrun-di--name=myredisredis#复制配置文件到宿主机dockercpmymysql:/etc/red......
  • 进阶 Redis 技术与应用
    目录1.Redis高级数据结构1.1.HyperLogLog1.2.Bitmaps1.3.Geospatial数据1.4.Pub/Sub(发布/订阅)2.Redis事务与持久化2.1.Redis事务简介2.2.持久化方式:RDB和AOF2.3.配置和管理持久化3.Redis高级功能3.1.分布式锁3.2.Lua脚本3.3.客户端连接和连接池3.4.......
  • docker - [15] springboot微服务打包docker镜像
    步骤:1、构建Springboot项目2、打包应用3、编写dockerfile4、构建docker镜像5、发布运行   一、构建Springboot项目(1)创建一个SpringBoot(以下这种方式对jdk版本有要求,可以创建一个Maven项目使用jdk8)(2)使用的SpringBoot版本是3.x,所以要求jdk17+(3)修改SpringBoot和jd......
  • [转]docker访问宿主机 host.docker.internal 域名不生效的问题
    原文地址:docker网络问题host.docker.internal不生效?-SegmentFault思否host.docker.internal是一个开发功能,只在DockerDesktop有效。你用的是DockerDesktop吗?(Linux下一般都不是)https://docs.docker.com/deskt...ThehosthasachangingIPaddress(ornoneif......
  • (一)Linux CentOS Redis 安装
    1、获取源//redis-stable是最新稳定版wgethttps://download.redis.io/redis-stable.tar.gz2、解压编译//我指定目录/apptar-xzvfredis-stable.tar.gz-C/appcd/app/redis-stablemake&&makeinstall3、修改配置启动//设置后台运行daemonizeno改成yes//运行......