阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 主从复制与哨兵

435次阅读
没有评论

共计 3161 个字符,预计需要花费 8 分钟才能阅读完成。

Redis 可以使用从属服务器来实现读写分离提高吞吐量或在主服务器故障时接替主服务器以提高可用性。

每个 Redis 服务器实例都可以配置多个 slave 节点,slave 服务器也可以拥有次级 slave 节点, 可以组织成复杂的树状结构(虽说生产环境下极少有人这么做)。

配置主从复制

为了尝试配置主从复制,我们至少需要两个 redis 服务器实例。最简单的方法是在 redis 官网下载 redis-server 二进制可执行文件,分别放在 master 和 slave 目录中。

在每个目录中分别创建 redis.conf 配置文件。master 实例的配置文件采用默认即可,在 slave 实例中进行主从复制配置:

# 和主服务器 6379 区分
port 6380

# 主服务器 ip 端口
slaveof 127.0.0.1 6379

# 如果主服务器配置了密码请写在这个配置项中
# masterauth <master-password>

##
## 接下来的选项保留默认配置即可,这里仅做介绍
##

# 当与 master 断开连接或正在进行同步时
# yes: 仍然正常响应客户端请求,但可能返回过时数据
# no: 除 INFO 和 SLAVEOF 命令正常外,其它命令均返回 SYNC with master in progress 错误
slave-serve-stale-data yes

# 从服务器只读
slave-read-only yes

使用 redis-server redis.conf 命令分别启动 redis-server 实例。使用redis-cli -p 6380 命令连接从服务器:

127.0.0.1:6380> info Replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:16
master_sync_in_progress:0
slave_repl_offset:3640
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0b4e100aa9e9fda54aeba2bc110316d811ac2ff6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3640
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3640
127.0.0.1:6380> get a
1
127.0.0.1:6380> set a 2
(error) READONLY You can't write against a read only slave.

SLAVEOF host port 可以动态改变从服务器所属的 master 节点。SLAVEOF NO ONE 关闭复制功能,并从 slave 服务器转变回 master 服务器,原来同步所得的数据集不会被丢弃。在当主服务器故障时,可以使用 SLAVEOF NO ONE 命令将 slave 服务器提升为 master。

主从复制原理

SYNC

在 Redis 2.8 之前的版本里,Redis 仅支持全量复制不支持增量复制,这极大的影响了主从同步的性能。

Redis 2.8 之前的版本主从复制流程如下:

  1. slave 发送 SYNC 命令给 master
  2. master 执行 bgsave 命令生成 rdb 文件。于此同时,所有新的写命令都将被写入复制缓冲区内
  3. master 将 rdb 文件发送给 slave
  4. master 将缓冲区中的命令同步给 slave, 完成一次主从同步

PSYNC

Redis 2.8 开始使用 PSYNC 命令代替 SYNC 命令,PSYNC 具有全量复制和增量复制功能。

master 和 slave 节点均拥有一个 runid 作为自己的唯一标识。

master 和 slave 会各自维护一个复制偏移量,在增量复制时标识同步进度。

master 会维护一个 FIFO 的复制缓冲区(replication backlog),默认大小 1mb。

# 复制缓冲区大小
repl-backlog-size 1mb

# 当 master 不再与任何 slave 保持连接时,复制缓冲区可能被清空
# repl-backlog-ttl 用于配置从断开连接到清空缓冲区间隔的秒数
# 0 表示永不清除缓冲区
repl-backlog-ttl 3600

接下来我们可以开始说明 PSYNC 命令执行的流程:

  1. slave 向 master 请求同步
    1. 若 slave 未与任何 master 同步过或执行了 SLAVEOF NO ONE 命令,则向 master 发送 PSYNC ? -1命令要求进行全量同步。
    2. 否则,则向 master 发送 psync <runid> <offset>命令要求增量同步,其中 runid 是上次同步的主服务器的 ID,offset 是同步偏移量
  2. master 响应同步请求
    1. 若 slave 请求增量同步且满足:1. runid 与自身相同;2. 同步偏移量处于自身复制缓冲区内,则响应 +continue 将复制缓冲区内的数据同步到 slave
    2. 若 slave 请求增量同步但不同时满足上述两个条件或 slave 请求全量同步,则响应+fullresync <runid> <offset> 执行全量同步,其中 runid 是自身 ID, offset 是自身同步偏移量。
  3. 若自身版本过低不支持 PSYNC 命令则响应 error, slave 会尝试使用 SYNC 命令进行同步。

哨兵

简单的主从复制架构在 master 故障后会不可用,Redis 官方提供了哨兵 (sentinel) 机制自动实现主备切换保证高可用。

哨兵机制通过一组哨兵节点监控主从节点的运行状态,并在主节点故障后选举新的主节点。

哨兵节点定时执行 3 个任务:

  • 哨兵节点每隔 10s 向主从节点发送 INFO 命令以更新拓扑图,自动感知新的 slave 节点。

  • 哨兵节点每隔 1s 向主从节点发送 PING 命令进行心跳检测。

  • 哨兵节点每隔 2s 向 __sentinel__:hello 频道发送自身哨兵节点信息和自身了解的 master 信息。所有哨兵节点均会订阅该频道,并以此更新哨兵集群信息。

若哨兵节点发现 master 节点心跳响应超时,则认为 master 主观下线。此时,master 可能真的已经崩溃也可能仅仅是此哨兵节点与 master 之间出现网络故障。

认为 master 主观下线的哨兵会向其它哨兵发送 sentinel is-master-down-by addr 询问 master 是否下线。若半数以上的哨兵认为 master 已经下线则认为 master 客观下线。

哨兵节点会选举自己第一个收到的 is-master-down-by 命令的发送者为哨兵领导者。若某一个节点得到过半投票则会成为哨兵领导者,若没有节点得到半数以上票则会进入下一轮投票。此选举流程与 Paxos 算法类似。

哨兵领导者负责选择一个 slave 节点提升为新 master 节点, 选择逻辑为:

  1. 过滤掉不健康的 slave 节点
  2. 选择 slave-priority 配置值最小的从节点。若有多个从节点 slave-priority 最小且相同则进入下一步
  3. 选择复制偏移量最大的从节点,这意味着这个从节点上面的数据最完整。若仍有多个 slave 节点偏移量相同则进入下一步
  4. 选择 runid 最小的从节点

新的 master 节点选出后会执行提升流程:

  1. 向新选出的 master 节点发出 SLAVEOF NO ONE 命令,提升为新的 master 节点
  2. 向其它 slave 节点发出 SLAVEOF 命令跟随新的 master 节点
  3. 在哨兵集群中将下线的 master 节点更新为下线的 slave 节点,在其回复后命令其跟随新的 master

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3161字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7802381
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...