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

本文详述了在Docker环境下配置Redis主从复制的过程,包括环境准备、修改redis.conf文件,以及搭建redis-master和redis-slave容器。在搭建过程中,遇到由于开启cluster-enable导致的报错问题,通过注释掉相关内容解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境
  • 同一宿主机两个docker容器,请提前安装好docker
  • master:172.17.0.2
  • slave:172.17.0.3
配置redis.conf
[root@server1 ~]# tar zxf redis-4.0.8.tar.gz
[root@server1 ~]# cd redis-4.0.8/
[root@server1 ~]# mkdir -p /mnt/redis/conf.d
[root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-master.conf
[root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-slave.conf
  • 主节点 redis-master.conf

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

    [root@server1 conf.d]# vim redis-slave.conf
      69 bind 0.0.0.0                                 # 连接开放
      88 protected-mode no                            # 保护模式关闭 
     136 daemonize yes                                # 服务后台运行 
    
redis-master容器搭建
  • 获取镜像,创建容器

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

    [root@server1 ~]# cd /mnt/redis/conf.d/
    [root@server1 conf.d]# vim redis-master.conf
     814 #cluster-enabled yes
    [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
    077db232f8b1d257185190e7f21b694e8db8df0ba9ccf497d82bfe5ebf08bad3
    [root@swarm1 conf.d]# docker attach redis-master 
    root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
    root@077db232f8b1:/data# redis-cli
    127.0.0.1:6379> set new old                           # 测试数据创建成功
    OK
    
redis-slave容器搭建
  • 容器创建

    [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
    [root@swarm1 conf.d]# docker inspect redis-slave | grep IPA
          "SecondaryIPAddresses": null,
          "IPAddress": "172.17.0.3",
                  "IPAMConfig": null,
                  "IPAddress": "172.17.0.3",
    [root@swarm1 conf.d]# docker attach redis-master
    root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
    root@574c798128ee:/data# redis-cli
    127.0.0.1:6379> slaveof 172.17.0.2 6379              # 链接到master节点,因同一宿主机中的容器通过docker0进行网络
    OK                                                   # 通信,即就相当于同属于一个子网中,所以直接连接容器内服务端口
    127.0.0.1:6379> info replication
    # Replication
    role:slave                                    # 该容器redis服务为从节点
    master_host:172.17.0.2                        # 主节点 
    master_port:6300
    master_link_status:down
    
  • 主节点查看

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=172.17.0.3,port=6379,state=online,offset=28,lag=1             # slave容器ip
    127.0.0.1:6379> get new                              # 测试数据成功 
    "old"
    
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。Redis是一个开源的内存数据结构存储系统,支持多种数据结构,如字符串、哈希、列表等。Redis主从复制是一种数据复制机制,用于将一个Redis服务器的数据复制到其他Redis服务器上。 下面是一个使用Docker Compose配置Redis主从复制的示例: 1. 首先,创建一个名为docker-compose.yml的文件,并在其中定义两个Redis服务,一个作为主服务器,另一个作为从服务器。示例配置如下: ```yaml version: '3' services: redis-master: image: redis ports: - "6379:6379" volumes: - ./redis-master-data:/data command: redis-server --appendonly yes redis-slave: image: redis volumes: - ./redis-slave-data:/data command: redis-server --slaveof redis-master 6379 ``` 2. 在上述配置中,我们定义了两个服务:redis-master和redis-slave。redis-master服务使用Redis官方镜像,并将主服务器的6379端口映射到主机的6379端口。同时,我们将主服务器的数据目录挂载到本地的redis-master-data目录。 3. redis-slave服务也使用Redis官方镜像,并将从服务器的数据目录挂载到本地的redis-slave-data目录。在command字段中,我们使用--slaveof参数指定redis-slave作为redis-master的从服务器,并指定主服务器的地址和端口。 4. 在终端中,进入包含docker-compose.yml文件的目录,并运行以下命令启动Redis主从复制: ```bash docker-compose up -d ``` 5. 等待一段时间,直到两个Redis服务器都成功启动。您可以使用以下命令检查容器的状态: ```bash docker-compose ps ``` 6. 现在,您可以通过连接到主服务器的6379端口来访问Redis服务器,并将数据复制到从服务器。您可以使用以下命令连接到Redis服务器: ```bash redis-cli -h localhost -p 6379 ``` 7. 在连接到主服务器后,可以执行一些Redis命令来设置和检索数据。这些数据将自动复制到从服务器。 这就是使用Docker Compose配置Redis主从复制的基本步骤。您可以根据需要进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值