版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35559756/article/details/81676252
首先需要下载consul,
一种是源码安装,另一种是docker方式安装运行,这里我推荐使用docker方式
打开docker公开仓库,https://hub.docker.com/
搜索consul
官方镜像为 /consul/”>https://hub.docker.com//consul/
下载镜像: sudo docker pull consul
consul的架构是一主多从、服务端与客户端分离的架构风格,分成master和slover,server和client,内部通信使用的是gossip作为rpc通讯
尝试阶段可以如下:
node1:
docker run -d --name=node1 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node1 \
consul agent -server -bind=172.17.0.2 -bootstrap-expect=3 -node=node1 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
注意: 启动node1之后看一下输出的Cluster Addr地址,作为下面的-join参数的值,如果没有这一步,下面的slover将无法加入到注册中心集群中
node2:
docker run -d --name=node2 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 9300:8300 \
-p 9301:8301 \
-p 9301:8301/udp \
-p 9302:8302/udp \
-p 9302:8302 \
-p 9400:8400 \
-p 9500:8500 \
-p 9600:8600 \
-h node2 \
consul agent -server -bind=172.17.0.3 \
-join=172.17.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node2 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
node3:
docker run -d --name=node3 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 10300:8300 \
-p 10301:8301 \
-p 10301:8301/udp \
-p 10302:8302/udp \
-p 10302:8302 \
-p 10400:8400 \
-p 10500:8500 \
-p 10600:8600 \
-h node2 \
consul agent -server -bind=172.17.0.4 \
-join=172.17.0.2 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node3 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
node4:
docker run -d --name=node4 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \
-p 11300:8300 \
-p 11301:8301 \
-p 11301:8301/udp \
-p 11302:8302/udp \
-p 11302:8302 \
-p 11400:8400 \
-p 11500:8500 \
-p 11600:8600 \
-h node4 \
consul agent -bind=172.17.0.5 -retry-join=172.17.0.2 \
-node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node4 -client 0.0.0.0 -ui
使用docker logs -f 查看运行时容器内部日志
如: docker logs -f node1
docker logs -f node2
docker logs -f node3
使用docker ps -a 实时查看容器运行情况
进入master中查看consul集群运行情况:
docker exec -t node1 consul members
也可以进入容器中再查看:
docker exec -it 容器id /bin/bash
consul members
如果不出意外的话会现实如下内容:
root@tristan-desktop:/home/tristan# docker exec -t node1 consul members
Node Address Status Type Build Protocol DC Segment
node1 172.17.0.2:8301 alive server 1.2.2 2 dc1 <all>
node2 172.17.0.3:8301 alive server 1.2.2 2 dc1 <all>
node3 172.17.0.4:8301 alive server 1.2.2 2 dc1 <all>
node4 172.17.0.5:8301 alive client 1.2.2 2 dc1 <default>
为了方便客户端使用,以及简化服务注册流程,使得注册中心透明化,需要安装Registrator
Registrator能够在线自动检测docker容器,支持热插拔的注册与撤销服务
监听容器并确定其提供了什么服务,在发现容器内的服务后,将其添加到服务注册中心如consul、etcd、skydns2等
安装Registrator
docker pull gliderlabs/registrator
运行Registrator:
docker run -d --name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--net=host \
gliderlabs/registrator -ip="192.168.127.128" consul://172.17.0.2:8500
在浏览器上访问consul的web界面 : http://localhost:8500/ui/dc1/services
在这里可以看到服务注册列表、通信节点、数据中心和键/值存储