如何使用哨兵知道您已下线?

问题描述

我有一个 redis sentinel 集群,配置了 5 个节点,IP 如下:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

我希望找到一种简单的方法来确定是否有任何服务器从其自身的角度脱机。

在服务器 192.168.1.1 上,我通过以下方式跟踪哨兵日志文件tail -f /var/log/redis/sentinel-6379.log

我从 192.168.1.1 服务器拔下网线,我在服务器 192.168.1.1 上的日志文件中看到以下消息:

1567:X 21 Apr 2021 15:56:31.189 # +sdown master mymaster 192.168.1.2 6379

1567:X 21 Apr 2021 15:57:09.273 # +sdown slave 192.168.1.3:6379 192.168.1.3 6379 @ mymaster 192.168.1.2 6379
1567:X 21 Apr 2021 15:57:09.273 # +sdown slave 192.168.1.4:6379 192.168.1.4 6379 @ mymaster 192.168.1.2 6379
1567:X 21 Apr 2021 15:57:09.273 # +sdown slave 192.168.1.5:6379 192.168.1.5 6379 @ mymaster 192.168.1.2 6379

1567:X 21 Apr 2021 15:57:09.214 # +sdown sentinel 88c16ee0855100cf25919c9113e97e83290965b0 192.168.1.2 26379 @ mymaster 192.168.1.2 6379
1567:X 21 Apr 2021 15:57:09.273 # +sdown sentinel 97d7e4885a56a90144bd312f395e1d96788f1ebe 192.168.1.3 26379 @ mymaster 192.168.1.2 6379
1567:X 21 Apr 2021 15:57:09.273 # +sdown sentinel f61240ca198c318e156a7d87f382728316b22a8e 192.168.1.4 26379 @ mymaster 192.168.1.2 6379
1567:X 21 Apr 2021 15:57:09.273 # +sdown sentinel f8c43aa0ffe4141ee5b09c1c78d253ae04e0d8bb 192.168.1.5 26379 @ mymaster 192.168.1.2 6379

我也在我的 python 项目中使用 redis-py https://pypi.org/project/redis/ 订阅上述 +sdown 消息,如下所示:

    r = redis.Redis(host='localhost',port=26379,username='myusername',password='mypassword')
    p = r.pubsub()
    p.psubscribe('+sdown')
    p.psubscribe('-sdown')
    p.psubscribe('+switch-master')
    p.subscribe('+sentinel')

    while True:
        message = p.get_message()
        if message:
            print(message) 

我的问题是如何使用这些消息来确定我的服务器已经离线,就像拔掉网线一样?

例如,我是否只是确定我所有的+sdowns 都是在同一时间收到的? 还有其他更好的方法吗?

解决方法

我理解你的问题,因为你只想和哨兵说话,而不是本地的主人或副本。

我想你可以按照你的建议去做。 但是,我认为在每次收到 SENTINEL MASTERS 事件时简单地执行 +sdown 命令并检查其结果会容易得多。