Windows上利用docker搭建Redis主从集群

本文将利用docker开启3个redis实例,模拟主从集群(一个主节点,两个从节点),信息如下:

容器名IP宿主机的映射端口角色
redis-m172.21.0.217001master
redis-s1172.21.0.227002slave
redis-s2172.21.0.237003slave

Windows上利用docker搭建redis主从集群(一主二从):

  1. 拉取最新的redis镜像

    docker pull redis:latest
    
  2. 在本机上某位置新建文件夹docker_redis/redis-m/confdocker_redis/redis-s1/confdocker_redis/redis-s2/conf存放三个redis节点的配置文件

    请添加图片描述

  3. 拷贝一份redis配置文件redis.conf到刚刚创建的三个节点的conf目录下

    请添加图片描述

    redis.conf可以在官方配置文件的基础上修改,主要改以下几处(以主节点redis-m为例):

    port 6379
    
    bind 0.0.0.0
    
    # 开启RDB
    # save ""
    save 3600 1
    save 300 100
    save 60 10000
    
    # 关闭AOF
    appendonly no
    
    # redis实例的声明 IP
    replica-announce-ip 172.21.0.21
    # redis实例的声明 端口号
    replica-announce-port 6379
    

    对于两个从节点redis-s1redis-s2可以直接复制主节点的配置文件到对应目录,然后将cluster-announce-ip改为172.21.0.22172.21.0.23,并且增加额外一行配置它跟随的主节点:

    # slaveof <masterip> <masterport>
    slaveof 172.21.0.21 6379
    
    
    # 或者
    # replicaof <masterip> <masterport>
    # replicaof 172.21.0.21 6379
    
  4. 创建docker网络,记得设置子网,子网要与配置文件中redis节点的IP保持一致

    关于docker的网络模式和容器间的网络通信可以看这篇文章

    docker network create --subnet 172.21.0.0/16 redis
    

    请添加图片描述

  5. 从redis镜像启动三个redis实例容器,并分别将本机的7001、7002、7003端口映射到每个容器的6379端口,来模拟三个不同的redis节点。

     docker run -p 7001:6379 -p 17001:16379 --name redis-m -v D:\docker_redis\redis-m\conf:/etc/redis --net redis --ip 172.21.0.21 -d redis redis-server /etc/redis/redis.conf
    
     docker run -p 7002:6379 -p 17002:16379 --name redis-s1 -v D:\docker_redis\redis-s1\conf:/etc/redis --net redis --ip 172.21.0.22 -d redis redis-server /etc/redis/redis.conf
    
     docker run -p 7003:6379 -p 17003:16379 --name redis-s2 -v D:\docker_redis\redis-s2\conf:/etc/redis --net redis --ip 172.21.0.23 -d redis redis-server /etc/redis/redis.conf
    

    请添加图片描述

    注意:

    • 每个容器的IP要与它们在宿主机上的配置文件中设置的IP相同

    • 将宿主机上的conf文件夹挂载到容器内,防止容器关闭后配置丢失。注意这里不要直接挂载配置文件,否则可能导致没有写入配置文件的权限, 在日志中会报Could not create tmp config file (Permission denied),因此要采用直接挂载文件夹的形式

    • 创建时不要挂载data文件夹,后续可能会出现Failed trying to load the MASTER synchronization DB from disk的错误,主从同步也会失败(暂不清楚原因)

      取消-v D:\docker_redis\redis-m\data:/data的挂载,还要注释配置文件中dir ./这一行

    这样就创建好了带有主从关系的三个redis容器:

    请添加图片描述

  6. 主从集群建立成功,可以执行如下命令查看主从关系

    • 进入主节点的终端:

      docker exec -it redis-m bash
      

      连接redis:

      redis-cli -c
      

      查看主从信息:

      info replication
      

      请添加图片描述

      可以看到那两个从节点已经连接上了

    • 进入某个从节点的终端

      docker exec -it redis-s1 bash
      

      连接redis:

      redis-cli
      

      查看主从信息:

      info replication
      

      请添加图片描述

      可以看到,从节点的master的IP和端口号均正确

  7. 测试

    • 在主节点上可以读和写数据到redis,且主节点上写的数据会被自动同步到从节点
    • 从节点可以读到主节点上写的数据,但是从节点不能写入数据
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值