利用虚拟机中的三个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: rediscontainer_name: r1network_mode: "host"entrypoint: ["redis-server", "--port", "7001"]r2:image: rediscontainer_name: r2network_mode: "host"entrypoint: ["redis-server", "--port", "7002"]r3:image: rediscontainer_name: r3network_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与其连接:
slave0:port是7002,也就是r2节点slave1:port是7003,也就是r3节点
测试:
依次在r1、r2、r3节点上执行下面命令:
set num 123get num
结果:

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