0%

多台服务器通过docker部署consul集群

同台服务器consul集群

consul docker节点都在相同服务器,通过docker网桥模式默认连接,需要组成集群的前提是知道对方的ip地址,由于docker默认创建的网关无法固定ip,因此通过自定义的网关,让两个consul server节点同时部署在相同网关内,同时固定各自的ip,然后join对方的ip,这样即可让本机的两个server节点选举leader组成集群,测试的docker-compose.yml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: "3.8"

services:
consul-1:
image: docker/consul
command: consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node node1 -bind 172.19.0.2 -retry-join 172.19.0.3 -datacenter dc -client=0.0.0.0 -ui
ports:
- "8500:8500" # 只开放8500端口让我们从ui页面看到集群节点,其他8301,8302等端口无需开放,因为同一个网段内,因此直接可以访问对方的端口
networks:
consul-net:
ipv4_address: 172.19.0.2

consul-2:
image: docker/consul
command: consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node node2 -bind 172.19.0.3 -retry-join 172.19.0.2 -datacenter dc -client=0.0.0.0 -ui
networks:
consul-net:
ipv4_address: 172.19.0.3

networks:
consul-net:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16

多台服务器consul集群

多台服务consul集群时与在单台服务有许多地方需要注意:

  1. 每台服务器都需要暴露端口给对方,进行集群的必要通信和协商,其中8301和8302的tcp和udp都需要开放
  2. 需要将本机的ip指定advertise
    以上两个条件不满足,可能会出现我遇到的memberlist: Suspect <name> has failed, no acks received错误
    服务器1的ip:10.2.145.183的docker-compose.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    version: '3.8'
    services:
    consul:
    image: docker/consul
    command: consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node 10.2.145.183 -advertise 10.2.145.183 -retry-join 10.2.145.182 -datacenter dc -client=0.0.0.0 -ui
    restart: always
    ports:
    - "8500:8500"
    - "8600:8600"
    - "8300:8300"
    - "8400:8400"
    - "8301:8301/tcp"
    - "8302:8302/tcp"
    - "8301:8301/udp"
    - "8302:8302/udp"
    networks:
    - consul-net
    networks:
    consul-net:

服务器2的ip:10.2.145.182的docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3.8"

services:
consul:
image: docker/consul
command: consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node 10.2.145.182 -advertise 10.2.145.182 -retry-join 10.2.145.183 -datacenter iot -client=0.0.0.0 -ui
ports:
- "8500:8500"
- "8600:8600"
- "8300:8300"
- "8400:8400"
- "8301:8301/tcp"
- "8302:8302/tcp"
- "8301:8301/udp"
- "8302:8302/udp"
networks:
- consul-net

networks:
consul-net:
driver: bridge
------------ 本文已结束,感谢您的阅读,欢迎留言讨论 ------------