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

Redis群集故障转移:从服务器不会成为主服务器

郎曾笑
2023-03-14

我试图在集群故障切换期间测试我的软件行为,因此我想配置一个最简单的集群:一个主集群和两个从集群。我有以下内容的树文件7000.conf-7002.conf:

port 7000
cluster-config-file nodes.7000.conf
appendfilename appendonly.7000.aof
dbfilename dump.7000.rdb
pidfile /var/run/redis_7000.pid

include cluster.conf

cluster.conf的内容:

cluster-enabled yes
appendonly yes
maxclients 100
daemonize yes
cluster-node-timeout 2000
cluster-slave-validity-factor 0

然后我配置了7000运行从0到16383的所有插槽,7001和7002是7000的副本:

XXX 127.0.0.1:7002 slave YYY 0 1511389011347 4 connected
YYY 127.0.0.1:7000 myself,master - 0 0 4 connected 0-16383
ZZZ 127.0.0.1:7001 slave YYY 0 1511389011246 4 connected

然后我尝试通过关闭命令或杀死进程来摆脱7000。其中一个奴隶应该提升自己为主人,但没有人这样做:

ZZZ 127.0.0.1:7001 slave YYY 0 0 3 connected
YYY 127.0.0.1:7000 master,fail? - 1511389104442 1511389103933 4 disconnected 0-16383
XXX 127.0.0.1:7002 myself,slave YYY  0 1511389116543 4 connected

我已经等了几分钟了,我的奴隶们不想成为主人。如果我通过集群故障转移接管强制从服务器成为主服务器,它非常乐意这样做(如果我重新启动主服务器,它将成为从服务器),但不是自动的。

我尝试使用群集节点超时-没有帮助。

我做错什么了吗?Redis版本是3.2.11。

共有2个答案

舒俊雄
2023-03-14

请注意,即使有3个主机,如果集群中发生以下故障,也不能保证自动故障切换:(M-Master/S-Slave)

节点-1: M1 S3

节点2:M2和S1

节点-3: M3 S2

现在如果节点3出现故障,则节点1中的从S3会自动升级为主S3,节点3恢复后状态如下:

节点1:M1-M3

节点2:M2和S1

节点3:s3s2

现在,您可能认为集群将继续轻松处理故障,因为此设置中有3个主机。但是,如果Node-1失败,集群将由于仲裁不满足而关闭,并且永远不会启动,除非我们进行一些手动调整。

希望这有帮助。

齐永昌
2023-03-14

问题在于redis群集的最小大小为3个主机,以实现自动故障切换。主节点相互监视并检测故障转移,因此,如果集群中只有一个主节点,则没有进程能够检测到一个主节点出现故障。至少三个节点是为了确保在任何一个节点宕机的情况下,整个集群的大多数节点都需要同意,因此至少需要三个节点,在出现故障的情况下,仍然有超过一半的节点在周围,以达到大多数视图。

Redis集群教程在以下部分提到了这一点:https://redis.io/topics/cluster-tutorial#creating-and-using-a-redis-cluster

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

  • 我有一个由4台服务器组成的Redis V4.0.7集群。这4台服务器都在运行我Windows PC上的Ubuntu V17.1064位虚拟机(在VirtualBox中)。我已经转移了所有的从属1服务器,并将在下面对我的“问题”的解释中使用M1作为主1以及S1作为从属1。 null

  • 我有3个复制的Redis实例运行在3台不同的机器上:A、B和C。我最初选择A作为我的主机。我还有3个哨兵(每台机器上有1个)监视A。

  • 在src目录下,我运行下面的命令 但得到以下错误。 创建集群[ERR]抱歉,无法连接到节点127.0.0.1:7000 但是,如果我使用命令“redis server redis.conf”在7000处启动节点,其中redis.conf在下面 端口7000群集已启用是群集配置文件nodes.conf群集节点超时10群集从属有效性系数0 appendonly是 同样,我成功地在所有端口启动了redi

  • 我试图设置一个简单的,并将其配置为将主服务器故障转移到从服务器。 我设置了4个VM(使用),每个VM上都安装了redis。我有一个主机器和两个奴隶。最后一台机器是哨兵。 主服务器和从服务器都有默认配置,只是我将绑定地址更改为,而从服务器有行。 在哨兵中,我遵循了基本教程,并放入了以下设置: 我做错了什么?

  • 问题内容: 我的一台Redis服务器今天反复停机,没有任何明显的可诊断原因。我所有的用户最终都会遇到错误。 查看处的日志,最后几行捕获的内容比计划的备份更为有害: pid文件仍然存在。这意味着服务器没有被正式关闭,redis仍被守护? 我登录到系统,并做了两次以使其启动并运行。除了这些日志,我还能如何诊断可能出了什么问题? 更新:我注意到在第一次崩溃时,磁盘交换开始发生。这从未发生过。此外,确认将