使用consul实现服务注册和服务发现之consul-template

本文以Nginx为例来说明,使用nginx做负载均衡。
服务被调整后,负载均衡器要想动态重新分配负载,就需要修改相应的配置文件,consul-template就是解决这个问题的应用,通过监听consul的注册信息,来自动完成负载均衡相应的配置更新。
下载安装consul-template
consul-templated发布页下载最新版,以consul-template_0.19.0为例

# wget https://releases.hashicorp.com/consul-template/0.19.0/consul-template_0.19.0_freebsd_amd64.zip
# unzip consul-template_0.19.0_freebsd_amd64.zip -d /usr/local/consul-template

将consul-template加入到环境变量,编辑/etc/profile,在文件末尾添加如下一行

export PATH="$PATH:/usr/local/consul-template"

使环境变量立即生效

# source /etc/profile

使用consul-template
consul-template模板内容如下:

{{range services}}
  upstream {{.Name}} {
    least_conn;{{range service .Name}}
    server {{.Address}}:{{.Port}};{{end}}
  }
{{end}}

server {   
    listen 80;    
    proxy_set_header            Host $host;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    {{range services}}
          location {{.Name}} {
            proxy_read_timeout 180;
            proxy_pass http://{{.Name}}/{{.Name}};
          }
    {{end}} 
}

启动consul-template

# consul-template -consul=127.0.0.1:8500 -template="/data/consul-template/tmpl/app.conf:/data/consul-template/conf/app.conf:nginx -s reload"

然后当注册在consul中的服务发生变化时,Nginx相关的配置文件就会自动修改并重新加载配置文件。

36nu 分享编程知识及经验

已有账号?立即登录