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

搭建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 命令(读操作)。也就是读写分离了。

相关文章:

  • 学习c++多线程前,回顾一下Linux的多线程
  • Linux网络相关概念和重要知识(3)(TCP套接字编程、远程命令的实现)
  • C/S与B/S架构
  • this.centerDialogVisible = true this.$nextTick(()=>{ this.resetForm(); })
  • this(执行上下文)
  • 1 存储过程学习: 使用DMSQL程序的优点
  • 如果vue加载页面的时候,需要加载很多子vue ,能不能先加载一个,让页面处于能用的状态,多余的在后台加载。
  • Java 基础入门代码示例解析
  • 使用Python调用Jenkins Api之获取构建日志使用说明文档
  • SpringBoot 3.0之后为什么移除了spring.factories
  • 好好学Docker:基于Docker buildx构建多平台镜像【转载】
  • Python爬取微博签到数据(2025年3月更)
  • python的文件上传
  • 单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
  • 【MySQL】JDBC —— Java 连接 MySQL
  • Qt 隐式共享
  • Java「Deque」 方法详解:从入门到实战
  • 信息安全和病毒防护——入侵检测技术
  • selenium基本使用(二)九种定位方法
  • 深度优先搜索(DFS)在排列组合问题中的应用详解:C++实现与优化
  • 世卫大会拒绝涉台提案,外交部:坚持一个中国原则是人心所向
  • 马上评|房屋“注胶堵漏”骗局何以屡屡得逞
  • 前四月国家铁路发送货物12.99亿吨,同比增长3.6%
  • 铜川耀州窑遗址内违法矿场存在多年,省市区文物部门多次处罚叫停仍在生产
  • 三人在共享单车上印小广告被拘,北京警方专项打击非法小广告
  • 上海百年龙华码头开启新航线,弥补浦江游览南段空缺