部署 CONSUL 集群

部署 CONSUL 集群

前言

在Docker 1.13版本之后,可以说Docker 对于compose容器调度编排实现了飞跃,可以使得在编排容器的时候可以结合Docker swarm集群和跨主机通讯的概念。在Docker swarm 的基础之上引入stack对service镜像管理和编排。之前的内容有记录过docker service来完成集群搭建,现在这篇文章主要来使用docker compose文件+docker stack来完成集群编排。

一、环境准备

已经有两台以上主机,并且已经加入到swarm集群中。

[root@cxl1 /]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pwo3ap25tq5ipabcnjw6cfk4g *   cxl1                Ready               Active              Leader              18.09.6
yixj7qy3c4bh1sdxvazu4dn3n     cxl2                Ready               Active                                  18.09.6
mmpz4717tve707goapft7fu5s     cxl3                Ready               Active                                  18.09.6

二、编写compose文件

创建文件docker-compose-consul.yml编写内容如下:

version: '3.6'
services:
  cs-bootstrap:
    image: consul
    command: "agent -server -bootstrap-expect 3 -client 0.0.0.0"
    deploy:
      placement:
        constraints: [node.role == manager]
    environment:
    - "CONSUL_BIND_INTERFACE=eth0"
    - "TZ=Asia/Shanghai"
    - "CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"
  cs-server:
    image: consul
    command: "agent -server -retry-join cs-bootstrap -client 0.0.0.0 -ui"
    deploy:
      mode: global
    depends_on:
    - cs-bootstrap
    environment:
    - "CONSUL_BIND_INTERFACE=eth0"
    - "TZ=Asia/Shanghai"
    - "CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"
  cs-client:
    image: consul
    command: "agent -retry-join cs-bootstrap -client 0.0.0.0 -ui"
    deploy :
      mode: global
    ports:
    - target: 8500
      published: 8500
      protocol: tcp
      mode: host
    depends_on:
    - cs-bootstrap
    environment:
    - "CONSUL_BIND_INTERFACE=eth0"
    - "TZ=Asia/Shanghai"
    - "CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"


networks:
  default:
    name: swarm-net
    external: true

上面的docker-compose-consul.yml文件主要内容是:创建三个服务service(cs-bootstrap、cs-server、cs-client)。并且三个服务使用外部创建好的overlay类型的网络swarm-net。

其中cs-bootstrap只部署在master节点,作为consul的server主节点,启动命令为agent -server -bootstrap-expect 3 -client 0.0.0.0;其中cs-server服务部署在所有机子上面,也是consul server并且注册到cs-bootstrap节点,可以从启动命令看出agent -server -retry-join cs-bootstrap -client 0.0.0.0;最后cs-client服务也部署到所有主机上,也注册到server上,作为consul client,提供web页面供使用者查看,暴露到宿主机的端口为8500,启动命令为agent -retry-join cs-bootstrap -client 0.0.0.0 -ui

三、根据compose文件编排服务

1、首先创建必要的overlay网络

 docker network create -d overlay --attachable swarm-net

使用docker network ls查看网络:

networkoverlay.jpg
可以看到我们创建的swarm-net已经创建好了。

2、使用docker stack deploy命令完成服务部署,如下:

docker stack deploy -c docker-compose-consul.yml consul

stackcreate.jpg

使用docker stack ps查看部署情况:
stackps.jpg

可以看到服务部署到了不同的节点,以及每个节点部署的数量,运行状态等。

四、验证consul集群

访问任意一台主机的ip,端口8500,可以看到如下页面:

consulcluster.jpg

看到注册了4个consul服务集群。

五、停止服务

使用docker stack部署的集群,如果需要停止,只需一个命令,所有服务就停止了:

docker stack rm consul

stackrm.jpg

六、总结

使用docker stack与docker compose文件结合的方式,极大的简化了服务的水平及横向扩展,方便集群的维护。