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

相关推荐
登云时刻25 分钟前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(一)
redis·kubernetes·bootstrap
煎饼小狗6 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
秋意钟8 小时前
缓存雪崩、缓存穿透【Redis】
redis
简 洁 冬冬8 小时前
046 购物车
redis·购物车
soulteary9 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
wkj00110 小时前
php操作redis
开发语言·redis·php
菠萝咕噜肉i10 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
登云时刻11 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
Dlwyz15 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺16 小时前
Redis性能优化的18招
数据库·redis·性能优化