redis主从部署+哨兵部署

72 阅读4分钟

主从复制,是指将⼀台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且⼀个主节点可以有多个从节点(或没有从节点),但⼀个从节点只能有⼀个主节点。

主从复制的作⽤

a)数据冗余:主从复制实现了数据的热备份,是持久化之外的⼀种数据冗余⽅式。

b)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是⼀种服务的冗余。

c)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应⽤连接主节点,读Redis数据时应⽤连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以⼤⼤提⾼Redis服务器的并发量。

d)⾼可⽤基⽯:除了上述作⽤以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis⾼可⽤的基础。

主节点不需要做任何改变,从节点都需要修改配置加上主节点信息,配置完成后,可以再主库检查从节点信息

-- 添加主节点信息

replicaof 192.168.199.128 6379

-- 主节点查看从节点信息

info Replication

主从复制缺点

复制延时,信号衰减 由于所有的写操作都是现在master上操作,然后同步更新到slave上,所以从master同步到slave机器上有⼀定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。

master挂了如何办?默认情况下,不会在slave节点中⾃动重选⼀个master,每次都要⼈⼯⼲预。

哨兵部署(Sentinel)

Redis的主从复制主要⽤于实现数据的冗余备份和读分担,并不是为了提供⾼可⽤性。因此在系统⾼可⽤⽅⾯,单纯的主从架构⽆法很好的保证整个系统⾼可⽤

哨兵模式的原理

Redis哨兵模式是通过在独⽴的哨兵节点上运⾏特定的哨兵进程来实现的。这些哨兵进程监控主从节点的状态,并在发现故障时⾃动完成故障发现和转移,并通知应⽤⽅,实现⾼可⽤性。

在启动时,每个哨兵节点会执⾏选举过程,其中⼀个哨兵节点被选为领导者(leader),负责协调其他哨兵节点。

每个在线的哨兵节点都可以成为领导者,每个哨兵节点会向其它哨兵发is-master-down-by-addr命令,征求判断并要求将⾃⼰设置为领导者;当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;如果哨兵发现⾃⼰在选举的票数⼤于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举。

监控主从节点:

哨兵节点通过发送命令周期性地检查主从节点的健康状态,包括主节点是否在线、从节点是否同步等。如果哨兵节点发现主节点不可⽤,它会触发⼀次故障转移。

故障转移: ⼀旦主节点被判定为不可⽤,哨兵节点会执⾏故障转移操作。它会从当前的从节点中选出⼀个新的主节点,并将其他从节点切换到新的主节点。这样,系统可以继续提供服务⽽⽆需⼈⼯介⼊。

故障转移过程: 由Sentinel节点定期监控发现主节点是否出现了故障:sentinel会向master发送⼼跳PING来确认master是否存活,如果master在“⼀定时间范围”内不回应PONG 或者是回复了⼀个错误消息,那么这个sentinel会主观地(单⽅⾯地)认为这个master已经不可⽤了。

确认主节点

  • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点
  • 选择从节点优先级最⾼的
  • 选择复制偏移量最⼤,此指复制最完整的从节点
  • 当主节点出现故障, 由领导者负责处理主节点的故障转移。

客户端重定向

哨兵节点会通知客户端新的主节点的位置,使其能够与新的主节点建⽴连接并发送请求。这确保了客户端可以⽆缝切换到新的主节点,继续进⾏操作。