一、Docker-consul简介
1、概述
consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。
服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server 和 client。 每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。
2、Consul两种模式
client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。
二、Consul特性
1、特性
-
支持健康检查、允许存储键值对
-
基于Golong语言,可移植性强
-
支持ACL访问控制
2、应用场景
Consul的应用场景包括服务发现、服务隔离、服务配置:
服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。
三、部署Consul集群(server端)
1、建立Consul服务
[root@localhost ~]#cd /opt/
[root@localhost opt]#mkdir consul
[root@localhost opt]#cd /opt/consul/
[root@localhost consul]#rz -E
rz waiting to receive.
[root@localhost consul]#ls
consul_0.9.2_linux_amd64.zip
[root@localhost consul]#unzip consul_0.9.2_linux_amd64.zip
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@localhost consul]#mv consul /usr/local/bin/
[root@localhost consul]#consul --version
Consul v0.9.2
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
2、设置代理,在后台启动consul服务端
[root@localhost consul]#consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.10.100 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 17895
[root@localhost consul]#netstat -natp | grep consul
tcp 0 0 192.168.10.100:8300 0.0.0.0:* LISTEN 17895/consul
tcp 0 0 192.168.10.100:8301 0.0.0.0:* LISTEN 17895/consul
tcp 0 0 192.168.10.100:8302 0.0.0.0:* LISTEN 17895/consul
tcp6 0 0 :::8500 :::* LISTEN 17895/consul
tcp6 0 0 :::8600 :::* LISTEN 17895/consul
3、查看集群信息
[root@localhost consul]#consul members #查看members状态
Node Address Status Type Build Protocol DC
consul-server01 192.168.10.100:8301 alive server 0.9.2 2 dc1
[root@localhost consul]#consul operator raft list-peers #查看集群状态
Node ID Address State Voter RaftProtocol
consul-server01 192.168.10.100:8300 192.168.10.100:8300 leader true 2
[root@localhost consul]#consul info | grep leader #查看详细信息
leader = true
leader_addr = 192.168.10.100:8300
四、Consul部署(Client端)
1、安装Gliderlabs/Registrator Gliderlabs/Registrator
容器服务自动加入nginx集群
[root@localhost ~]#docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> --ip=192.168.10.101 \
> consul://192.168.10.100:8500
[root@localhost ~]#docker images
[root@localhost ~]#docker ps -a
2、测试服务发现功能是否正常
[root@localhost ~]#systemctl restart docker
[root@localhost ~]#docker run -itd -p:83:80 --name test-01 -h test01 nginx
[root@localhost ~]#docker run -itd -p:84:80 --name test-02 -h test02 nginx
[root@localhost ~]#docker run -itd -p:88:80 --name test-03 -h test03 httpd
[root@localhost ~]#docker run -itd -p:89:80 --name test-04 -h test04 httpd
[root@localhost ~]#docker ps -a
3、验证 http 和 nginx 服务是否注册到 consul
浏览器中,输入 http://192.168.10.100:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现 5 个服务。