Consul-template+nginx实现自动负载均衡
前言
consul-template 是 Consul 的一个守护程序,使用 consul-template 可以方便快速的实现对 Consul Key/Value 存储系统的访问,可以从 KV 系统中读取数据、监视变动、同步本地文件;还可以在执行模板更新的同时,执行本地系统命令,比如常见的就是在同步数据到本地模板文件后,生成 Nginx 配置文件,并执行 nginx -s reload 命令,使 Nginx 重新加载配置文件。
consul-template 的特点
- 智能发现:一旦开始运行 consul-template ,consul-template 将会自动的发现 Consul 中的 Key/Value 变更,并自动更新到本地模板文件
- 重复过滤:consul-template 内部可以跨实例对数据进行重复筛选,多个 consul-template 实例进行选举,确定只有一个 consul-template 执行 KV 查询,然后将结果同步到其它 consul-template 实例,在命令行中使用 -dedup 标记或者在配置文件中配置“deduplicate” 来启用重复过滤功能
- 快速使用:支持命令行和配置文件,有多种方法可以运行Consul Template,但最常见的模式是将Consul Template作为系统服务运行。
- Dry Mode:在Dry模式,Consul-Template会将结果呈现在STDOUT,操作员可以检查输出是否正常,以决定更换模板是否安全。
参考文档:
https://www.google.com
https://github.com/hashicorp/consul-template
https://www.consul.io
https://www.hi-linux.com/posts/36431.html
Centos7.0 安装 nginx
执行以下命令
// 添加源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
// 执行安装
yum install -y nginx
// 修改 nginx 默认端口为 8010
vi /etc/nginx/conf.d/default.conf
// 加入开机启动
systemctl enable nginx.service
// 启动 nginx
systemctl start nginx.service
打开浏览器

