当前位置: 首页 > 知识库问答 >
问题:

kubernetes中的redis-ha无法故障转移回master

邢洋
2023-03-14

我试图创建一个简单的redis高可用性设置与1主,1从和2哨兵。

当从redis-master故障转移到redis-slave时,该设置工作正常。当redis-slave恢复时,它将自己正确地注册为新的redis-slave主服务器的从服务器。

但是,当redis-slave作为主服务器关闭时,redis-master 不能作为主服务器返回。redis-master的日志进入循环,显示:

1:S 12 Dec 11:12:35.073 * MASTER <-> SLAVE sync started
1:S 12 Dec 11:12:35.073 * Non blocking connect for SYNC fired the event.
1:S 12 Dec 11:12:35.074 * Master replied to PING, replication can continue...
1:S 12 Dec 11:12:35.075 * Trying a partial resynchronization (request 684581a36d134a6d50f1cea32820004a5ccf3b2d:285273).
1:S 12 Dec 11:12:35.076 * Master is currently unable to PSYNC but should be in the future: -NOMASTERLINK Can't SYNC while not connected with my master
1:S 12 Dec 11:12:36.081 * Connecting to MASTER 10.102.1.92:6379
1:S 12 Dec 11:12:36.081 * MASTER <-> SLAVE sync started
1:S 12 Dec 11:12:36.082 * Non blocking connect for SYNC fired the event.
1:S 12 Dec 11:12:36.082 * Master replied to PING, replication can continue...
1:S 12 Dec 11:12:36.083 * Trying a partial resynchronization (request 684581a36d134a6d50f1cea32820004a5ccf3b2d:285273).
1:S 12 Dec 11:12:36.084 * Master is currently unable to PSYNC but should be in the future: -NOMASTERLINK Can't SYNC while not connected with my master
1:S 12 Dec 11:12:37.087 * Connecting to MASTER 10.102.1.92:6379
1:S 12 Dec 11:12:37.088 * MASTER <-> SLAVE sync started
...

每个复制文档都声明:

自Redis4.0以来,当一个实例在故障转移后被提升为master时,它仍然能够与旧master的从机执行部分重新同步。

但日志似乎显示了另一种情况。更详细的日志版本显示了第一个redis-masterredis-slave故障转移和随后的redis-slaveredis-master日志。

你知道怎么回事吗?如何才能允许redis-master返回master角色?配置详细信息如下:

NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
redis-master     ClusterIP   10.102.1.92     <none>        6379/TCP    11m
redis-slave      ClusterIP   10.107.0.73     <none>        6379/TCP    11m
redis-sentinel   ClusterIP   10.110.128.95   <none>        26379/TCP   11m
requirepass test1234
masterauth test1234
dir /data

tcp-keepalive 60
maxmemory-policy noeviction
appendonly no
bind 0.0.0.0
save 900 1
save 300 10
save 60 10000

slave-announce-ip redis-master.fp8-cache
slave-announce-port 6379
requirepass test1234
slaveof redis-master.fp8-cache 6379
masterauth test1234
dir /data

tcp-keepalive 60
maxmemory-policy noeviction
appendonly no
bind 0.0.0.0
save 900 1
save 300 10
save 60 10000

slave-announce-ip redis-slave.fp8-cache
slave-announce-port 6379

共有1个答案

巩俊远
2023-03-14

原来这个问题与使用主机名而不是IP有关:

slaveof redis-master.fp8-cache 6379
...
slave-announce-ip redis-slave.fp8-cache

因此,当master作为slave返回时,sentinel显示现在有2个slave:一个带有ip地址,另一个带有主机名。不确定这两个从条目(指向同一个Redis服务器)是如何导致上面的问题的。现在,我更改了配置,使用IP地址而不是主机名,Redis HA的工作状态完美无缺。

 类似资料:
  • 我们正在尝试将Redis/Sentinel集群从2.8升级到3.2。升级将在交通繁忙的情况下发生。对我们来说,没有停机时间是可以接受的。 当我们准备升级主服务器时,所有从服务器都将运行在3.2上,并且这些从服务器能够与运行在2.8上的主服务器同步 一旦我们停止主服务器(2.8)或手动请求故障转移,新服务器(3.2)将成为主服务器。 我们希望将旧的master(2.8)保留一段时间,以便在发现新设置

  • 我安装了墨盒,并将其缩放到3个档位。每个的设置为2。在我将从: 致: 现在,在重新启动墨盒后,它看起来一切正常,直到我杀死主人。奴隶们只是坐在那里数着他们上次看到的几秒钟...他们(其中一个)的日志上写着:

  • 我正在尝试用6台机器实现一个Redis集群。我有一个由六台机器组成的流浪集群: 运行redis服务器 我编辑了上述所有服务器的/etc/redis/redis.conf文件,添加了这个 然后我在六台机器中的一台上运行了这个程序; Redis集群已启动并运行。我通过在一台机器上设置值手动检查它显示在其他机器上。 我的问题是,当我关闭或停止任何一台主机上的redis server时,整个集群都会停止运

  • 我有3个redis Sentinel的盒子设置: 在我的主人死后,哨兵进行了故障转移到R2。我将M1重新联机(清除了一些磁盘空间),现在M1还活着,但是是R2的奴隶。是否有一种自动的(或半自动的)方法,使M1再次成为主,R2再次成为M1和我的流量的从属,使用M1作为主redis实例?

  • 我试图在docker群中创建一个Redis集群。我正在使用bitnami-redis-docker图像创建容器。在阅读bitnami文档时,他们总是建议使用1个主节点,而不是阅读Redis文档,后者规定至少应该有3个主节点,这就是为什么我不知道哪个是正确的。假定所有bitnami slave默认为只读,如果我在一个swarm leader节点中只设置一个master,并且如果失败,我相信senti

  • 问题内容: 在简单情况下,如果3台服务器具有1个主服务器和2个从属服务器而没有分片。是否有使用Java和Jedis的经过验证的解决方案,该解决方案没有单点故障,并且将自动处理单个服务器(无论是主服务器还是从服务器)(自动故障转移)。例如,提升主机并在故障后重置,而不会丢失任何数据。 在我看来,这似乎应该是一个已解决的问题,但是我找不到关于它的任何代码,而仅是对实现此方法的高级描述。 谁实际覆盖并在