搭建Redis主从集群
主从集群说明
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。
主从结构
这是一个简单的Redis主从集群结构
集群中有一个master节点、两个slave节点(现在叫replica)。当我们通过Redis的Java客户端访问主从集群时,应该做好路由:
● 如果是写操作,应该访问master节点,master会自动将数据同步给两个slave节点。
● 如果是读操作,建议访问各个slave节点,从而分担并发压力。
容器名 | 角色 | IP | 映射端口 |
r1 | master | 192.168.12.168 | 7001 |
r2 | slave | 192.168.12.168 | 7002 |
r3 | slave | 192.168.12.168 | 7003 |
上传文件
先把用到的 redis.tar 包 和 docker-compose.yml 文件上传到我们的服务器。
我上传到了 /home/sde/modules/redis 目录中
加载镜像
docker load -i redis-tar
查看下redis镜像
docker images
启动多个Redis实例
这个就是我的docker-compose.yml 文件里面的内容
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"]
运行集群
docker compose up -d
查看下docker容器
由于采用的是host模式,我们看不到端口映射。不过能直接在宿主机通过ps命令查看到Redis进程:
建立集群
虽然我们启动了3个Redis实例,但是它们并没有形成主从关系。我们需要通过命令来配置主从关系:
# 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.200.128 7001
然后连接r3,让其以r1为master
# 连接r3
docker exec -it r3 redis-cli -p 7003
# 认r1主,也就是7001
slaveof 192.168.200.128 7001
然后连接r1
,查看集群状态:
# 连接r1
docker exec -it r1 redis-cli -p 7001
# 查看集群状态
info replication
可以看到,当前节点r1:7001
的角色是master
,有两个slave与其连接:
slave0
:port
是7002
,也就是r2
节点slave1
:port
是7003
,也就是r3
节点
测试
依次在 r1 r2 r3 节点上执行下面的命令
set name sde
get name
r1
r2
r3
就会发现只有在r1节点可以执行 set 命令(写操作),其他两个节点 只能执行 get 命令(读操作)。也就是读写分离了。