Docker容器创建Redis主从集群

发布于:2025-06-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

利用虚拟机中的三个Docker容器创建主从集群,容器信息:

容器名 角色 IP 映射端口
r1 master 192.168.150.101 7001
r2 slave 192.168.150.101 7002
r3 slave 192.168.150.101 7003

启动多个redis实例

新建一个docker-compose文件来构建主从集群:

文件内容:

version: "3.2"

services:
  r1:
    image: redis
    container_name: r1
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7001"]
  r2:
    image: redis
    container_name: r2
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7002"]
  r3:
    image: redis
    container_name: r3
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7003"]

上传到虚拟机的/root/redis目录下

移动到这个目录下

执行命令:

docker compose up -d

结果:

建立集群

通过命令建立集群关系:

# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>

有两种模式:

  • 永久生效:在redis.conf文件中利用slaveof命令指定master节点
  • 临时生效:直接利用redis-cli控制台输入slaveof命令,指定master节点

这里测试临时模式,先连接r2让其以r1为master

  # 连接r2
docker exec -it r2 redis-cli -p 7002
# 认r1主,也就是7001
slaveof 192.168.150.101 7001

然后连接r3让其以r1为master

# 连接r3
docker exec -it r3 redis-cli -p 7003
# 认r1主,也就是7001
slaveof 192.168.150.101 7001

连接r1查看集群状态

# 连接r1
docker exec -it r1 redis-cli -p 7001
# 查看集群状态
info replication

输出结果:

127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.150.101,port=7002,state=online,offset=42,lag=0
slave1:ip=192.168.150.101,port=7003,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:12683467c1e8c3805281c12a6d7187ca3bb0bb73
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
127.0.0.1:7001>

可以看到,当前节点r1:7001的角色是master,有两个slave与其连接:

  • slave0port7002,也就是r2节点
  • slave1port7003,也就是r3节点

测试:

依次在r1r2r3节点上执行下面命令:

set num 123

get num

结果:

可以发现:只有在r1这个节点上可以执行set命令(写操作),其它两个节点只能执行get命令(读操作)。也就是说读写操作已经分离了。


网站公告

今日签到

点亮在社区的每一天
去签到