Docker + Redis 主从环境搭建

Docker部署Redis主从

环境说明

  • Docker
  • Ubuntu/CentOS
  • Redis v4.0.10

redis.conf

  redis.conf是Redis的核心配置文件,默认docker运行的redis是不存在配置文件的,这里可以先从官网下载:

    wget http://download.redis.io/redis-stable/redis.conf

  下面分别介绍是否指定redis.conf来搭建Redis主从。

不指定redis.conf

1. 运行Redis
1.1 master(主库)
    # 运行服务
    docker run -it --name redis-master -d -p 6300:6379 redis redis-server --requirepass masterpassword
    # 测试连接redis
    docker exec -it redis-master redis-cli -a <master-password> 
1.2 slave(从库)
    # 运行服务
    docker run -it --name redis-slave -d -p 6301:6379 redis redis-server --requirepass slavepassword # 设定从库密码,可选
    # 测试连接redis
    docker exec -it redis-slave redis-cli
    # 进行密码认证
    auth <slave-password>
2. 主从连接及查看
2.1 从库配置

  slaveof <master-ip> <master-port><master-ip>为主库服务ip,<master-port>表示主库所在端口,默认6379

2.2 密码认证

  config set masterauth <master-password><master-password>即为主库访问密码

2.3 测试命令

  输入infoinfo Replication

img_91a319edf2b3576427784f17e7316c12.png
查看主从

指定redis.conf

  将上面下载好的redis.conf复制,分别为redis-master.conf和redis-slave.conf,找到指定配置并修改如下:

  • redis-master.conf
    # bind 127.0.0.1 # 注释当前行,表示任意ip可连
    daemonize yes # 让redis服务后台运行
    requirepass masterpassword # 设定密码
  • redis-slave.conf
    # bind 127.0.0.1
    daemonize yes
    requirepass slavepassword # 从库密码,可选配置
    # <masterip>表示主库所在的ip,而<masterport>则表示主库启动的端口,默认是6379
    slaveof <masterip> <masterport>
    # 主库有密码必需要配置,<master-password>代表主库的访问密码
    masterauth <master-password>
1. 运行Redis
1.1 master(主库)
    # 运行服务
    docker run -it --name redis-master -v /root/redis/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6300:6379 redis /bin/bash
    # 进入容器
    docker exec -it redis-master bash
    # 加载配置
    redis-server /usr/local/etc/redis/redis.conf
    # 测试连接
    redis-cli -a <master-password> 
1.2 slave(从库)
    # 运行服务
    docker run -it --name redis-slave -v /root/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6301:6379 redis /bin/bash
    # 进入容器
    docker exec -it redis-slave bash
    # 加载配置
    redis-server /usr/local/etc/redis/redis.conf
    # 测试连接
    redis-cli
    # 密码认证
    auth <slave-password>
2. 主从查看

  输入infoinfo Replication

img_91a319edf2b3576427784f17e7316c12.png
查看主从

相关链接

Redis commands
Redis 命令参考
Docker环境搭建redis集群(主从模式)

