1.docker consul简介
1.1为什么使用docker consul
例如微服务、负载均衡的服务器池,传统的架构不够灵活不能很好的适应变化,当创建越来越多的服务时,这些服务之间的通信越难管理,运维十分不便,这时针对于自动化策略的服务发现就应运而生了。
1.2consul服务发现原理
工作流程:
例如负载均衡架构,当服务器池需要增加服务器时,只需启动一个新的容器,registrator发现并注册容器中的服务,此时通知consul server更新,consul template模板也进行更新,自动更新nginx的配置文件,在upstream参数中添加服务器IP
registrator:
registrator监控新建的docker容器,并且检查判定这些容器提供服务,从我们的目的出发,任何监听在某个端口的程序都是服务。registrator发现在容器内的服务,并将其 添加到一个服务注册端,比如consul或etcd
2.docker consul搭建
环境:
consul-server:192.168.58.30
nginx-node:192.168.58.120
consul服务部署
unzip consul_0.9.2_linux_amd64.zip
mv
consul agent \ #启动一个consul节点
-server \ #指定为consul的server端
-bootstrap \ #来自 Twitter,是目前最受欢迎的前端框架
-ui \ #通过网页访问
-data-dir=/var/lib/consul-data \ #数据存放位置
-bind=192.168.58.30 \ #指定IP
-client=0.0.0.0 \
-node=consul-server &> /var/log/consul.log & #指定该节点名称,并在后台运行该服务
查看相关信息
##通过命令查看
consul members #查看consul服务节点成员
consul info #查看consul所有服务信息,可检索leader查看consul服务集群主节点
##通过网页信息查看
curl 192.168.58.30:8500/v1/status/peers #查看集群server成员
curl 192.168.58.30:8500/v1/status/leader #consul服务集群leader
curl 192.168.58.30:8500/v1/catalog/services #注册的所有服务
curl 192.168.58.30:8500/v1/catalog/nginx #查看nginx服务信息(指定服务)
curl 192.168.58.30:8500/v1/catalog/nodes #consul服务集群节点详细信息
2.1测试consul服务是否正常
安装gliderlabs/registrator
用于检查容器运行状态自动注册,还可注销docker容器的服务到服务配置中心,目前支持consul、etcd和SkyDNS2
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.58.30 \ #指定监听服务的本机器IP
consul://192.168.58.30:8500 #指定consul-server服务器
使用compose添加服务检查服务是否正常
compose编排容器方法在前面的文章已说,这里只是启动
docker-compose -f docker-compose.yaml up -d #启动一个nginx负载均衡架构
登录192.168.58.30:8500查看服务
发现负载均衡架构中nginx和http服务均已加入
在nginx-node上添加template nginx模板文件
需要实时修改配置文件的服务器
参数以变量形式写入便于自动修改
cp /root/nginx.conf /root/consul/nginx.ctmpl
vi nginx.ctmpl
upstream http_server {
{{range service "httpd"}}
server {{.Address}}:{{.Port}};
{{end}}
}
location / {
root html;
index index.html index.htm;
proxy_pass http://http_server;
}
##这里只有反向代理配置部分,upstream内为template模板的变量定义格式
安装consul-template工具
nginx-node服务器上
wget https://mirrors.xlhy1.com/source-code/consul-template_0.19.5_linux_amd64.tgz
tar -zxvf consul-template_0.19.5_linux_amd64.tgz
cp consul-template /usr/bin/
配置并启动template
consul-template是一个守护进程,用于实时查询consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成后,可以选择运行shell命令执行更新操作,重新加载nginx。consul-template可以查询consul中的服务目录、key、key-values等。这种强大的抽象功能和查询语言模板可以使consul-template特别适合动态的创建配置文件。例如:创建nginx反向代理。
#nginx-node服务器上
consul-template -consul-addr 192.168.58.30:8500 \
-template "/root/nginx.ctmpl:/usr/local/nginx/conf/nginx.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
##指定模板文件:映射到nginx服务配置文件:指定更新配置文件后执行重载命令
增加一个http容器节点,测试服务发现及配置更新功能
由于http容器和registrator这里直接运行在consul服务器上,所以在consul-server上操作
mkdir -p /www/http3
echo "<h1>THIS IS WEB333</h1>"
docker run -d -p 83:80 --name http3 -v /www/http3:/usr/local/apache2/htdocs httpd
添加服务后,nginx-node服务器上consul-template检测到consul新发现服务,执行任务,新增服务报告
consul-server原本已有2台http容器配合nginx-node做负载均衡,此时访问nginx-node测试是否可以轮询访问到http3
已发现http3服务且将其加入nginx负载均衡架构服务器池中,nginx配置文件已自动修改