关于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转变成从机了。
好了,主从切换这就算是完成了。希望能帮助到一些同行。
睡觉睡觉,困