Redis 主从复制集群搭建及其原理

本文详细介绍了如何在一台服务器上搭建一个一主二从的Redis主从复制集群,包括配置文件修改、启动服务、配置主从关系以及两种配置方式(slaveof临时配置和repllicaof永久配置)的对比。还讨论了主从复制的缺点和同步原理,包括全量同步和增量同步。
摘要由CSDN通过智能技术生成

目录

前言

配置文件

启动服务

配置主从关系

两种配置方式

slaveof

配置文件

补充

缺点

认证

复制原理

全量同步

增量同步


前言

单机的 redis 的性能虽然已经很强大了,但是随着业务的扩展,总有一天会遇到性能瓶颈,针对高并发带来的性能问题,解决的思路其实就是将请求分散,用多个 redis 来处理请求。

具体的操作其实就是搭建一个简单的 redis 主从复制集群。使用 redis 主从复制集群,master 节点用来处理写请求,slave 节点用来处理读请求,当master数据变化时,自动将新的数据异步同步到slave节点上,实现读写分离。根据并发量的大小,动态扩展集群里的 slave 节点,实现水平化扩容

本文演示搭建一个 redis 主从复制集群(一主二从)的基本流程。

图方便省事,就在一台服务器上直接启动三个 redis 服务。

配置文件

创建 redis-replication 文件夹

mkdir redis-replication

将默认配置文件 redis.conf 放入 redis-replication,并修改其中几项配置

daemonize no 改为 daemonize yes

protected-mode yes 改为 protected-mode no 关闭保护模式

bind 127.0.0.1 直接注释掉,否则影响远程IP连接

创建 redis-7000.conf,写入以下内容

include redis.conf
pidfile /var/run/redis_7000.pid
port 7000
dbfilename dump_7000.rdb
appendfilename appendonly_7000.aof
replica-priority 90

#logfile logs/access_7000.log

同理,创建 redis-7001.conf 和 redis-7002.conf,然后写入以上内容,将 7000 分别修改为 7001 和 7002,修改后文件夹如下所示

启动服务

在 redis-replication 目录下,依次启动服务

redis-server ./redis-7000.conf

redis-server ./redis-7001.conf

redis-server ./redis-7002.conf

配置主从关系

这里选择将 7000 端口的 redis 作为 master 节点

分别用三个终端,使用 redis-cli 连接 7000 7001 7002 的 redis

redis-cli -h 127.0.01 -p 7000
redis-cli -h 127.0.01 -p 7001
redis-cli -h 127.0.01 -p 7002

 在 7001 和 7002 上使用 slaveof 命令,配置为 master 的 slave 节点

slaveof 127.0.0.1 7000

在 7000 上查看 slave 信息

info replication

这样一个一主二从的主从复制集群就搭建完成了

两种配置方式

slaveof

文中所示,启动服务后,使用 slaveof 命令来配置当前 redis 为指定 master 的从节点。这种配置方式当次生效,下次启动时则需要再次配置

#配置当前redis为指定master的slave节点
slaveof -h master地址 -p 端口

#升级为主机
slaveof no one

配置文件

在配置文件中配置 repllicaof,这种方式永久有效,不用每次启动都去配置主从关系

replicaof master主机地址 端口

补充

缺点

主从复制存在延迟,会出现数据不一致现象

master 节点宕机,不会自动选举 master 节点,需要人工干预

认证

如果为了安全,连接 redis 需要密码,那么在配置文件中也需要配置连接主机密码

节点各自的配置文件添加以下配置项

requirepass "此redis的密码"

masterauth "主节点的密码,如果为主节点,就是填自己的密码"

复制原理

全量同步

  • Replication Id:每一个master都有唯一的replid,slave会继承master节点的replid
  • offset:偏移量,如果slave的offset小于master的offset,说明slave数据落后与master,需要更新

plantuml

@startuml
'https://plantuml.com/sequence-diagram

autonumber

slave -> master: slaveof,建立连接
slave -> master: sync,请求同步数据
master -> slave: 第一次同步,返回master的数据版本(replid 和 offset)
master -> master: bgsave,生成rdb
master -> master: 同时记录rdb期间的所有命令(repl_backlog)
master -> slave: 发送rdb文件
slave -> slave: 清空本地数据,加载rdb文件
master -> slave: 发送repl_baklog中的命令
slave -> slave: 执行接受到的命令

@enduml

时序图

 

增量同步

注意:repl_baklog大小有上限,写满后会覆盖最早的数据,如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步

plantuml

@startuml
'https://plantuml.com/sequence-diagram

autonumber

slave -> master: 发送replid与offset
master -> master: 判断replid是否一致
master -> slave: 一致返回continue
master -> slave: 发送repl_baklog中offset后的命令
slave -> slave: 执行接受到的命令

@enduml

时序图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值