天天看点

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

Redis主从复制简述

  • 为了使集群可以在部分节点故障时仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replication), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave),主节点(master)用作数据写入,其余N-1个从节点(slave)用于数据读取。

Redis主从复制特点

  • 可以用于读写分离和容灾恢复。
  • 一个主master可以有多个slave。
  • 多个slave除了链接到相同的master之外、slave还可以链接其它slave形成阶梯传递。
  • 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

Redis主从复制原理

  • Slave启动成功连接到master后会发送一个sync命令。
  • Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
  • 全量复制:而slave服务在接收到Master数据库文件数据后,将其存盘并加载到内存中。
  • 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
  • 当lave节点只要是重新连接master,一次完全同步(全量复制)将被自动执行。

Redis主从复制的缺点

  • 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

Redis主从复制的常用的几种方式

  • 一主多仆:Master主节点【A】,多个从节点Slave【B、C、D】
    Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
  • 薪火相传(去中心化):Master主节点【A】、Slave从节点【B、C】、C节点下有slave从节点【D】、则C节点即从又主。
    Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
  • 反客为主:当主节点Master宕机后、执行slaveof no one手动升级从节点为主节点。
    Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
  • 哨兵模式(反客为主的自动版):当主节点Master宕机后、自动通过投票的方式选举某个从节点升级为主节点。
    Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

Redis集群配置之(一主多仆模式)

  • 配从不配主。
  • 从库配置 slaveof 主库IP 主库端口,每次与Master断开之后,都需要手动重连,除非配置进redis.conf文件则会自动重连。
  • 可使用info replication查看当前主从节点状态。

① 拷贝多个redis.conf文件,分别设置运行模式daemonize启动模式,pid文件名称,端口,Log文件名字,dump.rdb名称。

status ip port daemonize pidfile logfile dbfilename
Master 127.0.0.1 6379 yes /usr/local/bin/redis_6379.pid redis_6379.log dump_6379.rdb
Slave 127.0.0.1 6380 yes /usr/local/bin/redis_6380.pid redis_6380.log dump_6380.rdb
Slave 127.0.0.1 6381 yes /usr/local/bin/redis_6381.pid redis_6381.log dump_6381.rdb
Slave 127.0.0.1 6382 yes /usr/local/bin/redis_6382.pid redis_6382.log dump_6382.rdb
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

② 分别启动redis-server服务端,redis-cli客户端

#切换目录
cd /usr/local/bin/ && ll

#redis-server端启动
redis-server /opt/module/redis-3.0.4/isRedis/redis_6379.conf 
redis-server /opt/module/redis-3.0.4/isRedis/redis_6380.conf 
redis-server /opt/module/redis-3.0.4/isRedis/redis_6381.conf 
redis-server /opt/module/redis-3.0.4/isRedis/redis_6382.conf 

#redis-cli客户端启动
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
redis-cli -p 6382
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

③ 查看启动进程

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

④ 使用 info replication查看每个节点默认主从信息

#查看主从状态
info replication
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

⑤ 设置6380 6381 6382 以 6379为主库(Master)

#链接Master
SLAVEOF 127.0.0.1 6379
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

⑥ 测试Master[6379]写入数据、其它Slave节点获取数据

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

Redis集群配置之(薪火相传模式)

① 薪火相传模式 设置6382 以6381 为master

#链接命令
SLAVEOF 127.0.0.1 6381
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

② 测试主节点Master【6379】写入数据、其它从节点获取

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

Redis集群配置之(反客为主模式)

① 重新设置6380 6381 6382以6379为主Master节点、模拟6379主节点宕机、并查看其它从节点信息

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

② 在6380节点执行slaveof no one手动升级为Master 、并重新设置6381 6382以6380为主Master

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

③ 反客为主模式测试

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

Redis集群配置之(哨兵Sentinel模式)

① 重置6380 6381 6382以6379为主Master

② 创建sentinel.conf文件写入Master监控主机

#sentinel内容 【hf6379为哨兵名】
sentinel monitor hs6379 127.0.0.1 6379 1
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

③ 启动哨兵

redis-sentinel /opt/module/redis-3.0.4/isRedis/sentinel.conf 
           
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

④ 现在模拟主机Master【6379】宕机、哨兵会通过投票重新选举一个Slave为主Master

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式
Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

⑤ 模拟以前的Master【6379】重新启动

Redis 集群之主从复制(Relication)与哨兵(Sentinel)模式

继续阅读