Redis高可用

Redis主从复制以及哨兵模式(sentinel)

1、什么是redis的主从复制?

        redis中,用户可以执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器的数据。复制数据的一方为从服务器,另一方为主服务器。

 

2、有什么作用?

        2.1、读写分离

        一般情况下,主服务器用来进行数据的写入以及更新,从服务器用来读取,提升系统性能。

        2.2、容灾恢复

        redis持久化中,我们可以有两种方式保存数据—RDB以及AOF。但是,这两种方式都是将数据写入硬盘。而假如硬盘故障呢?使用这种方式可以极大提升数据安全性!

3、复制过程?

Redis高可用_第1张图片

在新版的redis中(版本大于2.8),采用psync命令代替sync命令,它有效解决了sync在从服务器与主服务器短线之后,重新连接需要再一次进行完整的复制操作而浪费大量系统资源的问题。

4psync详解

        redis通过维护一下三部分数据来实现部分重同步

        4.1、复制偏移量

        主服务器与从服务器都会维护一个复制偏移量。主服务器每次向从服务器传播N个字节数据,就将自己这个变量增加N,从服务器接收多少字节数据,则也将此变量增加多少。

        4.2、复制积压缓冲区

        此部分主要是主服务维护的一个固定长度的队列。队列的大致结构如下:

从上表可以看到,这个结构中保存着复制偏移量的节点以及主服务器发送的字节数据。从服务器的偏移量如果在此部分之内,则主服务器可以将此节点后面的数据发送给从服务器,而不必生成RDB文件,将所有的数据发送过去。

        4.3、服务器运行id

        除了以上两部分数据之外,服务器id在进行数据复制时也扮演者重要的角色。

        在第一次进行复制时,主服务器会将自己的服务器id发送给从服务器。以后每一次的数据同步,以及从服务器断线重联之后,都需要根据此id来判断是否是以前的服务器。如果不是,则会重新复制所有数据。如果是以前的服务器,则根据复制偏移量是否在复制积压缓冲区是否可以找得到来进行数据的全同步或者部分同步。

5、什么是sentinel

        由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

6sentinel的作用

        官网上主要说明了有一下几点:

  • 监控Sentinel会不断检查您的主例和副本例是否按期工作。
  • 通知Sentinel可以通API通知系管理或其他算机程序,其中一个受监视Redis实例出了问题
  • 故障。如果主服器未按期工作,Sentinel可以启故障程,在该过程中,将副本升级为主服器,将其他附加副本重新配置使用新的主服器,并通知使用Redis器的用程序要使用的新地址。
  • 配置提供程序Sentinel充当客端服务发现的授来源:客接到Sentinels,以询问负责给定服的当前Redis主服器的地址。如果生故障移,Sentinels告新地址。

7sentinel也是一个简单的redis服务器,只是他只能使用redis的一部分功能。

        在哨兵模式中,每个sentinel实例都会建立通向其他sentinel的链接,并且每个sentinel都会建立与其所监控的redis服务器的命令链接与订阅链接,用来向服务器发送命令以及接收消息。

        master在定时间内,连续向sentinel返回无效回复,此sentinel就会认为该master已经下线,并且会询问其他sentinelmaster的状态。如果从其他sentinel接收到足够多(

        sentinel monitor master 127.0.0.1 6379 2,如果有包括本身在内的两台sentinel认为master下线,则将master判断为下线)的已下线的信息之后,就需要进行故障转移了(重新选举master)

        一旦某台sentinel认为master已下线,就会向其他sentinel发送命令,要求其他sentinel将自己设置为老大。(在一个轮回里,只能将一个人设置为老大)如果sentinel没有设置老大,则会将            命令传来的sentinel设置为老大。一旦sentinel被超过半数的sentinel所认可,则有此sentinel负责筛选出新的master。否则,下一个循环继续选举。

 

        选举出sentinel之后,sentinel通过服务器的优先级、复制偏移量、服务器id等,挑选出保存最新数据,并且心跳健壮的服务器发送SLAVEOF no one执行此命令,该服务器会变为master         命令,并且每秒向其发送INFO命令(此命令可以获取服务器的状态配置等信息)。通过观察此服务器的role从原来的slave变为master时,其已经完成主服务器的升级。然后对其他服务器发           SLAVEOF命令,使其变为新masterslaver。如果原来的master重新上线,同样执行SLAVEOF命令。

 

        INFO命令返回参数示例

Redis高可用_第2张图片

 

你可能感兴趣的:(Redis面试准备)