zoukankan      html  css  js  c++  java
  • 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
    
    打开浏览器

    http://172.16.1.218:8010

    设置 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 导读

  • 相关阅读:
    572.Subtree of Another Tree
    35.Search Insert Position(二分查找)
    198.House Robber(dp)
    724.Find Pivot Index
    705.Design HashSet
    求连通分量(深搜)
    删边(normal)
    叠放箱子问题
    数字游戏
    火车票
  • 原文地址:https://www.cnblogs.com/viter/p/11061145.html
Copyright © 2011-2022 走看看