Consul自动发现功能与consul-template 自动更改技术

-------Consul自动发现功能
操作:
mkdir consul 解压后使用consul集群工具
cd consul
consul_0.9.2_linux_ amd64.zip包拖进来
unzip consul_0.9.2_ linux_amd64.zip 得到consul工具
mv consul /usr/local/bin/ 放到bin下可以直接用consul命(自动补全)
正确:
consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=20.0.0.10 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &

jobs (看后台运行这一个server ok)
consul members 查看集群信息
consul info | grep leader 看本地master信息 是自己 alive处于活跃状态 默认数据中心名称dc1


通过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/service 查看注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx 查看nginx服务信息
curl 127.0.0.1:8500/v1/catalog/node 查集群节点详细信息(有lan van两个端口)

add:服务加集群:添加服务(容器服务自动加入nginx集群,还有httpd)
安装注射器regisrtrator(可检查容器运行状态,可注销docker容器的服务到服务配置中心,目前支持Consul、Etcd和SkyDNS2)


第二台机器做node节点
容器服务自动加入nginx集群-
1.安装Gliderlabs/Registrator Gliderlabs/Registrator
可检查容器运行状态自动注册,还可注销docker容器的服务到服务配置中心。
目前支持Consul、Etcd 和SkyDNS2。

hostnamectl set-hostname node
bash

systemctl status docker (要开启docker,然后运行一个容器(自己是干净的系统))

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock :/tmp/docker.sock \
--restart=always \
gliderlabs/registrator :latest \
-ip=20.0.0.10 \
consul://20.0.0.11:8500

此时node节点上跑的容器服务能被consul自动发现
真机网页:http://20.0.0.11:8500 (8500consul端口)

现在node是自己,没服务 试着加服务(在node上(10)加服务看能不能被consul发现)10上的服务能不能被11所发现
docker run -itd -p:83:80 --name test-01 -h test01 nginx (-h节点即主机名)最后是服务
docker run -itd -p:90:80 --name test-03 -h test03 nginx (其实是两个nginx服务而已)
docker run -itd -p:91:80 --name test-04 -h test04 httpd
docker run -itd -p:91:80 --name test-04 -h test04 httpd
真机20.0.0.11刷新能看到两个nginx服务和两个httpd服务
刷新能看到

总结:自动发现OK consul作为服务端,后面node端加入节点中,node端容器变化随时能被发现(增加减少都能被发现)


------安装consul-template 自动更改

Consul集群
cd consul/
vim nginx.ctmp1 (consul-template模板)
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}}
{{end}}
}
server {
listen 83;
server_name localhost 20.0.0.11;
access_1og /var/1og/nginx/kgc.cn-access.1og;
index index.html index.php;
location / {
proxy_set_header  HOST $host;
proxy_set_header  X-Rea1-IP $remete_addr;
proxy_set_header  Client-IP $remote_addr ;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}

装nginx
yum -y install gcc gcc-c++ pcre-devel zlib-devel
nginx-1.12.0.tar.gz拖入
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
cd /usr/local/nginx/ (上一步路径到usr/local/nginx ls 有东西)
cd conf
vim nginx.conf (有默认的80端口 无子配文的端口,加载include识别子配文)
在http的 include  mime.types;下一行
加 include vhost/* .conf; (识别所有vhost下所有.conf结尾的,这样就会被自动加载,子配文避免操作复杂性)

ls /root/consul/
将nginx.ctmp1生成的配文指到 vhost下 (vhsot是相对路径,放在conf下)
mkdir vhost
mkdir /var/log/nginx
useradd -M -s /sbin/nologin nginx
ln - s /usr/local/nginx/sbin/nginx /usr/bin
nginx (启nginx)

配置并启动template
consul-template_0.19.3 _linux_amd64.zip包拖入
unzip consul-templat e_0.19.3_linux_amd64.zip (解压后有consul-template工具)
mv consul-template / usr/local/bin/ (便于系统同识别,可用consul-template命令)
consul-template -consul-addr 20.0.0.11:8500 -template "/root/consul/nginx.ctmp1:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
(引用模板:产生vhost路径生成kgc.conf(只要vhost下.conf结尾的):重载服务(不停机)日志级别info) 处于监控终端,打开另一个终端

OK
验证:
1.看vhost底下有没生成kgc.conf文件 有
cd /usr/local/nginx/conf/vhost/
ls
kgc.conf
vim kgc.conf 读取到了两个后端nginx容器地址

2.看用的80还是83端口
netstat -anpt | grep nginx
80端口和83端口都用了
看nginx能不能被访问 两个端口都行
http://20.0.0.11:80
http://20.0.0.11:83

去节点服务器看两个nginx容器日志
docker logs -f test-04


增加一个nginx容器节点(再registrator服务端注册)
docker run -itd -p:85:80 --name test-06 -h test-06 nginx 此时加nginx 前面会有感叹号 在监控着
再验证1.看vhost底下有没生成kgc.conf文件

总结:在节点中增删服务 前面相应的vhost底下的kgc.conf会自动加减服务节点

------consul多节点(在docker环境中部署一个consul即可)
再开一台有docker环境的机器
mkdir consul 解压后使用consul集群工具
cd consul
consul_0.9.2_linux_amd64.zip包拖进来
unzip consul_0.9.2_linux_amd64.zip 得到consul工具
mv consul /usr/local/bin/ 放到bin下可以直接用consul命(自动补全)

(法二:scp consul root@20.0.0.12:/usr/local/bin (将自己解压好的consul传到这台机器里))

consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=20.0.0.12 -client=0.0.0.0 -node=consul-server02 -enable-script-checks=true -datacenter=dc1 -join 20.0.0.11 &>/var/log/consul.log &

http://20.0.0.11:8500 刷新 多了一个节点

 

 

add:
(三个可用
mkdir consul 解压后使用consul集群工具
cd consul
consul_0.9.2_linux_amd64.zip包拖进来
unzip consul_0.9.2_linux_amd64.zip 得到consul工具
mv consul /usr/local/bin/ 放到bin下可以直接用consul命(自动补全)

docker-compose 拖到/usr/local/bin (拖到这儿系统直接识别这个命令)
cd /usr/local/bin
chmod +x docker- (docker-compose就可以用了,不需安装)

consul-template_0.19.3_ linux_amd64.zip包拖入
unzip consul-template_ 0.19.3_linux_amd64.zip (解压后有consul-template工具)
mv consul-template /usr/local/bin/ (便于系统同识别,可用consul-template命令

posted @ 2020-12-02 19:02  wqhao  阅读(421)  评论(0编辑  收藏  举报