首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置redis哨兵以使恢复的节点恢复为主节点?

如何配置redis哨兵以使恢复的节点恢复为主节点?
EN

Stack Overflow用户
提问于 2018-05-16 08:52:00
回答 2查看 1.4K关注 0票数 2

设置

我有一个故障转移redis设置,它由三个哨兵和两个redis服务器组成,这些服务器都位于不同的框中。

该设置看起来如下:

代码语言:javascript
复制
-------------------
| Sentinel1 - AMS |\
------------------- \  ---------------------------
         |           -/| Redis Server1 (M) - FRA |
-------------------  / ---------------------------
| Sentinel2 - FRA |--
-------------------  \ ---------------------------
         |           -\| Redis Server2 (S) - AMS |
------------------- /  ---------------------------
| Sentinel3 - LON |/
-------------------

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

哨兵的配置如下:

代码语言:javascript
复制
# 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服务器的节选配置是:

代码语言:javascript
复制
# 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中的配置,我还有以下一行:

代码语言:javascript
复制
slaveof 192.168.1.10 6379

问题所在

设置正常,当无法到达服务器1时,Server 2将提升为主服务器。

不过,我想要实现的是,当服务器1恢复时,我想再次自动成为主服务器。

我需要这样做,因为FRA的数据中心更接近其他基础设施,整个设置用于故障转移,而不是用于可伸缩性。

问题是

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-06 13:34:06

我觉得你走错路了。

首先,我会高度考虑有三个服务器(一个主服务器,两个从服务器)相对于您当前的配置。请记住,您可以在相同的服务器上运行哨兵和缓存。因此,不需要6台服务器,仍然只需要3台。看看docs:示例2:三个框的基本设置

其次,我会在每个数据中心中复制这个3服务器配置,每个数据中心管理自己的复制。这有以下几个原因: 1)更新之间的延迟。我们知道REDIS最终被认为是一致的,但是您不需要这么多的延迟。2)您不希望在数据中心之间产生如此大的输出带宽。3)遵守情况,如GDPR和欧盟。

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

如果你必须有你设计的设置,我强烈建议你站起来一个完整的红色集群,而不是仅仅使用哨兵。或者,更好的是,只需使用Microsoft的REDIS版本,您就可以完全管理它(而且非常便宜)。

希望这能有所帮助。

票数 -1
EN

Stack Overflow用户

发布于 2019-05-12 04:08:21

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

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

  1. R1(图中的Redis Server1 )死了,R2(Redis Server2)提升为master。
  2. R1在恢复后返回,哨兵将其设置为R2的奴隶。
  3. 执行SENTINEL failover <master name>命令,使R1再次成为主。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50366360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档