Docker配置Redis集群及主从扩容与缩容的操作方法

 更新时间:2024年06月13日 12:12:07   作者:米兰的小铁匠~  
这篇文章主要介绍了Docker配置Redis集群及主从扩容与缩容的操作方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

基础镜像拉取

docker run -p 6379:6379 -d redis:6.0.8

配置文件以及数据卷挂载

# 开启密码验证(可选)
requirepass 1234
# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1
# 关闭保护模式(可选)
protected-mode no
# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
# 开启redis数据持久化, (可选)
appendonly yes

进行数据卷挂载

docker run -d -p 6379:6379 --name redis --privileged=true \
           -v /app/redis/redis.conf:/etc/redis/redis.conf \
           -v /app/redis/data:/data \
           redis:6.0.8 \
           redis-server /etc/redis/redis.conf

三主三从配置

# 启动第1台节点
docker run -d --name redis-node-1 --net host --privileged=true -v /app/redis-cluster/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
# 启动第2台节点
docker run -d --name redis-node-2 --net host --privileged=true -v /app/redis-cluster/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
# 启动第3台节点
docker run -d --name redis-node-3 --net host --privileged=true -v /app/redis-cluster/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
# 启动第4台节点
docker run -d --name redis-node-4 --net host --privileged=true -v /app/redis-cluster/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
# 启动第5台节点
docker run -d --name redis-node-5 --net host --privileged=true -v /app/redis-cluster/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
# 启动第6台节点
docker run -d --name redis-node-6 --net host --privileged=true -v /app/redis-cluster/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

通过docker ps可以看到结点已经运行成功 

我们通过ifconfig查看本机的ip地址,后续操作会用到

进入到node1中

docker exec -it redis-node-1 /bin/bash

配置主从关系:

redis-cli --cluster create ip:6381 ip:6382 ip:6383 ip:6384 ip:6385 ip:6386 --clu
ster-replicas 1

查看集群状态:cluster nodes 

每次配置的主从关系都不一致,所以需要查看信息 ,本次的主从对应关系对应如下图所示:

 Redis集群模式配置

进入容器节点1:

docker exec -it redis-node-1 /bin/bash

此时配置set k1 v1可能会报错,因为k1超过了哈希槽的位置 ,无法进行匹配

我们以集群模式进入节点1:

redis-cli -p 6381 -c 

此时会将哈希槽进行重定向,哈希槽为12706,重定向到6383(即节点3,哈希槽[10923, 16383]) 

主从扩容

配置第七,第八台redis服务

docker run -d --name redis-node-7 --net host --privileged=true -v /app/redis-cluster/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 /app/redis-cluster/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

进入第七台容器内部

docker exec -it redis-node-7 /bin/bash 

将第七台容器加入集群

redis-cli --cluster add-node ip:6387 ip:6381

检查集群配置信息,此时加入集群成功,但哈希槽并没有重新分配

重新分配哈希槽:

redis-cli --cluster reshard ip:6381 

我们现在有4台主机,所以16384/4=4096,每台机器分配到4096个槽位,然后会提示将哪些节点分配出去,此时输入all,并且输入yes

 此时原先的哈希槽位发生了变化,有些槽位中已经存储了key,完全的重新洗牌重新分配的成本过高,所以redis选择从前3个节点中匀出来一部分给node7

为主节点6387分配从节点6388:

redis-cli --cluster add-node 192.168.xxx.xxx:6388 192.168.xxx.xxx:6387 --cluster-slave --cluster-master-id (6387的id)

主从缩容

现将从机6388移除

1. 进入容器节点1

docker exec -it redis-node-1 /bin/bash

2. 检查容器状态,获取6388的节点编号,并移除

redis-cli --cluster del-node ip:6388 6388节点编号

3. 对集群重新分配槽位

redis-cli --cluster reshard ip:6381 

我们将node7的槽位全部分配出去,所以输入4096,将他分配给node1,所以再次输入node1的id,并且输入node7的id,回车后输入done 

此时槽位重新分配后,node7的槽位为0,我们可以将他删除,否则会报错

redis-cli --cluster del-node ip:6387 node7 id

到此这篇关于Docker配置Redis集群以及主从扩容与缩容的文章就介绍到这了,更多相关Docker配置Redis集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Ubuntu16.04安装Docker、nvidia-docker的教程

    详解Ubuntu16.04安装Docker、nvidia-docker的教程

    这篇文章主要介绍了详解Ubuntu16.04安装Docker、nvidia-docker的教程,需要的朋友可以参考下
    2019-10-10
  • Docker部署Nginx设置环境变量的实现步骤

    Docker部署Nginx设置环境变量的实现步骤

    本文主要介绍了Docker部署Nginx设置环境变量的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Docker 手动配置容器网络实例详解

    Docker 手动配置容器网络实例详解

    这篇文章主要介绍了Docker 手动配置容器网络实例详解的相关资料,这里有具体实现,需要的朋友可以参考下
    2016-11-11
  • Docker自动部署Apache Tomcat的方法

    Docker自动部署Apache Tomcat的方法

    这篇文章主要介绍了Docker自动部署Apache Tomcat的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Docker中redis安装及测试教程

    Docker中redis安装及测试教程

    这篇文章主要介绍了Docker中redis安装及测试教程的一些基础方法和知识,为后续安装部署redis集群做准备,需要的朋友可以参考下
    2022-11-11
  • Docker容器配置Nginx实例分享

    Docker容器配置Nginx实例分享

    这篇文章主要介绍了Docker容器配置Nginx实例分享的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker容器化部署Python应用过程解析

    Docker容器化部署Python应用过程解析

    这篇文章主要介绍了Docker容器化部署Python应用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 如何通过Jenkins定期清理为None的镜像详解

    如何通过Jenkins定期清理为None的镜像详解

    这篇文章主要给大家介绍了关于如何通过Jenkins定期清理为None的镜像的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 使用Docker创建FTP服务器的过程解析

    使用Docker创建FTP服务器的过程解析

    这篇文章主要介绍了使用Docker创建FTP服务器的过程解析,使用 Docker 搭建 FTP 服务,不仅十分简单,而且可以对宿主机有一定的隔离,对Docker创建FTP服务器的过程感兴趣的朋友一起看看吧
    2022-04-04
  • Docker容器迁移到其他服务器的5种方法详解

    Docker容器迁移到其他服务器的5种方法详解

    这篇文章主要介绍了Docker容器迁移到其他服务器的5种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论