redis sentinel client-reconfig-script未触发

时间:2017-10-16 21:52:59

标签: redis redis-sentinel

我已经设置了一个redis master-slave(s)集群,在linux debian上使用endinel监控HA(使用stretch backports:redis v4.0.2)。

Sentinel工作正常,当我关闭三个节点中的一个节点时,另一个节点被选为新主节点。

现在我尝试设置重新配置脚本以通知客户端新主服务器。

我在/var/redis/test.sh中创建了一个可读且可执行的(chmod a + rx)脚本,然后我在/etc/redis/sentinel.conf中的3个sentinel节点中添加了这样一行:

sentinel client-reconfig-script mymaster /var/redis/test.sh

使用sentinel master mymaster命令查看sentinel配置,我可以确认client-reconfig-script配置得很好:

10.2.0.6:26379> sentinel master mymaster
...
43) "client-reconfig-script"
44) "/var/redis/test.sh"

但是,发生故障转移时,不会触发我的重新配置脚本。我想知道为什么。这是哨兵日志:

29765:X 16 Oct 23:03:11.724 # Executing user requested FAILOVER of 'mymaster'
29765:X 16 Oct 23:03:11.724 # +new-epoch 480
29765:X 16 Oct 23:03:11.724 # +try-failover master mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:11.777 # +vote-for-leader 5a0661a5982701465a387b4872cfa4c576edbd38 480
29765:X 16 Oct 23:03:11.777 # +elected-leader master mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:11.777 # +failover-state-select-slave master mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:11.854 # +selected-slave slave 10.2.0.8:6379 10.2.0.8 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:11.854 * +failover-state-send-slaveof-noone slave 10.2.0.8:6379 10.2.0.8 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:11.910 * +failover-state-wait-promotion slave 10.2.0.8:6379 10.2.0.8 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:12.838 # +promoted-slave slave 10.2.0.8:6379 10.2.0.8 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:12.838 # +failover-state-reconf-slaves master mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:12.893 * +slave-reconf-sent slave 10.2.0.6:6379 10.2.0.6 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:13.865 * +slave-reconf-inprog slave 10.2.0.6:6379 10.2.0.6 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:13.865 * +slave-reconf-done slave 10.2.0.6:6379 10.2.0.6 6379 @ mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:13.937 # +failover-end master mymaster 10.2.0.7 6379
29765:X 16 Oct 23:03:13.937 # +switch-master mymaster 10.2.0.7 6379 10.2.0.8 6379
29765:X 16 Oct 23:03:13.937 * +slave slave 10.2.0.6:6379 10.2.0.6 6379 @ mymaster 10.2.0.8 6379
29765:X 16 Oct 23:03:13.937 * +slave slave 10.2.0.7:6379 10.2.0.7 6379 @ mymaster 10.2.0.8 6379

我可能缺少配置选项吗?

其他信息:几周前我安装了类似的架构(redis 4.0.1)并且它工作了(我的意思是它正在解雇我的reconfig脚本),但是我没有保留配置,所以我可能错过了什么。或者......它可能是v4.0.2中引入的错误吗?!

2 个答案:

答案 0 :(得分:0)

我终于解决了我的问题。

" reconfig.sh"脚本是由故障转移触发的,但我没有意识到这是因为:

  1. sentinel logging(即使在调试模式下)对重新配置脚本执行不是很清楚
  2. reconfig脚本似乎是在类似chroot的环境中运行的,这使得我的测试不相关!
  3. 这是触发客户端重新配置脚本时的标记日志(" script-child"行):

    32711:X 18 Oct 16:06:42.615 # +failover-state-reconf-slaves master mymaster 10.2.0.6 6379
    32711:X 18 Oct 16:06:42.671 * +slave-reconf-sent slave 10.2.0.8:6379 10.2.0.8 6379 @ mymaster 10.2.0.6 6379
    32711:X 18 Oct 16:06:42.671 . +script-child 397
    32711:X 18 Oct 16:06:42.813 . -script-child 397 0 0
    

    然后我的reconfig.sh看起来像这样:

    #!/bin/bash
    touch /tmp/reconfig
    exit 0
    

    =>在Sentinel调用此脚本时,不要期望找到/ tmp / reconfig文件!

    但是,我仍然不确切知道它在内部是如何运作的......

答案 1 :(得分:0)

如果以root用户身份运行redis,则会触发client-reconfig-script脚本 。