Redis 高可用架构系列(一)主从架构
在上一篇文章中,我们大概已经知道了,Redis 是如何进行数据持久化的,我们知道了 Redis 做为内存型数据库是如何对数据进行安全的保障,那么这次我们来看下,在真正的线上生产环境中,我们如何保障 Redis 的高可用性。
Redis 主从架构
Redis 主从架构的搭建
redis 主从架构搭建,配置从节点步骤:
1.复制一份 redis.conf 文件
2.将相关配置修改为如下值:
port 6380
pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件
logfile "6380.log"
dir /usr/local/redis‐5.0.3/data/6380 # 指定数据存放目录
# 需要注释掉bind
#bind 127.0.0.1 (bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
3.配置主从复制
replicaof 192.168.0.60 6379 #从本机6379的redis实例复制数据,Redis5.0之前使用slaveof
replica‐read‐only yes # 配置从节点只读
4.启动从节点
redis‐serverredis.conf
5.连接从节点
redis‐cli ‐p 6380
6.测试在 6379 实例上写数据,6380 实例是否能及时同步新修改数据
7.可以自己再配置一个 6381 的从节点
Redis 主从工作原理
如果你为 master 配置了一个 slave,不管这个 slave 是否是第一次连接上 Master,它都会发送一个 PSYNC
命令给 master 请求复制数据。
master 收到 PSYNC 命令后,会在后台进行数据持久化通过 bgsave 生成最新的 rdb 快照文件,持久化期 间,master 会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完 毕以后,master 会把这份 rdb 文件数据集发送给 slave,slave 会把接收到的数据进行持久化生成 rdb,然后 再加载到内存中。然后,master 再将之前缓存在内存中的命令发送给 slave。
当 master 与 slave 之间的连接由于某些原因而断开时,slave 能够自动重连 Master,如果 master 收到了多 个 slave 并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送 给多个并发连接的 slave。
主从复制流程图(全量复制):
数据部分复制
当 master 和 slave 断开重连后,一般都会对整份数据进行复制。但从 redis2.8 版本开始,redis 改用可以支 持部分数据复制的命令 PSYNC 去 master 同步数据,slave 与 master 能够在网络连接断开重连后只进行部分 数据复制(断点续传)。
master 会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master 和它所有的 slave 都维护了复制的数据下标 offset 和 master 的进程 id,因此,当网络连接断开后,slave 会请求 master 继续进行未完成的复制,从所记录的数据下标开始。如果 master 进程 id 变化了,或者从节点数据下标 offset 太旧,已经不在 master 的缓存队列里了,那么将会进行一次全量数据的复制。
主从复制流程图(部分复制,断点续传):
如果有很多从节点,为了缓解主从复制风暴(多个从节点同时复制主节点导致主节点压力过大),可以做如 下架构,让部分从节点与从节点(与主节点同步)同步数据
推荐阅读
•聊一聊 Redis 基本类型和使用场景•揭秘 Redis 的高性能•Redis 的持久化原理
如果觉得文章对你有帮助,可以点个赞,转载请注名出处。
评论 (0)