中间件 | Redis - [主从复制]

Source

§1 主从复制

§1.1 流程

主从复制流程

  • 全量复制
    • 从节点连接主节点后,向主节点发送数据同步消息
    • 主节点收到同步消息后,对主节点进行持久化
    • 将生成的 rdb 文件发送给从节点
    • 从节点通过此文件进行恢复
  • 增量复制
    • 主节点进行写操作后,与从节点进行同步

多级主从复制
从节点依然可以作为另一些从节点的主节点,如下图
极端情况,至少技术上可以配置为链路模式
在这里插入图片描述
复制延时问题
写操作是集中在主节点上的,主节点的数据同步到从节点会有延迟

  • 当系统繁忙时,延时问题会加剧
  • 从节点数量较多时,延时问题会加剧
  • 多级主从复制时,延时问题会加剧
  • 读操作并发量较大时,延时问题的后果会加剧

宕机问题
从节点宕机

  • 重写启动后需要重新加入集群 slaveof 192.168.3.11 6379
  • 重新加入集群时会从主节点同步数据

主节点宕机

  • 从节点不会主动变为主节点
  • 通过 info replication 查看 master_link_status:down

§1.2 示例

以一主二从为例

创建集群目录
mkdir /redis/cluster01

创建所有节点的配置文件
主节点 6379
vi redis6379.conf

# inclue 引入原始配置文件
# 相当于用原始配置文件作为模板,然后进行增量配置
include /etc/redis/redis.conf
pidfile /var/run/redis_6379.pid
prot 6379
dbfilename dump6379.rdb

从节点 6380
vi redis6380.conf

include /etc/redis/redis.conf
pidfile /var/run/redis_6380.pid
prot 6380
dbfilename dump6380.rdb
# 主节点设了密码的话增加配置
masterauth 密码

从节点 6381
vi redis6381.conf

include /etc/redis/redis.conf
pidfile /var/run/redis_6381.pid
prot 6381
dbfilename dump6381.rdb
# 主节点设了密码的话增加配置
masterauth 密码

启动三个节点
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf

建立集群
从节点( 6380、6381 )上执行 slaveof 192.168.3.11 6379

从节点的独立
可以使用 slaveof no one 使当前节点脱离与主节点的关系,也成为主节点

§2 哨兵模式

作用
可以解决主从复制模式下的宕机问题

哨兵配置
创建 sentinel.conf

sentinel monitor alias ip port count 
  • alias 被监控对象别名
  • ip 监控主节点ip
  • port 监控主节点端口
  • count 同意迁移的哨兵的最小数量

启动哨兵
redis-sentinel sentinel.conf
默认端口号 26379

哨兵模式下的宕机
主节点宕机

  • 从节点自动成为主节点
  • 原主节点作为新主节点的从节点(有没有重启都是)

哨兵模式下选主策略
按选择条件的优先级进行排列,顺次比较各个从节点的

  • 优先级高 (值越小越高)
    优先级参考 中间件 | Redis - [安装 & 配置]
  • 偏移量大
    即从原主机同步数据同步的最全的
  • runid 小
    redis 实例启动时随机生成的