【问题标题】:How to configure redis sentinels to bring back a recovered node as a master?如何配置 redis sentinels 将恢复的节点作为主节点带回?
【发布时间】:2018-05-16 08:52:00
【问题描述】:

设置

我有一个故障转移 redis 设置,它由三个哨兵和两个 redis 服务器组成,它们都在不同的盒子上。

设置如下:

-------------------
| Sentinel1 - AMS |\
------------------- \  ---------------------------
         |           -/| Redis Server1 (M) - FRA |
-------------------  / ---------------------------
| Sentinel2 - FRA |--
-------------------  \ ---------------------------
         |           -\| Redis Server2 (S) - AMS |
------------------- /  ---------------------------
| Sentinel3 - LON |/
-------------------

所有哨兵和服务器都可以通过 VPN 看到对方。

哨兵的配置是:

# Ansible managed

daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"

# Note the ip changes for each sentinel  - 12,13,14

bind 192.168.1.14
port 26379
dir "/var/lib/redis"

sentinel monitor q-redis-01 192.168.1.10 6379 2
sentinel down-after-milliseconds q-redis-01 10000
sentinel auth-pass q-redis-01 XXX

Redis 服务器的 excerpt 配置是:

# Ansible managed

daemonize yes
pidfile "/var/run/redis/redis-server.pid"
port 6379
tcp-backlog 511

# Note the ip changes for each server  - 10, 11
bind 192.168.1.10

timeout 0
tcp-keepalive 0
loglevel notice
logfile "/var/log/redis/redis-server.log"
databases 10

save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis"

masterauth "XXX"

slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no

# Note Server 1 has priority 10 and Server 2 has 20
slave-priority 10

requirepass "XXX"

...

作为 Server2 中的配置,我也有这一行:

slaveof 192.168.1.10 6379

问题

设置有效,当 服务器 1 无法访问时,服务器 2 被提升为主服务器。

我想要实现的是,当Server 1恢复时,我想自动再次成为主人。

我需要这样做,因为 FRA 的数据中心更靠近基础设施的其余部分,并且整个设置用于故障转移,而不是用于可扩展性。

问题

是否可以配置redis哨兵自动将恢复的主节点提升为组中的主节点?

【问题讨论】:

    标签: redis redis-sentinel


    【解决方案1】:

    我也想知道这个问题,但我不认为哨兵会自动掌握它。

    但我们可以通过强制故障转移来实现该目标:

    1. R1(您的图表中的 Redis Server1)死亡,R2(Redis Server2)被提升为 master。
    2. R1 恢复后返回,哨兵将其设置为 R2 的从属设备。
    3. 执行SENTINEL failover <master name>命令让R1再次成为master。

    【讨论】:

      【解决方案2】:

      我认为你的做法是错误的。

      首先,我会高度考虑使用三台服务器(1 台主机,2 台从机)与您当前的配置相比。请记住,您可以在同一台服务器上运行哨兵和缓存。因此,您仍然只需要 3 台,而不是需要 6 台服务器。请查看文档:Example 2: basic setup with three boxes

      其次,我会在 每个 数据中心中复制这个 3 台服务器配置,每个数据中心管理自己的复制。这是出于多种原因:1)更新之间的延迟。我们知道 REDIS 被认为是最终一致的,但您不需要这么多延迟。 2)您不希望数据中心之间有这么多的传出带宽。 3) GDPR 和欧盟等合规性。

      相反,您的应用是否驻留在 LON REDIS 实例中的 LON 拉取缓存中。同样,让您的 FRA 应用实例从 FRA 中的 REDIS 实例中拉取。

      如果您必须拥有您设计的设置,我强烈建议您建立一个完整的 REDIS 集群,而不是仅使用 Sentinel。或者,更好的是,只需使用完全为您管理的 Microsoft Azure 版本的 REDIS(而且非常便宜)。

      希望这会有所帮助。

      【讨论】:

      • 感谢您的文字,但这并没有回应答案。不管他的基础设施是什么样的,他都需要在可达时提升原始主人。
      猜你喜欢
      • 2016-02-12
      • 2016-01-21
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多