Docker下配置redis主从复制详细过程

女爷i 2022-02-28 15:14 346阅读 0赞

Docker下配置redis主从复制详细过程

2019年03月19日 16:00:37 累了困了喝六神 阅读数:116 标签: redis主从 docker docker搭建redis docker-redis 更多

个人分类: 学习笔记

环境

  • 同一宿主机两个docker容器,请提前安装好docker
  • master:172.17.0.2
  • slave:172.17.0.3

配置redis.conf

  1. [root@server1 ~]# tar zxf redis-4.0.8.tar.gz
  2. [root@server1 ~]# cd redis-4.0.8/
  3. [root@server1 ~]# mkdir -p /mnt/redis/conf.d
  4. [root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-master.conf
  5. [root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-slave.conf
  • 1
  • 2
  • 3
  • 4
  • 5

  • 主节点 redis-master.conf

    1. [root@server1 ~]# cd /mnt/redis/conf.d/
    2. vim redis-master.conf
    3. 69 bind 0.0.0.0 # 连接开放
    4. 88 protected-mode no # 保护模式关闭
    5. 136 daemonize yes # 服务后台运行
    6. 814 cluster-enabled yes
    7. 822 cluster-config-file nodes-6379.conf
    8. 827 cluster-node-timeout 15000
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 从节点 redis-slave.conf

    1. [root@server1 conf.d]# vim redis-slave.conf
    2. 69 bind 0.0.0.0 # 连接开放
    3. 88 protected-mode no # 保护模式关闭
    4. 136 daemonize yes # 服务后台运行
    • 1
    • 2
    • 3
    • 4

redis-master容器搭建

  • 获取镜像,创建容器

    1. [root@server1 ~]# docker pull redis
    2. [root@swarm1 conf.d]# docker run -it --name redis-master -v /mnt/redis/conf.d/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6300:6379 redis /bin/bash
    3. [root@swarm1 conf.d]# docker inspect redis-master | grep IPA # 挂载.conf文件,宿主机端口6300
    4. "SecondaryIPAddresses": null,
    5. "IPAddress": "172.17.0.2",
    6. "IPAMConfig": null,
    7. "IPAddress": "172.17.0.2",
    8. [root@swarm1 conf.d]# docker attach redis-master
    9. root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
    10. root@077db232f8b1:/data# redis-cli
    11. 127.0.0.1:6379> info replication
    12. # Replication
    13. role:master
    14. connected_slaves:0
  • redis-master写入数据时报错:(error)CLUSTERDOWN Hash slot not served”
    在这里插入图片描述
    原因: 运行容器时挂载的 /mnt/redis/conf.d/redis-master.conf 文件中开启了cluster-enable,注释该内容后重新运行容器

    1. [root@server1 ~]# cd /mnt/redis/conf.d/
    2. [root@server1 conf.d]# vim redis-master.conf
    3. 814 #cluster-enabled yes
    4. [root@swarm1 conf.d]# docker run -it --name redis-master -v /mnt/redis/conf.d/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6300:6379 redis /bin/bash
    5. 077db232f8b1d257185190e7f21b694e8db8df0ba9ccf497d82bfe5ebf08bad3
    6. [root@swarm1 conf.d]# docker attach redis-master
    7. root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
    8. root@077db232f8b1:/data# redis-cli
    9. 127.0.0.1:6379> set new old # 测试数据创建成功
    10. OK

redis-slave容器搭建

  • 容器创建

    1. [root@swarm1 conf.d]# docker run -it --name redis-slave -v /mnt/redis/conf.d/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6301:6379 redis /bin/bash
    2. [root@swarm1 conf.d]# docker inspect redis-slave | grep IPA
    3. "SecondaryIPAddresses": null,
    4. "IPAddress": "172.17.0.3",
    5. "IPAMConfig": null,
    6. "IPAddress": "172.17.0.3",
    7. [root@swarm1 conf.d]# docker attach redis-master
    8. root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
    9. root@574c798128ee:/data# redis-cli
    10. 127.0.0.1:6379> slaveof 172.17.0.2 6379 # 链接到master节点,因同一宿主机中的容器通过docker0进行网络
    11. OK # 通信,即就相当于同属于一个子网中,所以直接连接容器内服务端口
    12. 127.0.0.1:6379> info replication
    13. # Replication
    14. role:slave # 该容器redis服务为从节点
    15. master_host:172.17.0.2 # 主节点
    16. master_port:6300
    17. master_link_status:down
  • 主节点查看

    1. 127.0.0.1:6379> info replication
    2. # Replication
    3. role:master
    4. connected_slaves:1
    5. slave0:ip=172.17.0.3,port=6379,state=online,offset=28,lag=1 # slave容器ip
    6. 127.0.0.1:6379> get new # 测试数据成功
    7. "old"

发表评论

表情:
评论列表 (有 0 条评论,346人围观)

还没有评论,来说两句吧...

相关阅读