在consul基础上搭建compose-temlate服务(consul在上篇博客中有介绍)
compose-template简介
compose-template是一个守护进程,用于实时查询consul集群信息
并且运维人员可以在consul服务器上,定制任意的模板,生成配置文件
compose可以查询consul中的服务目录、key、key-values等
这种强大的抽象功能和查询语言模板使得consul-template特别适合动态的创建配置文件,也就是自动化增加服务
我们在consul服务上安装一个nginx服务,用作负载均衡器,利用consul的服务发现功能和compose-template的动态生成配置文件的功能,就可以实现当我们在后端服务器上增加一个容器服务时,consul能够及时发现,compose-template及时在nginx里生成该服务的地址和端口号放入地址池里面,这样nginx作为代理服务器,就可以调用了
///创建/在consul目录下操作,建立template nginx模板文件
vim /root/consul/nginx-ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 1216;
server_name localhost 192.168.175.148;
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;
}
}
/在consul上安装nginx服务
yum install -y gcc pcre-devel zlib-devel
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd /opt/nginx-1.12.2/
./configure --prefix=/usr/local/nginx
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
include vhost/*.conf; ///添加虚拟机主机的配置文件
default_type application/octet-stream;
//创建虚拟主机的配置文件
[root@promote nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost
[root@promote nginx-1.12.2]# mkdir /var/log/nginx ///创建虚拟主机的日志文件
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
/usr/local/nginx/sbin/nginx
上传consul-template_0.19.3_linux_amd64.zip到/root目录下
[root@promote ~]# unzip consul-template_0.19.3_linux_amd64.zip -d /usr/bin ///解压至/usr/bin目录下
///进入监控状态
consul-template -consul-addr 192.168.175.148:8500 \-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \--log-level=info
利用nginx.ctmpl自动生成nginx虚拟主机的配置文件
[root@promote ~]# ls /usr/local/nginx/conf/vhost/
[root@promote ~]# cat /usr/local/nginx/conf/vhost/kgc.conf
upstream http_backend {
server 192.168.175.152:81;
server 192.168.175.152:82;
server 192.168.175.152:83;
}
server {
listen 1216;
server_name localhost 192.168.175.148;
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;