Redis Sentinel(Redis哨兵)

         这篇笔记是继前面redis主从配置写的,主从配置我就按照前面已经配好的主从进行哨兵配置。

         1、为什么要进行哨兵配置?

         在前面实践了redis的主从配置,我们可以看到配置好的master-slave,master与slave之间可以很好的同步数据,但数据只能从master同步到slave上。在我们读写分离的时候,一旦master宕机了,整个数据集群将无法正常进行读写操作,后果很严重,我们就需要一个解决方案来解决这个问题,这时候我们就可以采用哨兵模式来解决这个问题。主从+哨兵模式,既热部署进行主从切换,当master宕机,哨兵自动将其他slave中的一个提升为主数据库,即使之前的主数据库恢复正常工作,哨兵也会将其改为从数据库,做到了高可用、热部署。

         

         2、哨兵机制

            Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

            监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常,以选举投票的方式判断master是否正常工作。
            提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

           自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

 

        3、哨兵主要配置项

             sentinel monitor <master-name> <ip> <port> <quorum>

             这个配置表达的是 哨兵节点定期监控 名字叫做 <master-name>  并且 IP 为 <ip> 端口号为 <port> 的主节点。<quorum> 表示的是哨兵判断主节点是否发生故障的票数。也就是说如果我们将<quorum>设置为2就代表至少要有两个哨兵认为主节点故障了,才算这个主节点是客观下线的了,一般是设置为sentinel节点数的一半加一。

 

            sentinel down-after-milliseconds <master-name> <times>

            每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的,如果超过了配置的<times>时间没有收到pong回复,就主观判断节点是不可达的,<times>的单位为毫秒。

 

           sentinel parallel-syncs <master-name> <nums>

            当哨兵节点都认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点发起复制,这个配置就是控制在故障转移之后,每次可以向新的主节点发起复制的节点的个数,最多为<nums>个,因为如果不加控制会对主节点的网络和磁盘IO资源很大的开销。

 

           sentinel failover-timeout <master-name>  <times>

           这个代表哨兵进行故障转移时如果超过了配置的<times>时间就表示故障转移超时失败。

 

          sentinel auth-pass <master-name> <password>

           如果主节点设置了密码,则需要这个配置,否则哨兵无法对主节点进行监控。

   

      4、哨兵配置

          复制sentinel.conf与master-slave的配置文件到同一目录

          配置端口(我配置的26379)

                

           配置Dir (配置sentinel运行时缓存文件存放目录,我这里使用的默认目录)

               

          配置sentinel moniter 后面的参数mymaster可以自定义,127.0.0.1 6379是master的ip地址和端口号,1是在slave投票master已经出现故障的投票数,达到这个投票数就会进行故障转移

          配置sentinel auth-pass 设置与master通信的密码,因为master设置的密码是123456,这里也必须设置为123456

                

         单机版简单的哨兵配置,这样就可以用了,接下来可以进行测试了。

 

 

         5、哨兵配置测试

         我们先检查master,slave目前是否是正常的对应关系

               

         正如我们期盼的那样,端口6379是master,其他两个是slave。我们现在先把redis里面的数据清空。

        接下来我们把master关闭,模拟宕机。

                    

                  

           这时候master   6379主机被停掉了。

          我们再看配置信息(info replication中info可以获取配置文件中的段的信息,要获取配置信息中的某项的信息可以使用: config get 配置项名称

                

          我们可以看到,sentinel自动给我们将以前的slave提升为了master。这时候6380是master。我们测试一下现在master是否同步数据。

                

         往6380 master里面插入数据

           

         往master 6380里面插入数据,自动同步到了slave 6381里面来了。故障自动转移了。

        重启6379再次查看info信息

        

       我们可以看到以前的master自动变成了slave,master还是新的master。

       如果我们打开conf配置文件会发现原master中添加了slaveof 127.0.0.1 6380。slave 6380从配置中的slaveof配置项被删掉了。

到此,我们简单的哨兵配置到测试完成了,redis主从故障自动转移实现了,又涨了一些知识,高兴~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

     总结:1、sentinel是用来监控redis的master-slave的

               2、如果master出现故障,可以自动转移故障,恢复原来的master之后原来的master变成了slave可以将数据从新的master同步到原来的master中去

              3、主从中slaveof,哨兵中sentinel monitor 等几个配置比较关键

posted on 2020-03-10 16:58  JPGer  阅读(189)  评论(0)    收藏  举报

导航