docker - 如何将Docker Swarm连接到多个领事服务器以进行故障转移?

标签 docker failover consul docker-swarm

我正在与领事一起运行docker swarm。我有一个由3个相互连接的节点组成的领事群集,以进行故障转移。问题是我只能将我的群集工作器和主服务器连接到单个节点,如果该节点发生故障,那么群集将停止工作。那么,如何将群 worker 和主节点连接到我的所有节点?以下命令(如果从主服务器运行)将设置我的群集环境,使其连接到单个领事服务器:

#### REFERENCE
# {{master_i}} is the IP address of the master server
# {{consul_i}} is the IP address of the consul server
# {{worker_i}} is the IP address of a worker server


#### START THE MASTER
docker run --restart=unless-stopped --name=swarm-manager0 -d -p 4000:4000 swarm manage -H :4000 --replication \
--advertise {{master_0}}:4000 \
consul://{{consul_0}}:8500

#### START THE WORKERS REMOTELY FROM THE MASTER
docker -H={{worker_0}}:2375 run -d --restart=unless-stopped --name=swarm-worker0 swarm join \
--advertise={{worker_0}}:2375 \
consul://{{consul_0}}:8500/

docker -H={{worker_1}}:2375 run -d --restart=unless-stopped --name=swarm-worker1 swarm join \
--advertise={{worker_1}}:2375 \
consul://{{consul_0}}:8500/

docker -H={{worker_2}}:2375 run -d --restart=unless-stopped --name=swarm-worker2 swarm join \
--advertise={{worker_2}}:2375 \
consul://{{consul_0}}:8500/

#### START THE WORKER SERVICE DISCOVERY
docker -H={{worker_0}}:2375 run -d --restart=unless-stopped \
-h {{worker_0}} --name registrator0 -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \
consul://{{consul_0}}:8500

docker -H={{worker_1}}:2375 run -d --restart=unless-stopped \
-h {{worker_1}} --name registrator1 -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \
consul://{{consul_0}}:8500

docker -H={{worker_2}}:2375 run -d --restart=unless-stopped \
-h {{worker_2}} --name registrator2 -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \
consul://{{consul_0}}:8500

请注意,仅在每个docker run命令的末尾添加两个额外的consul://{{consul_i}}:8500(用于其他两个领事服务器)不会将容器连接到其他领事服务器。

最佳答案

根据@slugonamission,无法将swarm连接到多个领事服务器的多个IP地址。

但是,我能够创建位于领事服务器前面的haproxy负载均衡器。因此,我的负载平衡器将所有流量从负载平衡器的端口8500转发到所有领事服务器上的端口8500。通过这样做,我可以使用负载均衡器的IP地址代替{{CONSUL0}}。这是我漂亮的基本haproxy.cfg

# $CONSUL0 $CONSUL0 and $CONSUL0 are the IP addresses of my consul servers

global
    log 127.0.0.1 local0 notice
    maxconn 2000
    user haproxy
    group haproxy

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    timeout connect  5000
    timeout client  10000
    timeout server  10000

listen appname 0.0.0.0:8500
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth ubuntu
    balance roundrobin
    option httpclose
    option forwardfor
    server consul0 $CONSUL0:8500 check
    server consul1 $CONSUL1:8500 check
    server consul2 $CONSUL2:8500 check

进行更改后,我的领事服务器可以单独关闭,群集将继续工作。

关于docker - 如何将Docker Swarm连接到多个领事服务器以进行故障转移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37601454/

相关文章:

rabbitmq - 使用 Spring AMQP 和 RabbitMQ HA 进行故障转移

java - 如何从 Spring Boot 应用程序更改 consul K/V Store 中的值

docker - Spring Boot消耗过多的RAM

linux - docker -libudev : udev_has_devtmpfs: name_to_handle_at on/dev: Operation not permitted

linux - 在 Tinycore (Docker) 上安装 Firefox

spring - 在没有 Spring Cloud 的情况下使用 RibbonClient 和 Consul 发现进行 Feign

dns - 如何从主机访问Consul DNS接口(interface)?

.net - 无法加载共享库 'libldap-2.4.so.2' 或其依赖项之一

mongodb - 由于 MongoDB 副本集的意外故障转移导致数据丢失

php - 如何构建可用的 Web 应用程序