Consul-template, Nginx实现Thrift Consul负载均衡

Posted 沙漏洒洒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Consul-template, Nginx实现Thrift Consul负载均衡相关的知识,希望对你有一定的参考价值。

流程

说明 
本例子是进行RPC的负载均衡,RPC是tcp协议,所以nginx要配置tcp模块,支持tcp负载均衡。

  1. Consul集群 
    用于服务注册,注册多个服务实例,对外提供RPC服务。

  2. Consul-template 
    用于实时监测Consul中服务的状态,配合自身一个模板文件,生成Nginx的配置文件。

  3. Nginx 
    使用自身的配置文件和第二步生成的配置文件,进行负载均衡。

Nginx安装

  1. 安装最新版Nginx,保证Nginx版本在1.9.0以上

  2. 1.9.0版本以上才支持TCP转发,据说不是默认安装了该模块,安装完成可以查询一下,如果有--with-stream参数,表示已经支持TCP。如果没有就重新编译增加参数安装。

  1. 我的Nginx安装在/etc/nginx目录下

  2. 安装完成使用nginx -t监测一下是否成功。

Consul-template

本文旨在负载均衡,Consul集群搭建不作介绍。

  1. 下载对应系统版本文件 
    https://releases.hashicorp.com/consul-template/

  2. 解压,并复制到PATH路径下

[silence@centos145 ~]$ tar xzvf consul-template_0.19.4_linux_amd64.tgz

[silence@centos145 ~]$ mv ./consul-template /usr/sbin/consul-template

  1. 找个地方新建个文件夹,并创建三个文件

consul {

auth {

enabled  = false

username = "test"

password = "test"

}

address = "172.20.132.196:8500"

retry {

enabled = true

attempts = 12

backoff = "250ms"

max_backoff = "1m"

}

}

  1. template块配置模板的路径和生成文件的位置,以及生成文件后需要执行的命令。在我们这里我们需要nginx重新加载配置文件,所以设置的命令为nginx -s reload

template {

source = "/etc/nginx/consul-template/template.ctmpl"

destination = "/etc/nginx/consul-template/nginx.conf"

create_dest_dirs = true

command = "/usr/sbin/nginx -s reload"

command_timeout = "30s"

error_on_missing_key = false

perms = 0600

backup = true

left_delimiter  = "{{"

right_delimiter = "}}"

wait {

min = "2s"

max = "10s"

}

}

[root@centos145 consul-template]# cat template.ctmpl

stream {

log_format main '$remote_addr - [$time_local] '

'$status';

access_log /var/log/nginx/tcp_access.log main;

upstream cloudsocket {

{{range service "ad-rpc-device-server"}}server
{{.Address}}:{{.Port}};{{end}}

}

server {

listen 8888;

proxy_pass cloudsocket;

}

}

  1. 启动consul-template consul-template -config=./config.hcl

使用config.hcl配置文件是为了简化命令 consul-template -consul-addr=172.20.132.196:8500 -template=./template.ctmpl:./nginx.conf

  1. 初始的nignx.conf文件为空的,在启动后内容为

[root@centos145 consul-template]# cat nginx.conf

stream {

log_format main '$remote_addr - [$time_local] '

'$status';

access_log /var/log/nginx/tcp_access.log main;

upstream cloudsocket {

server 172.20.139.77:8183;

}

server {

listen 8888;

proxy_pass cloudsocket;

}

}

  1. 在nginx的安装目录的nginx.conf中引入consul-template生成的配置文件 
    include /etc/nginx/consul-template/nginx.conf;

注意生成的配置文件不能喝nginx本身的配置文件中内容重复!!!

  1. 启动一个服务实例,查看生成的nginx.conf文件会发现在upstream cloudsocket{}中会动态增加服务列表,并且随着服务的加入和离开,动态变化。

[root@centos145 consul-template]# cat nginx.conf

stream {

log_format main '$remote_addr - [$time_local] '

'$status';

access_log /var/log/nginx/tcp_access.log main;

upstream cloudsocket {

server 172.20.139.77:8183;

}

server {

listen 8888;

proxy_pass cloudsocket;

}

}

再启动一个,服务列表变成两个了

[root@centos145 consul-template]# cat nginx.conf

stream {

log_format main '$remote_addr - [$time_local] '

'$status';

access_log /var/log/nginx/tcp_access.log main;

upstream cloudsocket {

server 172.20.139.77:8183;server 172.20.139.77:8184;

}

server {

listen 8888;

proxy_pass cloudsocket;

}

}


以上是关于Consul-template, Nginx实现Thrift Consul负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

consul-template + nginx部署高可用负载均衡

微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

Docker Consul容器服务更新与发现

部署Consul建立Docker集群

部署Consul建立Docker集群