用docker实现Redis主从配置
初始条件
在三台不同服务器上使用 Docker 部署 Redis 主从模式,通常有以下步骤。
假设你有三台服务器,分别为 server1、server2 和 server3,我们将在这些服务器上设置 Redis 的主从复制。
步骤概览
准备 Redis 配置文件:每台服务器上的 Redis 实例需要配置主从关系。
在三台服务器上启动 Docker 容器:在每台服务器上分别启动 Redis 容器,其中两台作为从节点,一台作为主节点。
配置主从复制:在从节点上配置连接到主节点。
步骤 1:准备 Docker 环境
在每台服务器上安装 Docker,并确保它们能够相互通信。如果你使用 Docker Compose,也可以通过配置 docker-compose.yml 文件来简化配置。
步骤 2:启动 Redis 容器
你需要在三台服务器上启动 Redis 容器。以下是如何在每台服务器上启动 Redis 实例的步骤。
- 启动主节点(Server1)
在 server1 上启动主节点 Redis:
docker run -d \--name redis-master \--restart always \-p 6379:6379 \redis:latest
此命令会启动一个 Redis 容器并将其设置为主节点。6379 是 Redis 的默认端口。
- 启动从节点(Server2)
在 server2 上启动一个从节点 Redis,并连接到 server1 上的主节点:
docker run -d \--name redis-slave1 \--restart always \-e REDIS_REPLICATION_MODE=slave \-e REDIS_MASTER_HOST=<server1_ip> \-e REDIS_MASTER_PORT=6379 \-p 6380:6379 \redis:latest
这里,<server1_ip> 是 server1 的 IP 地址,redis-slave1 是从节点的名称。通过环境变量来指定从节点连接到主节点。
- 启动从节点(Server3)
在 server3 上启动另一个从节点 Redis,并连接到 server1 上的主节点:
docker run -d \--name redis-slave2 \--restart always \-e REDIS_REPLICATION_MODE=slave \-e REDIS_MASTER_HOST=<server1_ip> \-e REDIS_MASTER_PORT=6379 \-p 6381:6379 \redis:latest
同样,替换 <server1_ip> 为主节点的 IP 地址。
步骤 3:配置主从复制
Redis 会自动通过容器的环境变量配置主从关系,但是你可以通过连接到从节点并手动配置主从关系来确保一切正常。
- 进入从节点容器并配置主从关系
docker exec -it redis-slave1 redis-cli
连接到从节点后,执行以下命令以确保它正确地配置了主从复制:
SLAVEOF <server1_ip> 6379
同样,在 redis-slave2 上执行相同的操作:
docker exec -it redis-slave2 redis-cli
SLAVEOF <server1_ip> 6379
步骤 4:验证主从复制是否成功
你可以使用以下命令来检查主从关系是否正常工作:
连接到主节点(server1):
docker exec -it redis-master redis-cli
在主节点上执行命令查看从节点:
INFO replication
你应该能看到类似以下的输出,显示从节点已连接:
localhost:6379[1]> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.100.121,port=6379,state=online,offset=7873245,lag=0
slave1:ip=172.16.100.122,port=6379,state=online,offset=7793351,lag=1
master_failover_state:no-failover
master_replid:0ab711eb4e43cf51c349e232042f3ef01b009c72
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7874805
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:6826230
repl_backlog_histlen:1048576
连接到从节点(server2 或 server3):
docker exec -it redis-slave1 redis-cli
在从节点上执行命令查看主节点信息:
INFO replication
输出应显示从节点已正确连接到主节点,如下所示:
# Replication
role:slave
master_host:172.16.100.102
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:48479646
slave_repl_offset:48479646
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0ab711eb4e43cf51c349e232042f3ef01b009c72
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:48479646
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:47431071
repl_backlog_histlen:1048576
步骤 5:持久化配置(可选)
为了确保 Redis 数据在重启后依然有效,你可以为 Redis 配置持久化机制。可以通过修改 Redis 配置文件或使用 Docker 挂载数据卷来实现。
docker run -d \--name redis-master \--restart always \-v /path/to/data:/data \-p 6379:6379 \redis:latest
这样,Redis 数据将保存在本地磁盘,而不是容器的默认文件系统中。
总结:
主节点:在 server1 上启动一个 Redis 实例。
从节点:在 server2 和 server3 上启动两个 Redis 从节点,并将它们配置为从属于 server1。
验证复制:通过 INFO replication 命令验证主从关系是否正确。
通过这种方式,你可以在三台服务器上使用 Docker 部署一个高可用的 Redis 主从模式。