Docker—consul群集部署
一.什么是consul?
consul是HashCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。
consul特性
●Consul支持健康检查,允许存储键值对
●一致性协议采用Raft算法,用来保证服务的高可用
●成员管理和消息广播采用GOSSIP协议,支持ACL访问控制
方便部署,与Docker等轻量级容器可无缝配合
二.服务形式
建立Consul服务
●每个提供服务的节点上都要部署和运行Consul的agent
●Consul agent有两种运行模式
Server
Client
●Server和Client只是Consul集群层面的区分,与搭建在Cluster之
上的应用服务无关
三.部署consul群集
服务器 | IP地址 | 所需软件 |
---|---|---|
consul服务器 | 192.168.88.137 | docker-ce,consul |
docker容器 | 192.168.88.138 | docker-ce,registrator |
1.在两台服务器上部署docker环境
之前博客中有所提及,可参考
2.创建目录,准备软件包,并解压
[root@localhost ~]# mkdir consul
[root@localhost ~]# cd consul/
[root@localhost consul]# rz
[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@localhost consul]# ls
consul consul_0.9.2_linux_amd64.zip
[root@localhost consul]#
3.把consul移动到/usr/bin下,便于系统识别
[root@localhost consul]# mv consul /usr/bin/
4.进行consul设置
[root@localhost consul]# consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.88.137 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
> [1] 7461
> [root@localhost consul]#
5.查看群集
[root@localhost consul]# consul members
Node Address Status Type Build Protocol DC
consul-server01 192.168.88.137:8301 alive server 0.9.2 2 dc1
6.查看leader信息
[root@localhost consul]# consul info | grep leader
leader = true
leader_addr = 192.168.88.137:8300
7.通过httpd api 获取群集信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员
curl 127.0.0.1:8500/v1/status/leader #集群raf leader
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx #查看nginx的服务信息
curl 127.0.0.1:8500/v1/catalog/nodes #群集节点的详细信息
8.配置另外一台服务器
[root@localhost consul]# docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> -ip=192.168.88.138 \
> consul://192.168.88.137:8500
9.测试服务功能是否正常
[root@localhost consul]# docker run -itd -p:83:80 --name test-01 -h test01 nginx
[root@localhost consul]# docker run -itd -p:84:80 --name test-02 -h test02 nginx
[root@localhost consul]# docker run -itd -p:88:80 --name test-03 -h test03 httpd
[root@localhost consul]# docker run -itd -p:89:80 --name test-04 -h test04 httpd
10 .查看容器
[root@localhost consul]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58061c14a96f httpd "httpd-foreground" About a minute ago Up About a minute 0.0.0.0:89->80/tcp test-04
3ea65e277a6a httpd "httpd-foreground" About a minute ago Up About a minute 0.0.0.0:88->80/tcp test-03
ae57195f4930 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:84->80/tcp test-02
2495cea79d80 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:83->80/tcp test-01