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