<think>我们之前已经整理过详细的Docker搭建Redis主从的步骤,用户再次询问可能是想确认或补充细节。根据用户提供的引用资料,特别是引用[1][2][3]中的方法,结合最佳实践,重新整理如下: ### 关键点确认: 1. **目录结构**:每个Redis实例使用独立目录存放配置和数据(如主节点6379,从节点6380/6381)[^2][^3] 2. **配置文件**:主节点无需特殊配置,从节点需设置`replicaof`指向主节点[^3] 3. **容器互联**:使用`--link`或自定义网络确保主从容器互通[^1][^3] 4. **密码一致**:若设置密码,主节点的`requirepass`和从节点的`masterauth`需相同[^3] ### 详细步骤: --- ### 一、创建目录和配置文件 ```bash # 主节点目录(端口6379) mkdir -p /home/docker/redis6379/{conf,data} # 从节点目录(示例6380/6381) mkdir -p /home/docker/redis6380/{conf,data} mkdir -p /home/docker/redis6381/{conf,data} ``` 1. **主节点配置** (`/home/docker/redis6379/conf/redis.conf`) ```conf port 6379 daemonize no # 可选密码设置(若需密码) requirepass 123456 appendonly yes ``` 2. **从节点配置** (`/home/docker/redis6380/conf/redis.conf`) ```conf port 6380 daemonize no # 指向主节点(使用容器名或IP) replicaof redis-master 6379 # 主节点密码(若设置) masterauth 123456 appendonly yes ``` > 📌 注意:Redis 5.0+ 使用 `replicaof` 替代旧版 `slaveof`[^3]。 --- ### 二、启动Redis容器 1. **启动主节点容器** ```bash docker run -d --name redis-master \ -p 6379:6379 \ -v /home/docker/redis6379/conf:/usr/local/etc/redis \ -v /home/docker/redis6379/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf ``` 2. **启动从节点容器(6380)** ```bash docker run -d --name redis-slave-6380 \ -p 6380:6380 \ -v /home/docker/redis6380/conf:/usr/local/etc/redis \ -v /home/docker/redis6380/data:/data \ --link redis-master:redis-master \ # 关键!容器网络互联 redis:latest \ redis-server /usr/local/etc/redis/redis.conf ``` 3. **启动第二个从节点(6381)** 重复步骤2,修改端口和目录即可: ```bash docker run -d --name redis-slave-6381 \ -p 6381:6381 \ -v /home/docker/redis6381/conf:/usr/local/etc/redis \ -v /home/docker/redis6381/data:/data \ --link redis-master:redis-master \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf ``` --- ### 三、验证主从复制 1. **查看主节点状态** ```bash docker exec -it redis-master redis-cli 127.0.0.1:6379> AUTH 123456 # 若设置密码 OK 127.0.0.1:6379> INFO replication ``` 输出应包含: ```bash role:master connected_slaves:2 # 显示连接的从节点数 ``` 2. **查看从节点状态** ```bash docker exec -it redis-slave-6380 redis-cli -p 6380 127.0.0.1:6380> AUTH 123456 OK 127.0.0.1:6380> INFO replication ``` 输出应包含: ```bash role:slave master_host:redis-master # 验证主节点连接 master_port:6379 ``` --- ### 四、常见问题解决 | 问题现象 | 解决方法 | |--------------------------|--------------------------------------------------------------------------| | 从节点无法连接主节点 | 1. 检查`--link`或自定义网络<br>2. 确认`replicaof`配置的IP/容器名正确[^1] | | 主从密码验证失败 | 确保主节点`requirepass`和从节点`masterauth`完全一致[^3] | | 配置文件未生效 | 检查`docker run`中`-v`挂载路径是否正确 | | 从节点数据不同步 | 检查主节点日志:`docker logs redis-master` | --- ### 进阶建议 1. **使用Docker Compose部署**:简化多容器管理[^1] 2. **启用持久化**:配置文件设置`appendonly yes`避免数据丢失 3. **哨兵模式**:通过Sentinel实现自动故障转移(生产环境推荐) --- ### 相关问题 1. 如何用Docker Compose一键部署Redis主从集群? 2. Redis主从复制延迟高的原因及优化方法? 3. 如何配置Redis Sentinel实现高可用? 4. DockerRedis数据备份与恢复的最佳实践? [^1]: 容器互联配置与Compose方案 [^2]: 目录结构与配置文件规范 [^3]: 主从密码验证与命令兼容性 </think>以下是使用Docker搭建Redis主从集群的详细步骤,结合容器化部署最佳实践和参考资料整理: --- ### 一、环境准备 #### 1. 创建配置文件目录 ```bash # 主节点目录(端口6379) mkdir -p /home/docker/redis6379/{conf,data} # 从节点目录(示例:6380/6381) mkdir -p /home/docker/redis6380/{conf,data} mkdir -p /home/docker/redis6381/{conf,data} ``` #### 2. 编写配置文件 - **主节点配置**(`/home/docker/redis6379/conf/redis.conf`) ```conf port 6379 daemonize no requirepass 123456 # 主节点密码 masterauth 123456 # 从节点访问主节点的密码 appendonly yes # 开启持久化 ``` - **从节点配置**(`/home/docker/redis6380/conf/redis.conf`) ```conf port 6380 daemonize no replicaof redis-master 6379 # 指向主节点 masterauth 123456 # 主节点密码 requirepass 123456 # 从节点密码(与主节点一致) appendonly yes ``` > 📌 **注意**:Redis 5.0+版本使用`replicaof`,旧版用`slaveof`[^3] --- ### 二、启动Redis容器 #### 1. 启动主节点 ```bash docker run -d --name redis-master \ -p 6379:6379 \ -v /home/docker/redis6379/conf:/usr/local/etc/redis \ -v /home/docker/redis6379/data:/data \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf ``` #### 2. 启动从节点(以6380为例) ```bash docker run -d --name redis-slave-6380 \ -p 6380:6380 \ -v /home/docker/redis6380/conf:/usr/local/etc/redis \ -v /home/docker/redis6380/data:/data \ --link redis-master:redis-master \ # 容器网络互联 redis:latest \ redis-server /usr/local/etc/redis/redis.conf ``` > ✅ 重复此命令启动其他从节点(如6381),修改端口和目录即可[^2][^3] --- ### 三、验证主从复制 #### 1. 检查主节点状态 ```bash docker exec -it redis-master redis-cli -a 123456 127.0.0.1:6379> INFO replication ``` 输出关键信息: ```bash role:master connected_slaves:2 # 连接的从节点数量 slave0:ip=172.17.0.3,port=6380,state=online # 从节点详情 ``` #### 2. 检查从节点状态 ```bash docker exec -it redis-slave-6380 redis-cli -a 123456 -p 6380 127.0.0.1:6380> INFO replication ``` 输出关键信息: ```bash role:slave master_host:redis-master # 正确指向主节点 master_port:6379 master_link_status:up # 连接状态正常 ``` --- ### 四、常见问题解决 | 问题现象 | 解决方法 | |--------------------------|--------------------------------------------------------------------------| | **从节点无法连接主节点** | 1. 检查`--link`或自定义网络<br>2. 确认`masterauth`与主节点`requirepass`一致[^3] | | **配置文件未生效** | 检查`docker run`中`-v`挂载路径是否正确 | | **主从数据不同步** | 1. 检查主节点日志:`docker logs redis-master`<br>2. 确认`replicaof`参数正确 | | **权限问题** | 运行`chmod -R 755 /home/docker/redis*`设置目录权限 | --- ### 五、生产环境建议 1. **密码安全**:使用强密码替换`123456`,主从节点密码需完全一致 2. **持久化配置**:确保所有节点开启`appendonly yes`防止数据丢失 3. **自定义网络**:替代`--link`(已废弃): ```bash docker network create redis-net docker run ... --network redis-net ``` 4. **哨兵模式**:通过Sentinel实现自动故障转移(高可用方案) --- ### 相关问题 1. 如何用Docker Compose一键部署Redis主从集群? 2. Redis主从复制延迟高的原因及优化方法? 3. 如何配置Redis Sentinel实现自动故障转移? 4. DockerRedis数据备份与恢复的最佳实践? [^1]: 容器网络互联与目录挂载配置 [^2]: 配置文件规范与多节点管理 [^3]: 主从密码验证与连接故障排查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值