用Docker 搭建基于多数据中心的Consul集群

docker 拉取 consul 镜像

docker pull consul

一般是拉去最新的镜像文件

先建立 /data/consul 文件夹, 用于保存 consul 的数据,这对所有代理都是必需的。该目录在重新启动时应该是持久的。这对于在服务器模式下运行的代理尤其重要,因为它们必须能够保持群集状态。此外,该目录必须支持使用文件系统锁定,这意味着某些类型的已装入文件夹(例如VirtualBox共享文件夹)可能不合适。注意:服务器和非服务器代理都可以在此目录中的状态下存储ACL令牌,因此读取访问权限可以授予对服务器上的任何令牌的访问权限,并允许访问非服务器上的服务注册期间使用的任何令牌。在基于Unix的平台上,这些文件使用0600权限编写,因此您应确保只有受信任的进程可以与Consul一样的用户身份执行。在Windows上,您应确保该目录具有适当的权限配置,因为这些权限将被继承。

mkdir -p /data/consul

使用 docker run 启动 server

docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul1 consul agent -server -bootstrap -ui -client='0.0.0.0'

显示启动成功

 

一般第一个容器的ip地址是 172.17.0.2,可以通过下面的命令查询容器ip:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1

agent: 表示启动 agent 进程

server: 表示 consul 为 server 模式

client: 表示 consul 为 client 模式

bootstrap: 表示这个节点是 Server-Leader

ui: 启动 Web UI, 默认端口 8500

node: 指定节点名称, 集群中节点名称唯一

client: 绑定客户端接口地址, 0.0.0.0 表示所有地址都可以访问

由于笔者已经有其他docker实例,所以ip不是172.17.0.2。

往集群插入其他节点,join: 表示加入到指定集群中(一个数据中心 Consul 一般建议 3~5 个 Server 节点)

docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2;
docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2;
docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 172.17.0.2;

 

 

查看集群下面的节点

docker exec -it consul1 consul members

至此 consul 的部署已经完成。

上述只搭建了dc1,下面开始搭建dc2,并将dc1和dc2关联起来

docker run -d --name=consul5 -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -bootstrap-expect 3 -datacenter=dc2

再查看下dc2的容器ip

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul5

 

由于笔者已经有其他docker实例,所以ip不是172.17.0.9。

 

往dc2添加节点(一个数据中心 Consul 一般建议 3~5 个 Server 节点)

docker run -d --name=consul6 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.9;
docker run -d --name=consul7 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.9;
docker run -d --name=consul8 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=false --client=0.0.0.0 --join 172.17.0.9;

以下显示添加成功

关联dc1和dc2

docker exec -it consul6 consul join -wan 172.17.0.5 

以下显示关联成功

接下来我们查看一下数据中心 dc2 的节点:

至此搭建完成,在浏览器中访问 http://127.0.0.1:8500 地址,即可看到所有的服务和节点,还可以通过切换数据中心查看其下的服务和节点,点击每个节点可以进一步查看具体节点的健康状况、运行的服务以及响应时间等信息。

常用命令


列出数据中心
docker exec consul5 consul catalog datacenters

列出节点
docker exec consul5 consul catalog nodes


可以将 consul5 换成其他节点名称,该命令会列出指定节点所在数据中心的所有节点。

 移除节点
docker exec consul7  consul operator raft remove-peer -id=172.17.0.9:8301

 

查询群集中所有的 LAN 和 WAN 的 Server 节点
docker exec consul5 consul members -wan


其中 `consul5`` 可以换成关联数据中心中的其他任意节点名称

 查看集群状态
docker exec consul5 consul operator raft list-peers


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章