目录
3、以下在命名为docker执行(服务器自动加入cosul集群)
5、测试:增加一个 nginx 容器节点,测试服务发现及配置更新功能
一、Consul概述
template 模板(更新)
registrator(自动发现)
后端每构建出一个容器,会向registrator进行注册,控制consul 完成更新操作,consul会触发consul template模板进行热更新
核心机制:consul :自动发现、自动更新,为容器提供服务(添加、删除、生命周期)
二、Consul的特性
1.支持健康检查、允许存储键值对
2.基于Golong语言,可移植性强
3.支持ACL访问控制
三、Consul的使用场景
Consul的应用场景包括服务发现、服务隔离、服务配置:
1.服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
2.服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
3.服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
4.Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。
四、搭建consul集群
当tomcat4服务器加入进来时(变更时),consul的组件便会采集到数据变化(consul启动时,会丢一个小弟在应用层的节点上,进行监听工作),首先,小弟先把04先注册,并且汇报给consul,
consul-agent会把变更信息展示在web页面中,然后template模板会进行更新配置,在给与NGXIN。NGINX通过reload更新配置。
五、建立Consul服务
1.实验环境
主机IP
docker/192.168.239.130 docker-ce、registrator(自动发现、注册的组件)
nginx/192.168.239.129 nginx、consul、consul-template
2、主机名为nginx端的配置
①、上传安装包到opt下
[root@ nginx opt]# ls
consul_0.9.2_linux_amd64.zip
②、解压
[root@ nginx opt]# unzip consul_0.9.2_linux_amd64.zip
③、把执行文件剪切到/usr/bin下
[root@ nginx opt]# mv consul /usr/bin/
④、consul代理的配置,启动放置后台执行
[root@ nginx opt]# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.159.159 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
[1] 22356
⑤、查看集群信息
consul members
查看一下端口
ss -natp | grep 8500
consul info | grep leader
curl 127.0.0.1:8500/v1/catalog/nodes
⑥、登录web页面
3、以下在命名为docker执行(服务器自动加入cosul集群)
①、安装Gliderlabs/Registrator,可检测容器运行状态自动注册,还可注销docker容器的服务到服务配置中心。
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.239.130 \
consul://192.168.239.129:8500
②、测试服务是否正常 、运行两台nginx和两台阿帕奇
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd
查看web界面
4.在名称为nginx的服务端上手动安装nginx
https://blog.csdn.net/a_b_e_l_/article/details/126490924?spm=1001.2014.3001.5502
上面的链接是我之前做的lnmp,其中包含手工编译安装nginx有需要可自行观看
- 、修改nginx.conf文件内容
vim /usr/local/nginx/conf/nginx.conf
include vhost/*.conf;
创建vhost目录:
- 、创建一个consul目录
创建nginx.ctmpl模板
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 86;
server_name localhost 192.168.239.130;
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
重启nginxfuwu
- 、上传consul-template到consul目录下
template是自动更新的工具
- 、移动位置
mv consul-template /usr/bin/
- 、关联nginx虚拟目录中的子配置文件操作
consul-template -consul-addr 192.168.239.129:8500 \
-template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/ceshi.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
cd /usr/local/nginx/conf/vhost/
ls
ceshi.conf
这里有一个故障:
我在重启nginx的时候发现报错,报错原因是有一个日志文件打不开
我的解决方法就是去到/var/log/nginx/ 下删除原有文件,然后重新创建即可
使用86端口后改nginx服务即可自动被consul发现
5、测试:增加一个 nginx 容器节点,测试服务发现及配置更新功能
在docker节点增加一个nginx
docker run -itd -p 85:80 --name test-05 -h test05 nginx
发现自动增加
在节点上删除一个服务
自动减少了