docker consul服务更新发现

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配置文件已自动修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值