# 一台主机上搭建Consul集群并测试
借助Docker容器,已经启动了一个server节点,并能够与之通信。 接下来,希望借助Docker来搭建consul集群。以启动3个consul集群节点为例:
# 1、启动第一个节点
启动第一个节点的时候没有使用了 -bootstrap 参数, 而是使用了 -bootstrap-expect 3, 使用这个参数节点会等到所有三个端都连接到一起了才会启动并且成为一个可用的cluster。
$ docker run -d -p 8500:8500 -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 consul agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
对如上的参数做如下说明:
- ui:表示启动 Web UI 管理器,默认开放端口 8500,可以在浏览器进行访问。
- –name
# 2、查看节点IP
我们需要知道这个container的内部IP, 使用下面的命令我们吧这个IP放到了环境变量 JOIN_IP 里。
$ JOIN_IP="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1)"
也可以直接查看container的IP,如下命令:
$docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1
# 3、启动第二个节点
启动 node2并且告诉他通过 $JOIN_IP 加入到 node1:
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 consul agent -server -node=2 -join='172.17.0.2'
这里需要对参数作一下说明:
- CONSUL_BIND_INTERFACE是consul镜像提供给我们的几个常用的环境变量,该常量与-bind作用相同。
- name:为启动的节点命名
- node:为起订的节点赋值一个id
- agent:表示启动 Agent 进程。
- server:表示启动Consul Server 模式。
- join:表示加入到某一个集群中去。
# 4、启动第三个节点
按照同样的方法我们启动 node3:
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 consul agent -server -node=3 -join='172.17.0.2'
现在我们就有了一个拥有3个节点的运行在一台机器上的集群。注意,根据Consul Agent的名字给container起了名字。
我们没有暴露出任何一个端口用以访问这个集群, 但是我们可以使用第四个agent节点以client的模式(不是用 -server参数)。这意味着他不参与选举但是可以和集群交互。而且这个client模式的agent也不需要磁盘做持久化。
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_4 consul agent -client -node=4 -join='172.17.0.2' -client='0.0.0.0'
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_5 consul agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_6 consul agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'
2
3
4
5
如果上述命令都能执行成功,就意味着我们的集群搭建成功了。
# 查看集群的状态
集群搭建完成以后,我们可以通过浏览器或者终端命令行的形式来查看,集群里面的节点的状态。
# 浏览器:
我们可以在浏览器中访问localhost:8500端口,可以看到如下效果:
- 三个serve类型的节点集群节点:
- 所有的Node节点(server和client):
# 命令行查看节点状态:
在终端下执行如下命令:
$consul members
或者是:
$docker exec consul_server_1 consul members
均可以看到如下输出效果:
# 停止节点
活动容器状态查看 使用docker ps命令可以输出当前运行活动中的容器:
$docker ps
1停止容器活动 可以使用如下命令将目前正处于活动中的容器停止:
$docker stop containerID
1如果要停止多个,可以用空格隔开。
移除容器 如果想要彻底移除启动的节点容器,可以通过rm命令来实现:
$docker rm containerID
1