【问题标题】:redis sentinel client-reconfig-script not triggeredredis sentinel client-reconfig-script 未触发
【发布时间】:2020-03-23 15:17:37
【问题描述】:

我已经设置了一个 redis 主从集群,并在 linux debian 上为 HA 设置了哨兵监控(使用拉伸反向端口:redis v4.0.2)。

Sentinel 运行良好,当我关闭三个节点之一时,另一个节点被选为新的主节点。

现在我尝试设置一个重新配置脚本来通知客户新的主人。

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

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

使用sentinel master mymaster 命令查看哨兵配置,我可以确认 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)并且它工作(我的意思是它正在触发我的重新配置脚本),但我没有保留配置,所以我可能错过了一些东西。或者...会不会是 v4.0.2 中引入的错误?!

【问题讨论】:

    标签: redis redis-sentinel


    【解决方案1】:

    我终于解决了我的问题。

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

    1. 哨兵日志记录(即使在调试模式下)对重新配置脚本的执行不是很清楚
    2. reconfig 脚本似乎在 chroot-like 环境中运行,这使我的测试变得无关紧要!

    这是触发客户端重新配置脚本时的哨兵日志(“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 文件!

    但是,我仍然不知道它在内部是如何工作的……

    【讨论】:

    • 嗨 Nicolas,你最终成功了吗?我似乎遇到了类似的问题,我可以通过哨兵不能自己运行脚本。你做了什么来解决这个问题?
    【解决方案2】:

    如果以 root 用户运行 redis,将触发 client-reconfig-script .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2023-03-03
      • 2015-07-16
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多