Redis学习(五) -- 主从切换

关于Redis的其他内容学习,请依次参考一下几篇文章:

            Redis学习(一) -- Redis的简介以及安装启动

           Redis学习(二) -- Redis的五种数据类型以及相关操作命令

           Redis学习(三) -- Redis的持久化方案

           Redis学习(四) -- Redis的主从复制

下午的时候,撸了一下Redis的主从复制,吃完晚饭就接着开始撸Redis的主从切换,根本停不下来,哈哈哈。

1、直入主题,什么是Redis的主从切换?

        从上一篇主从复制我们了解到,主从复制可以说是数据库数据的一个备份,当主机服务器挂掉了,硬盘也损坏了,主机上的数据肯定是损坏了,但是我们还有从机上的数据是完整的。但是这样也不方便,最好的是当主机挂掉之后,可以自动重新分配一个新的主机允许进行写操作。这就是所谓的Redis的主从切换机制。

        说起主从切换,那要先学习一个名词:sentinel,翻译过来是  哨兵 ,通过字面意思就能知道是站岗放哨监控的。

       Redis提供了一个哨兵服务,用来实现主从切换。

       1.1、sentinel在哪儿?

 找到编译出来后的Redis的源码,这个sentinel.conf 就是哨兵模式的配置文件。

     

 sentinel的任务:

  •  监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  •  提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  •  自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

1.2、在redis的可执行文件中,有个redis-sentinel,就是通过它来启动哨兵模式。

      

1.3、下面开始主从切换机制的配置。

   第一步:将源码中的sentinel.conf文件拷贝到bin目录下

    

第二步:进行sentinel.conf文件的配置

   先说说几个常见的配置项: 
            port xxxooo //端口 
            sentinel monitor master 127.0.0.1 6379 2  :sentinel monitor 别名+iP地址+端口,这个别名要和其他地方统一(以下用到的都是别名master),最后一个2表示至少2个sentinel实例同时检测到redis server异常,才判断为宕机 。

       
            sentinel down-after-milliseconds master 30000 :  指定某个sentinel实例监控到某个redis实例持续异常多少时间(毫秒),才判断状态为down。

     
            sentinel failover-timeout master 180000 :表示  若sentinel在该配置的时间内未能完成failover操作(故障时master/slave自动切换),则认为本次failover失败。  

         
            sentinel parallel-syncs master num:指定failover过程中,同时被sentinel reconfigure(重新配置)的最大slave实例数(num),由于reconfigure过程中,对应的slave会中断响应客户端请求,故为了避免所有slave同时不可用,该值需适当配小。(如下图配置文件中默认为1)

         
            sentinel notification-script :指定sentinel检测到master-name指向的实例异常时,调用的报警脚本。该配置项目可选,但生产环境建议配置。

           

 下面我们来对sentinel.conf文件进行相关配置,这次我们只配置三项即可:

dir /tmp
修改工作目录为:
dir /usr/local/redis/tmp #自己创建一个目录tmp

sentinel monitor mymaster 127.0.0.1 6379 2
修改为:
sentinel monitor mymaster 127.0.0.1 6379 1 #由于是练习,所以只开启一个哨兵

sentinel down-after-milliseconds mymaster 30000
修改为:
sentinel down-after-milliseconds mymaster 10000 #将30秒修改为10秒

第三步:同时启动主从两个服务。

   

第四步:启动sentinel,命令:在主机bin目录下执行:./redis-sentinel sentinel.conf

   

   可以看到sentinel服务已经起成功

    

 第五步:我们进行测试。

主机:6379,     从机:6380

     在主机上进行数据库的写操作

      

    然后在从机上进行读操作,读取主机上刚才写操作的数据。

    

    然后再从机上尝试进行写操作。发现是不能成功的。

   

    现在我们将主机服务关闭,模拟主机宕机。

     

 这个时候我们可以看到sentinel服务,会提示我们把6380切换到了主服务:

    这里写图片描述

这时我们在在6380服务上进行写操作,会发现并没有报错,说明这是主从切换机制已经将原来的从机6380转变成主机了。

   

当我们重新把6379的redis服务起起来时,发现在6379上不能进行写操作,说明主从机制已经将原来的主机6379转变成从机了。

   

好了,主从切换这就算是完成了。希望能帮助到一些同行。

 睡觉睡觉,困

猜你喜欢

转载自blog.csdn.net/pavel101/article/details/81489766
今日推荐