设置 Consul-template 的生成 nginx 配置文件的目录
创建目录
mkdir -p /etc/nginx/conf.d/consul
编辑 nginx.conf
编辑 nginx.conf 文件,将上面的目录 /etc/nginx/conf.d/consul 作为配置文件目录导入到 nginx 中
vi /etc/nginx/nginx.conf
// 将下面这句代码加入到nginx倒数第二行
include /etc/nginx/consul/*.conf
编辑好的 nginx.conf 文件

安装 consul-template
因为 consul-template 只有一个二进制包,所以其安装过程非常的简单;首先是下载二进制包
wget https://releases.hashicorp.com/consul-template/0.20.0/consul-template_0.20.0_linux_amd64.tgz
解压到当前目录
tar -zxf consul-template_0.20.0_linux_amd64.tgz
移动到 consul 相同目录下
mkdir /usr/local/bin/consul-template
mv consul-template /usr/local/bin/consul-template
设置环境变量,输入命令:vi /etc/profile
// 将这里的代码添加到 profile 文件末尾
export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template
export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME
// 执行命令使环境变量生效
source /etc/profile
将模板文件存入 KV系统
为了获得变更自动通知,我们呢需要将 consul-template 模板文件添加到 Consul 的 Key/Value 存储系统中
从控制台存入

代码格式选择 HCL,会自动高亮喔。关于 consul-template 的语法,请参考:https://github.com/hashicorp/consul-template,为了方便,我直接复制了官方的 examples/nginx.md 文件内容
在 consul-template 本地建立 tpl 文件
回到 consul-template 服务器上的目录 /usr/local/bin/consul-template ,创建一个 find_adress.tpl 文件内容
// 创建文件
vi find_adress.tpl
// 输入以下内容
{{ key "hashicorp/street_address" }}
// 保存退出
根据 find_adress.tpl 获得模板内容
// 执行命令
consul-template --template "find_address.tpl:hashicorp_address.tpl" -once
好了,准备工作进行到这里,已基本结束;经过这么长时间的命令执行,相信很多同学已经把网页关闭了,但是没办法,这这些事情还是得一步一步的来。
启动 consul-template
终于可以启动了 consul-template 了,激动人心哪,consul-template 提供两种启动方式,命令行参数/加载配置文件 方式启动,就便利性来说,还是推荐“加载配置文件”方式启动,一次配置,终身有效嘛。
命令行参数启动方式
consul-template --consul-addr 172.16.1.218:8500 --template "hashicorp_address.tpl:/etc/nginx/consul/vhost.conf:/usr/sbin/nginx -s reload" --log-level=info
上面的代码参数这里做简单的解释
- --consul-addr:指定 Consul 代理服务器的地址,默认 127.0.0.1:8500
- --template :指定模板,这里有3个值,每个值以冒号(:)进行分隔,首先是利用 hashicorp_address.tpl 生成 /etc/nginx/consul/vhost.conf 配置文件,然后马上执行命令 /usr/sbin/nginx -s reload 重新加载 nginx 配置
- --log-level:日志输出级别
查看生成的 vhost.conf 文件

加载配置文件启动方式
编写 hashicorp 的 nginx 配置文件
wait {
min = "3s"
max = "9s"
}
syslog {
enabled = true
facility = "LOCAL5"
}
consul {
address = "172.16.1.218:8500"
}
template {
source = "hashicorp_address.tpl"
destination = "/etc/nginx/consul/vhost.conf"
command = "service nginx reload"
}
命令行参数和配置文件中的参数名称是一致的,配置文件编写完成,以加载配置文件形式启动 consul-template
consul-template -config "nginx.hcl" --log-level=info

通过上图看到,consul-template 启动后即刻进入侦听状态,在侦听 Consul 服务变动,如果有服务注册进来,马上就会更新 nginx 文件;下面,我们尝试启动一个 Ron.Consul.dll:12008 的服务,该服务将会注册到 Consul,让我们来看看在不重新启动 consul-template 的情况下,是否会自动更新 vhost.conf 文件
启动 12008 服务注册

12008注册为 home 节点的服务已经启动了,下面查看 /etc/nginx/consul/vhost.conf 配置文件

上图红框处内容就是自动更新的配置文件
通过访问 nginx 访问服务
还记得最开始的时候,我们设置 nginx 的默认侦听端口为 8010 吗;现在,我们在浏览器中打开下面的地址
http://172.16.1.218:8010/home/add/10/20

得到返回值:30,表示本次搭建 consul-template+nginx 成功!
结束语
写了这么长时间的博客,这篇文章应该是输入命令最多的一篇文章了,这也是和 Windows 下编程的最大的不同,很有快感,希望大家也乐在其中。
.NETCore 集成 Consul 导读
- 1、Consul初探-在深交之前先认识
- 2、Consul初探-从安装到运行
- 3、Consul初探-服务注册和发现
- 4、Consul初探-集成ocelot
- 5、Consul初探-Consul-template+nginx实现自动负载均衡
Consul-template+nginx实现自动负载均衡的更多相关文章
- 基于Consul+Upsync+Nginx实现动态负载均衡
基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...
- 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡
一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...
- Consul+upsync+Nginx实现动态负载均衡 摘自https://blog.csdn.net/qq_29247945/article/details/80787014
传统感念:每次修改完nginx配置文件,要重启nginx 动态感念:每次修改完nginx配置信息,不需要重启,nginx实时读取配置信息. Nginx: 反向代理和负载均衡 Consul:是用go编写 ...
- Consul+upsync+Nginx实现动态负载均衡
上一篇文章 <C# HttpClient 使用 Consul 发现服务> 解决了内部服务之间的调用问题, 对外提供网关服务还没有解决, 最后我选择了 nginx-upsync-module ...
- 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...
- 观nginx与lvs负载均衡的较量
在技术工作者中,常用到的就是lvs负载均衡和Nginx负载均衡了.这两者也是比较普及的.那么,根据不同的需求,两者存在着不同的优势.具体选择哪一个,还要看您的要求了.那么我们在此为大家分享一篇文章,对 ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- Nginx+Tomcat+Memcached负载均衡集群服务搭建
操作系统:CentOS6.5 本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...
- windows下利用nginx 做IIS负载均衡
如果网站流量变大,就想加服务器分担压力,当然就要用到负载均衡,在windows 2003有自带的网络负载均衡,但配置还是挺麻烦的虽然有轮训和iphash的效果,但效果不算好. nginx小巧,下载不到 ...
随机推荐
- 基于Docker快速搭建ELK【华为云技术分享】
[摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l 获取ES镜像:docker pull ...
- 基于netty4.x开发时间服务器
在写代码之前 先了解下Reactor模型: Reactor单线程模型就是指所有的IO操作都在同一个NIO线程上面完成的,也就是IO处理线程是单线程的.NIO线程的职责是: (1)作为NIO服务端,接收 ...
- #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库
在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 从“职场小白”进阶为“行业大牛”,四个"锦囊"教你破局
在早期软件行业,会存在一个普遍的现象,有些大学的本科,或者研究生毕业,他们去面试工作的时候会发现,面试下来代码能力可能不是太好,这种情况下公司会问你愿不愿意去做测试? 如果说早期软件测试行业还是一个风 ...
- [Mathematics][BJTU][Calculus]Detailed explanations and proofs of the Dirac-Abel Discriminant Methods which deal with the conditional convergence
So, today we will talk about the conditional convergence and two discriminant methods, namely Dirac- ...
- vue axios 总结篇
1.npm --save 和 --save-dev 有什么区别 发布到线上的叫生产环境~,在本地开发的时候叫开发环境,--save就是会打包到线上去并且在线上环境能用到的,比如你npm install ...
- go-channel处理高并发请求
目录 go-channel处理高并发请求 一.Channel简介 二.处理包并发请求 三.测试 1.测试工具 2.测试结果 go-channel处理高并发请求 最近看了一篇文章讲解怎样使用go-cha ...
- 常见的web安全问题总结
we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题.掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web攻击和防御的常用手段 ...
- CCF-CSP题解 201809-4 再卖菜
碎碎念..近视加老花,还以为第二天除了第二家范围在100以内别的都不确定,于是x**算的记搜复杂度超时了.还鼓捣着什么差分区间最长路,虽然有大神用差分区间做出来了,然而自己并没有看懂. 其实就是一个记 ...