Docker容器创建Redis主从集群
利用虚拟机中的三个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
命令(读操作)。也就是说读写操作已经分离了。