Redis6 搭建主从集群架构

文章目录

搭建Redis主从集群架构

安装部署单机版Redis6可参考:

安装部署单机版Redis6

1.集群结构

我们搭建的主从集群结构如图:

我们计划是在一台虚拟机里去部署三个Redis实例来模拟主从集群,那要想在一台虚拟机要准备三个实例,我们就必须得准备三个不同的配置文件和目录,让他们分别去运行,互相不干扰。所以我们要做的第一件事其实是创建三个文件夹,分别用端口来命名,这样方便我们将来去找。

共包含三个节点,一个master主节点,两个slave 从节点。

这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:

IP PORT 角色
192.168.10.11 7001 master
192.168.10.11 7002 slave
192.168.10.11 7003 slave

2.准备实例和配置

要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

1)创建目录

我们创建三个文件夹,名字分别叫7001、7002、7003:

bash 复制代码
mkdir 7001 7002 7003

接下来还要给这三个目录准备配置文件,因为每一个实例都要有自己独立的配置文件

2)恢复原始配置

那有的同学就有疑问了,为什么我们要把RDB开启,把 AOF 关闭呢?这个我们在后边学习了主从同步的原理,大家就能明白了。

修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。

bash 复制代码
# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000

# 关闭AOF
appendonly no

bind 0.0.0.0

3)拷贝配置文件到每个实例目录

然后将redis-6.2.4/redis.conf文件拷贝到三个目录中(在Redis安装目录下进行操作,我的在/usr/local/software/):

bash 复制代码
# 方式一:逐个拷贝
cp redis-6.2.6/redis.conf 7001
cp redis-6.2.6/redis.conf 7002
cp redis-6.2.6/redis.conf 7003

# 方式二:管道组合命令,一键拷贝
echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.6/redis.conf

4)修改每个实例的端口、工作目录

修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录:

例如7001:

bash 复制代码
port 7001
dir /usr/local/software/7001/


5)修改每个实例的声明IP

虚拟机本身有多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,格式如下:

bash 复制代码
# redis实例的声明 IP
replica-announce-ip 192.168.10.11

每个目录都要改,我们一键完成修改(在/usr/local/software/目录执行下列命令):

bash 复制代码
printf '%s\n' 7001 7002 7003 | xargs -I{} -t sed -i '1a replica-announce-ip 192.168.10.11' {}/redis.conf

查看是否修改成功

3.启动

为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令:

bash 复制代码
# 第1个
redis-server 7001/redis.conf
# 第2个
redis-server 7002/redis.conf
# 第3个
redis-server 7003/redis.conf

启动后:

如果要一键停止,可以运行下面命令:

bash 复制代码
printf '%s\n' 7001 7002 7003 | xargs -I{} -t redis-cli -p {} shutdown

但是目前它们三个之间有没有主从关系。其实这三个线是独立的三个Redis。

4.开启主从关系

现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。

有临时和永久两种模式:

  • 修改配置文件(永久生效)
bash 复制代码
在redis.conf中添加一行配置:

slaveof 主节点ip 主节点端口
slaveof <masterip> <masterport>
  • 使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
bash 复制代码
slaveof <masterip> <masterport>
slaveof 主节点ip 主节点端口

注意:在5.0以后新增命令replicaof,与salveof效果一致。

这里我们为了演示方便,使用方式二。

通过redis-cli命令连接7002,执行下面命令:

bash 复制代码
# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof 192.168.10.11 7001

通过redis-cli命令连接7003,执行下面命令:

bash 复制代码
# 连接 7003
redis-cli -p 7003
# 执行slaveof
slaveof 192.168.10.11 7001

然后连接 7001节点,查看集群状态:

bash 复制代码
# 连接 7001
redis-cli -p 7001
# 查看状态
info replication


5.测试

执行下列操作以测试:

  • 利用redis-cli连接7001,执行set num 123

  • 利用redis-cli连接7002,执行get num,再执行set num 666

  • 利用redis-cli连接7003,执行get num,再执行set num 888

可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。

是不是天然的就实现了读写分离了?主节点做写操作,从节点做读操作。

其实主从的搭建非常的简单,就是你启动三个实例,我们因为是在同一个机器下,所以要改端口什么的,如果你是在不同机器,就不用去改端口之类的东西了,直接咔咔启动三台就行了,然后在从节点上执行命令就行了

bash 复制代码
slaveof <masterip> <masterport>
相关推荐
Lee川3 小时前
深度拆解:基于面向对象思维的“就地编辑”组件全模块解析
javascript·架构
勤劳打代码3 小时前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
子兮曰8 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
卓卓不是桌桌11 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
Qlly11 小时前
DDD 架构为什么适合 MCP Server 开发?
人工智能·后端·架构
用户881586910911 天前
AI Agent 协作系统架构设计与实践
架构
鹏北海1 天前
Qiankun 微前端实战踩坑历程
前端·架构
货拉拉技术1 天前
货拉拉海豚平台-大模型推理加速工程化实践
人工智能·后端·架构
RoyLin2 天前
libkrun 深度解析:架构设计、模块实现与 Windows WHPX 后端
架构
CoovallyAIHub2 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github