consul是微服务体系中用于服务发现的高可用工具,现在我们来使用docker先搭建一个单点consul agent,然后搭建一个三节点集群。
搭建单节点consul agent
查看所有consul的镜像文件:
docker search consul
拉取镜像:
docker pull consul
检查拉取是否成功:
docker images
或者:
docker run consul version
启动单节点consul agent:
docker run -p 8500:8500/tcp consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0
如上的命令中,参数说明如下:
使用浏览器来进行访问(使用阿里云服务器要记得开放安全端口):
宿主机上查看节点数量:
搭建三节点集群
启动第一个节点:
启动第一个节点的时候没有使用了 -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
查看节点IP:
$ JOIN_IP="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' consul_server_1)"
也可以直接查看container的IP,如下命令:
$ docker inspect -f '{{ .NetworkSettings.IPAddress }}' consul_server_1
启动第二个节点:
启动 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:表示加入到某一个集群中去。
启动第三个节点:
按照同样的方法我们启动 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'
如果上述命令都能执行成功,就意味着我们的集群搭建成功了。
查看集群的状态:
集群搭建完成以后,我们可以通过浏览器或者终端命令行的形式来查看,集群里面的节点的状态。
浏览器:
我们可以在浏览器中访问localhost:8500端口,可以看到如下效果:
命令行查看节点状态:
docker exec consul_server_1 consul members
|