我已经在linux debian上设置了一个带有sentinel监视的redis主从集群(使用扩展后端口:Redis版本4.0.2)。
Sentinel运行良好,因为当我关闭三个节点中的一个时,另一个节点被选为新的主节点。
现在我尝试设置一个重新配置脚本来通知客户端新的主服务器。
我在/var/redis/ www.example.com中创建了一个可读且可执行的(chmod a+rx)脚本test.sh,然后在/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引入的bug?!
3条答案
按热度按时间gj3fmq9x1#
对我来说,“类chroot环境”是默认
apt install redis-sentinel
附带的systemd设置。更改
/etc/systemd/system/sentinel.service
中的选项将使向/tmp写入测试文件按预期工作。
从命令行发送电子邮件涉及到关闭大多数其他选项(或将其切换为以root身份运行...)
58wvjzkj2#
我终于解决了我的问题。
故障切换触发了“reconfig.sh“脚本,但我没有意识到这是因为:
1.一个重新配置脚本似乎运行在一个chroot类环境,使我的测试无关!
以下是触发客户端重新配置脚本时的sentinel日志(“script-child”行):
然后我的reconfig.sh看起来像这样:
=〉当Sentinel调用此脚本时,不要期望找到/tmp/reconfig文件!
但是,我仍然不知道它内部到底是如何工作的...
ioekq8ef3#
如果以用户'root'身份运行redis,将会触发client-reconfig-script。