当前位置: 首页 > article >正文

搭建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与其连接:

  • slave0port7002,也就是r2节点
  • slave1port7003,也就是r3节点

测试

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

set name sde
get name

r1

r2

r3

就会发现只有在r1节点可以执行 set 命令(写操作),其他两个节点 只能执行 get 命令(读操作)。也就是读写分离了。


http://www.kler.cn/a/600230.html

相关文章:

  • .NET三层架构详解
  • Web纯前端实现在线打开编辑保存PPT幻灯片
  • CSS 中 letter-spacing 不支持百分比
  • rust学习笔记18-迭代器
  • 开源ORB_SLAM2项目编译常见问题与应对办法
  • vue3+element-plus+el-tree-v2实现节点过滤
  • 批量查询数据库中符合条件的文档,并把每个文档转换为相应的类实例后返回一个列表
  • 案例:使用网络命名空间模拟多主机并通过网桥访问外部网络
  • c# 2025-3-22 周六
  • 再读强化学习24March
  • ESP32 BLE 初步学习笔记
  • API架构风格
  • 【机器学习】什么是逻辑回归?
  • Unity 游戏开发:从新手到大师的进阶之路
  • 网络安全威胁与防护措施(下)
  • vue 点击放大,图片预览效果
  • Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测
  • trino查询mysql报Unknown or incorrect time zone: ‘Asia/Shanghai‘
  • spring +kotlin 配置redis 和redis的常用方法
  • AI大模型全攻略:原理 · 部署 · Prompt · 场景应用