目录
一.什么是consul
解决什么问题?
consul的模式:
二.consul 部署
consul服务器:
查看版本:
设置代理,在后台启动 consul 服务端:
进行后台启动:
查看集群信息:
访问页面:
registrator服务器:
测试服务发现功能是否正常:
一.什么是consul
consul : 实现服务自动发现和注册的工具
解决什么问题?
如果后端应用服务器集群节点数量很多,前端的负载均衡器配置和管理会很麻烦的问题。(负载均衡器的节点配置条目会很多,配置管理起来会很麻烦;并且如果后端节点的网络位置发生了变化,还需要修改所有调用这些后端节点的负载均衡器的配置等问题)
consul的模式:
client模式:可用于接收后端服务发来的注册信息,并转发给server节点,没有持久化能力
server模式:可用于接收后端服务或client模式节点发来的注册信息,还可在server节点之间同步注册信息,具有持久化注册信息到本地的能力
server-leader节点:复制同步注册信息给其它的server节点,并对各个节点做健康检查
二.consul 部署
consul服务器:192.168.233.10;registrator服务器:192.168.233.20
consul服务器:
先创建目录:
拖入consul压缩包:
将压缩包复制到consul目录中:
在进行解压:
移动到环境变量 中:
mv consul /usr/local/bin/
查看版本:
设置代理,在后台启动 consul 服务端:
先创建data目录:
创建日志目录:
进行后台启动:
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.233.10 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
-server: 以server身份启动。默认是client。
-bootstrap :用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。
-bootstrap-expect=2 :集群要求的最少server数量,当低于这个数量,集群即失效。
-ui :指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
-data-dir :指定数据存储目录。
-bind :指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0。
-client :指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1。
-node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-datacenter :指定数据中心名称,默认是dc1。
启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口
查看集群信息:
查看members状态:
查看集群状态:
consul operator raft list-peers
通过 http api 获取集群信息:
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员
curl 127.0.0.1:8500/v1/status/leader #集群 server-leader
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nodes #集群节点详细信息
访问页面:
registrator服务器:
安装 Registrator,创建镜像:
docker pull gliderlabs/registrator
添加容器:
docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest --ip=192.168.233.20 consul://192.168.233.10:8500
--net=host :把运行的docker容器设定为host网络模式。
-v /var/run/docker.sock:/tmp/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。
--restart=always :设置在容器退出时总是重启容器。
--ip :刚才把network指定了host模式,所以我们指定ip为宿主机的ip。
consul :指定consul服务器的IP和端口。
测试服务发现功能是否正常:
docker run -d --name c1 -p 1314:80 nginx:1.24
docker run -d --name c2 -p 1324:80 nginx:1.24
访问页面:
consul服务器上查看: