我有一个故障转移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服务器的摘录配置为:
# 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 会升级为主控。
我想要实现的是当服务器1 恢复时,我想再次成为主服务器。
我需要这样做,因为FRA的数据中心更接近基础架构的其余部分,整个设置用于故障转移,而不是用于可扩展性。
是否可以配置redis标记以自动将恢复的主节点提升为组中的主节点?
答案 0 :(得分:1)
我认为您正在以错误的方式进行操作。
首先,我会高度考虑将三台服务器(1个主服务器,2个从属服务器)与当前配置进行比较。请记住,您可以在同一服务器上运行哨兵和缓存。因此,您只需要3台服务器,而不需要6台服务器。请看一下文档:Example 2: basic setup with three boxes。
第二,我将在每个服务器的每个数据中心中复制此3服务器配置,其中每个数据中心都管理自己的复制。这有很多原因:1)更新之间的延迟。我们知道REDIS最终被认为是一致的,但是您并不需要那么长的延迟。 2)您不希望数据中心之间有这么多的传出带宽。 3)符合GDPR和EU。
相反,您是否让应用驻留在LON REDIS实例的LON拉取缓存中。同样,让您的FRA应用程序实例从FRA中的REDIS实例中提取。
如果您必须具有设计的设置,我强烈建议您站起来一个完整的REDIS群集,而不是仅使用Sentinel。或者,更好的是,只需使用Microsoft Azure的REDIS版本,即可完全为您管理(并且价格非常便宜)。
希望这会有所帮助。
答案 1 :(得分:0)
我也想知道这个问题,但是我不认为哨兵会自动使它成为主人。
但是我们可以通过强制故障转移来实现该目标:
SENTINEL failover <master name>
命令以重新成为R1主站。