Consul-Template+Nginx反向代理动态查询Consul群集信息实现自动化

前言:

一、template概述

1.简介

  • Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件。除了实时查询consul群集信息,也可以更新文件系统上任意数量的指定模板,生成配置文件
  • 更新完成以后,可以选择运行shell命令执行更新操作,重新加载nginx
  • comsul-template可以查询consul中的服务目录、key、key-values等
  • 这种强大的抽象功能和查询语言模板可以使consul-template特别适合动态的创建配置文件
  • 大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向代理信息

二、部署

1.部署template

  • 准备template nginx模板文件
[root@consul consul]# pwd
/root/consul
[root@consul consul]# vim nginx.ctmpl      //定义
upstream http_backend {                           //声明后端服务器池
        {{range service "nginx"}}                      
        server {{.Address}}:{{.Port}};          //分别读取node1节点的地址与端口
        {{end}}
}      //动态加载,开了几个nginx就会加入几个server条目

server {
   listen 1216;         //代理端口
   server_name localhost 192.168.170.147;   //本地监听地址
   access_log /var/log/nginx/csdn.cn-access.log;
   index index.html index.php;       //首页类型
   location / {              //声明代理与跳转的头部信息
   proxy_set_header HOST $host;               
   proxy_set_header HOST X-Real-IP $remote_addr;
   proxy_set_header HOST Client-IP $remote_addr;
   proxy_set_header HOST X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://http_backend;      //跳转的http协议地址为自己定义的名称
  }
}

2.安装nginx服务

  • 编译安装nginx
[root@consul consul]# yum install -y gcc gcc-c++ pcre-devel zlib-devel
[root@consul consul]# cd /opt/
[root@consul opt]# ls       //将准备好的环境包解压
containerd  nginx-1.12.2.tar.gz  rh
[root@consul opt]# tar zxvf nginx-1.12.2.tar.gz 
[root@consul opt]# cd nginx-1.12.2/            //进入目录并手工编译
[root@consul nginx-1.12.2]# ./configure --prefix=/usr/local/nginx
[root@consul nginx-1.12.2]# make && make install
[root@consul nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
 17 http {
 19     include       vhost/*.conf;   //添加包含vhost目录且启动template模板并生成到vhost目录中
  • 这个时候还没有vhost目录,所以需要创建以及日志目录
[root@consul nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost   //指定配置文件的相对路径
[root@consul nginx-1.12.2]# mkdir /var/log/nginx    //日志文件目录
[root@consul ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@consul nginx-1.12.2]# /usr/local/nginx/sbin/nginx  //启动nginx
[root@consul ~]# netstat -ntap|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      60960/nginx: master 

3.配置template

  • 配置并启动template
[root@consul ~]# unzip consul-template_0.19.3_linux_amd64.zip      //将准备好的环境包解压
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: consul-template         
[root@consul ~]# ls
anaconda-ks.cfg  consul           consul-template_0.19.3_linux_amd64.zip  
compose_tomcat   consul-template  initial-setup-ks.cfg     
[root@consul ~]# mv consul-template /usr/bin   //让系统能够识别使用

//启用模板
[root@consul ~]# consul-template -consul-addr 192.168.170.147:8500 \     //指定本地的地址
> -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/csdn.conf:/usr/local/nginx/sbin/nginx -s reload" \   //选择模板路径指定到vhost路径生成新的配置文件并重载服务
> --log-level=info   //指定日志级别

  • 此时已经在监控状态,另外打开一个终端查看生成配置文件
[root@consul ~]# cat /usr/local/nginx/conf/vhost/csdn.conf 
upstream http_backend {
	
        server 192.168.170.148:83;       //生成的两条分别是nginx的两个端口
	
        server 192.168.170.148:84;
	
}

server {
   listen 1216;
   server_name localhost 192.168.170.147;
   access_log /var/log/nginx/csdn.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;
  }
} 

  • 此时可以在界面上查看,如果查看不了可以重载下服务
[root@consul ~]# /usr/local/nginx/sbin/nginx -s reload

在这里插入图片描述

  • 这个访问就是我们后端的容器池,而且是采用轮询的方式访问83,84端口

4.验证

  • 查看日志
[root@node1 ~]# docker ps -a   //这里有之前创建的四个容器
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
a1c939dae7f9        httpd                           "httpd-foreground"       2 hours ago         Up 2 hours          0.0.0.0:89->80/tcp   test04
0cf4d1c1cb00        httpd                           "httpd-foreground"       2 hours ago         Up 2 hours          0.0.0.0:88->80/tcp   test03
ab3899146bed        nginx                           "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:84->80/tcp   test02
24939d0e9f34        nginx                           "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:83->80/tcp   test01
29bcd0151ef7        gliderlabs/registrator:latest   "/bin/registrator -i…"   2 hours ago         Up 2 hours                               registrator

  • 先用docker查看容器test01和test02的日志信息
[root@node1 ~]# docker logs -f test01
192.168.170.147 - - [26/Apr/2020:10:37:14 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
192.168.170.147 - - [26/Apr/2020:10:37:33 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
。。省略部分内容
[root@node1 ~]# docker logs -f test02
192.168.170.147 - - [26/Apr/2020:10:37:45 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
192.168.170.147 - - [26/Apr/2020:10:37:46 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
。。。省略部分内容
  • 可以看到,都是由代理服务器访问的,说明实现了负载均衡
  • 这里注意,node1的服务器防火墙不能关闭
  • 增加一个nginx容器节点
[root@node1 ~]# docker run -itd -p85:80 --name test05 nginx
429157a2f1e3322e76829f876e0bfba4a87cf409c41bf9330fc70a320a199971
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
429157a2f1e3        nginx                           "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:85->80/tcp   test05

  • 在创建成功的同时,实施监控也更新了信息
    在这里插入图片描述
  • 同时查看配置文件,新生成了85端口
[root@consul conf]# cat /usr/local/nginx/conf/vhost/csdn.conf 
upstream http_backend {
	
        server 192.168.170.148:83;
	
        server 192.168.170.148:84;
	
        server 192.168.170.148:85;
	
}

server {
   listen 1216;
   server_name localhost 192.168.170.147;
   access_log /var/log/nginx/csdn.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;
  }
} 

  • 这个时候查看新生成的容器日志,里面暂时没有访问信息
[root@node1 ~]# docker logs -f test05
^C
  • 多此访问1216端口后,再查看日志信息
    在这里插入图片描述
[root@node1 ~]# docker logs -f test05
192.168.170.147 - - [26/Apr/2020:10:48:54 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
192.168.170.147 - - [26/Apr/2020:10:49:02 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
192.168.170.147 - - [26/Apr/2020:10:49:04 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" "192.168.170.1"
  • 可以看到,仍然是由代理服务器访问的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值