当其中一台服务器关闭时,Consul 集群无法正常工作
Consul cluster does not work properly when one of server is down
我想集群的主要目的是容错。但是,当我启动以下consul集群时,情况并非如此,我不明白为什么。
version: "3.5"
services:
# docker network create --driver=bridge discovery-network
# SERVICE DISCOVERY
consul-server-0:
image: consul:1.6.0
container_name: consul-server-0
command: "agent -server -bootstrap-expect 2 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-0"
networks:
- discovery-network
consul-server-1:
image: consul:1.6.0
container_name: consul-server-1
command: "agent -server -retry-join consul-server-0 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-1"
networks:
- discovery-network
depends_on:
- consul-server-0
consul-client-1:
image: consul:1.6.0
container_name: consul-client-1
command: "agent -retry-join consul-server-0 -ui -client 0.0.0.0 -datacenter datacenter-1 -node consul-client-1"
ports:
- "8500:8500" # GUI
networks:
- discovery-network
depends_on:
- consul-server-0
networks:
discovery-network:
external:true
当我停止其中一台服务器时,集群不再工作。我无法再注册服务(通过 consul-client)。
在其余服务器的日志中,我可以看到消息 Failed to make RequestVote RPC
在客户端的日志中,我可以看到消息 No cluster leader
我的配置有什么问题?
consul 的问题是,在某些时候它希望达到法定人数,以便能够进行适当的领导选举。对于您的服务器,您使用 -bootstrap-expect 2
实质上告诉服务器在开始领导选举之前期望有两个节点。
如果您只有 2 个节点,并且其中一个出现故障(或损坏),您最终会遇到裂脑情况。剩下的节点没有足够的其他节点来决定谁应该成为集群内的领导者。
因此,它将不接受任何新注册。
我的期望是,如果您有一个包含 3 个节点的集群,其中一个节点出现故障,它应该能够继续 运行。通常对于集群设置,非偶数的节点是个好主意,通常 (clustersize/2) >= 2
我想集群的主要目的是容错。但是,当我启动以下consul集群时,情况并非如此,我不明白为什么。
version: "3.5"
services:
# docker network create --driver=bridge discovery-network
# SERVICE DISCOVERY
consul-server-0:
image: consul:1.6.0
container_name: consul-server-0
command: "agent -server -bootstrap-expect 2 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-0"
networks:
- discovery-network
consul-server-1:
image: consul:1.6.0
container_name: consul-server-1
command: "agent -server -retry-join consul-server-0 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-1"
networks:
- discovery-network
depends_on:
- consul-server-0
consul-client-1:
image: consul:1.6.0
container_name: consul-client-1
command: "agent -retry-join consul-server-0 -ui -client 0.0.0.0 -datacenter datacenter-1 -node consul-client-1"
ports:
- "8500:8500" # GUI
networks:
- discovery-network
depends_on:
- consul-server-0
networks:
discovery-network:
external:true
当我停止其中一台服务器时,集群不再工作。我无法再注册服务(通过 consul-client)。
在其余服务器的日志中,我可以看到消息 Failed to make RequestVote RPC
在客户端的日志中,我可以看到消息 No cluster leader
我的配置有什么问题?
consul 的问题是,在某些时候它希望达到法定人数,以便能够进行适当的领导选举。对于您的服务器,您使用 -bootstrap-expect 2
实质上告诉服务器在开始领导选举之前期望有两个节点。
如果您只有 2 个节点,并且其中一个出现故障(或损坏),您最终会遇到裂脑情况。剩下的节点没有足够的其他节点来决定谁应该成为集群内的领导者。 因此,它将不接受任何新注册。
我的期望是,如果您有一个包含 3 个节点的集群,其中一个节点出现故障,它应该能够继续 运行。通常对于集群设置,非偶数的节点是个好主意,通常 (clustersize/2) >= 2