Redis实战篇——搭建主从复制

Redis实战篇------搭建主从复制

1.Redis主从

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

1.1.主从集群结构

下图就是一个简单的 Redis 主从集群结构:

如图所示,集群中有一个 master 节点、两个 slave 节点(现在叫replica)。当我们通过 Redis 的 Java 客户端访问主从集群时,应该做好路由:

  • 如果是写操作,应该访问 master 节点,master 会自动将数据同步给两个 slave 节点
  • 如果是读操作,建议访问各个 slave 节点,从而分担并发压力

1.2.搭建主从集群

我们会在同一个虚拟机中利用3个Docker容器来搭建主从集群,容器信息如下:

容器名 Value ip : 端口
r1 master 192.168.xx.xxx:7001
r2 slave 192.168.xx.xxx:7002
r3 slave 192.168.xx.xxx:7003

1.2.1.启动多个Redis实例

我们利用 docker 进行部署

docker-compose 如下

不会使用 docker 可以查看以下文章:

一文带你安装 Centos 安装 Docker

Docker 常用命令大全!!

docker-compose.yaml 文件如下:

yaml 复制代码
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 目录下:

执行命令,搭建集群:

bash 复制代码
docker compose up -d

查看 docker 容器,可以看到都正常启动了

查看端口映射:

1.2.2.建立集群

虽然我们启动了3个 Redis 实例,但是它们并没有形成主从关系。我们需要通过命令来配置主从关系:

bash 复制代码
# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>

有临时和永久两种模式:

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

我们测试临时模式,首先连接 r2 ,让其以 r1 为master

bash 复制代码
# 连接r2
docker exec -it r2 redis-cli -p 7002
# 认r1主,也就是7001
slaveof 192.168.xx.xxx 7001

使用info replication 命令查看 r2 状态,可以看到他的 master 已经是 7001

有个小问题,那么我们还没连接的时候,他的身份是什么呢?

这里我们连接 r3 查看他的状态中的 role

没错,他是他自己的主人!

然后连接 r3 ,让他变成 r1slave 。。。

bash 复制代码
# 连接r3
docker exec -it r3 redis-cli -p 7003
# 认r1主,也就是7001
slaveof 192.168.xx.xxx 7001

然后连接 r1 ,查看集群状态:

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

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

  • slave0:port7002,也就是 r2 节点
  • slave1:port7003,也就是 r3 节点

1.2.3.测试

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

bash 复制代码
set num 123
get num

结果如下:

那么我们可以在从节点 set 吗?

显然是不行的 ~

至此,我们就部署了简单的 Redis 的主从复制 ~

参考:

https://www.bilibili.com/video/BV1S142197x7?p=142&vd_source=f586bbf89de5904ba5a05a8c1d18f1c4

相关推荐
DT辰白3 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存
木子七4 小时前
Redis-十大数据类型
redis
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭7 小时前
聊聊volatile的实现原理?
java·jvm·redis
灯火不休➴7 小时前
[Redis] 在Linux中安装Redis并连接图形化工具详细过程(附下载链接)
linux·数据库·redis
呆呆小雅11 小时前
C#关键字volatile
java·redis·c#
miss writer12 小时前
Redis分布式锁释放锁是否必须用lua脚本?
redis·分布式·lua
亽仒凣凣13 小时前
Windows安装Redis图文教程
数据库·windows·redis
希忘auto14 小时前
详解Redis的常用命令
redis·1024程序员节
岁月变迁呀21 小时前
Redis梳理
数据库·redis·缓存
Code apprenticeship1 天前
怎么利用Redis实现延时队列?
数据库·redis·缓存