
使用Docker快速搭建Redis主从复制的完整步骤
Redis主从复制可以实现数据的备份和读写分离,提升系统的可用性和并发处理能力。使用Docker可以省去繁琐的环境配置,快速搭建Redis主从架构。本文将详细介绍如何通过Docker和Docker Compose搭建一个一主二从的Redis集群。
1. 创建目录结构
首先在宿主机上创建存放配置文件和数据的目录,以便于持久化和修改配置。
mkdir -p /opt/redis-master-slave/{master,slave1,slave2}2. 编写主节点配置文件
在 /opt/redis-master-slave/master/ 目录下创建 redis.conf 文件,写入以下基础配置:
bind 0.0.0.0 protected-mode no port 6379 appendonly yes
3. 编写从节点配置文件
分别在 /opt/redis-master-slave/slave1/ 和 /opt/redis-master-slave/slave2/ 目录下创建 redis.conf 文件,写入以下配置。从节点需要开启只读模式:
bind 0.0.0.0 protected-mode no port 6379 appendonly yes slave-read-only yes
4. 编写Docker Compose编排文件
在 /opt/redis-master-slave/ 目录下创建 docker-compose.yml 文件。我们将定义一个主节点和两个从节点,并通过Docker内部网络使从节点连接到主节点。从节点启动时通过 --replicaof 参数指定主节点的服务名。
version: '3.8' services: redis-master: image: redis:7.0 container_name: redis-master restart: always ports: - "6379:6379" volumes: - ./master/data:/data - ./master/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf redis-slave1: image: redis:7.0 container_name: redis-slave1 restart: always ports: - "6380:6379" volumes: - ./slave1/data:/data - ./slave1/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379 depends_on: - redis-master redis-slave2: image: redis:7.0 container_name: redis-slave2 restart: always ports: - "6381:6379" volumes: - ./slave2/data:/data - ./slave2/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379 depends_on: - redis-master
5. 启动服务
在 /opt/redis-master-slave/ 目录下执行以下命令启动Redis主从集群:
docker-compose up -d
等待镜像拉取并启动完成,可以通过 docker ps 命令查看三个Redis容器是否正常运行。
6. 验证主从复制
验证主从同步是否生效,首先进入主节点写入一条测试数据:
docker exec -it redis-master redis-cli 127.0.0.1:6379> SET testkey "hello redis" OK
接着进入其中一个从节点,尝试读取该数据,并测试只读权限:
docker exec -it redis-slave1 redis-cli 127.0.0.1:6379> GET testkey "hello redis" 127.0.0.1:6379> SET testkey "new value" (error) READONLY You can't write against a read only replica.
最后,可以在主节点查看复制状态,确认已连接的从节点数量:
docker exec -it redis-master redis-cli 127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:2 ...
注意事项
1. 上述配置关闭了保护模式(protected-mode no)并绑定了0.0.0.0,仅适用于内网测试环境。生产环境请务必配置密码认证(requirepass和masterauth)并限制绑定IP。
2. 如果需要外网访问该集群,请在宿主机防火墙开放6379、6380、6381端口。
3. 主从复制仅解决了数据备份和读分离的问题,若需实现高可用自动故障转移,需要在此基础上部署Redis Sentinel(哨兵模式)。