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 ,让他变成 r1 的 slave 。。。

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:port 是 7002,也就是 r2 节点
  • slave1:port 是 7003,也就是 r3 节点

1.2.3.测试

依次在 r1 、 r2 、r3 节点上执行下面命令:

bash 复制代码
set num 123
get num

结果如下:

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

显然是不行的 ~

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

参考:

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

相关推荐
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙3 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除3 天前
redis--018
redis
两锭子3 天前
Redis基础
redis
烟沙九洲3 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索3 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞3 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路3 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog3 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis