您的位置:首页 > 运维架构 > Nginx

Consul-Template&Nginx实现Consul集群高可用

2018-01-19 23:50 477 查看
前言
在《构建Consul集群》章节中介绍了如何实现consul集群的构建,通过对consul的进一步了解,其并没有提供的对cluster直接操作的client-api,故需要针对Consul集群构建一个统一入口,但这个并不需要我们过多的担心,Consul的小伙伴Consul-Template正是为此而生,通过Nginx+ConsulTemplate能够非常方便的实现,本章将来介绍如何配置应用并验证。

本章概要
1、准备工作;
2、Nginx配置;
3、编写ctmpl模板;
4、启动服务;
5、高可用集群验证;

准备工作
1、环境:
Client节点:WIN10(192.168.6.78);
Server节点:Linux(192.168.3.89);
2、下载consul-template:地址https://releases.hashicorp.com/consul-template/
3、安装nginx1.13.8;
Note:其中nginx和consul-template均会部署在linux中.

Nginx配置
为了将我们的个性化配置与默认配置分离,在nginx.conf中添加如下include
conf.d/*.conf;配置,并调整其默认监听端口为8112,大致如下:



编写ctmpl模板
创建consul.ctmpl文件,内容如下:

upstream consul {
# Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream # ip_hash;
# least_conn;
# least_time;
{{range nodes "@dc2~_agent"}}
server {{.Address }}:{{.Meta.httpport}} max_fails=3 fail_timeout=60 weight=1;
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
}
server {
listen 8111;
server_name localhost;
location / {
client_max_body_size    0;
proxy_connect_timeout 300s;
proxy_send_timeout   900;
proxy_read_timeout   900;
proxy_buffer_size    32k;
proxy_buffers      4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect     off;
proxy_hide_header  Vary;
proxy_set_header   Accept-Encoding '';
proxy_set_header   Host   $host;
proxy_set_header   Referer $http_referer;
proxy_set_header   Cookie $http_cookie;
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_pass          http://consul; }
}

Note:
网上包括官网有一些案例可以参考,但其在获取节点信息时均采用的service方式,其仅仅可以获取到以server模式启动的节点,但实际在应用中,我们需要连接的是非持久化的client节点,故调整为获取Nodes信息;

获取每个节点的端口信息采用{{.Meta.httpport}}方式。官方提供的{{.Port}}并非是http-port属性值,故需要通过自定义元数据来实现
f15b
;

通过"@dc2~_agent"对Nodes进行了一些过滤,如果需要区分是否为server节点,可以自定义一些元数据即可;

具体的语法和参数可以参考如下两个地址:

语法:https://github.com/hashicorp/consul-template;

参数:https://github.com/hashicorp/consul-template/blob/master/dependency/catalog_nodes.gohttps://github.com/hashicorp/consul-template/blob/master/dependency/catalog_node.gohttps://github.com/hashicorp/consul-template/blob/master/dependency/health_service.go

以上具体有哪些参数可用也可以通过/v1/catalog/nodes相关的端口查看;

启动服务
1、首先来看下已经准备好哪些文件:



2、启动Nginx,其安装在/usr/local/nginx-1.13.8目录下:
/usr/local/nginx-1.13.8/sbin/nginx

3、启动Linux下Server(Master)节点:
./consul agent -server -bootstrap-expect 1 -ui -datacenter dc2 -disable-host-node-id -client 0.0.0.0 -bind 192.168.3.89 -data-dir ./data/ -http-port 8501 -node node2 -node-meta httpport:8501

4、启动WIN10下的Client节点:
D:\consul>consul agent -datacenter dc2 -client 0.0.0.0 -ui -data-dir ./data/ -http-port 8500 -bind 192.168.6.78 -join 192.168.3.89 -disable-host-node-id -node node1 -node-meta httpport:8500

5、编写consul-template-start.sh如下,其主要用来启动consul-template:
./consul-template -consul-addr 192.168.3.89:8501 -template ./consul.ctmpl:/usr/local/nginx-1.13.8/conf/conf.d/consul.conf:"/usr/local/nginx-1.13.8/sbin/nginx -s reload"
Note:
-consul-addr:表示其连接监听的数据来源,个人连接可靠稳定的server节点比较好;
-template:指定模板生成conf后放置自定义的Nginx配置目录;

最后进行Nginx的重启操作;

6、此时我们通过http://192.168.3.89:8501/ui/#/dc2/nodeshttp://192.168.6.78:8500/ui/#/dc2/nodes均能够看下如下



高可用集群验证
1、此时至/usr/local/nginx-1.13.8/conf/conf.d/即可看到根据模板生成的conf配置文件:



可以看到两个节点均被加入了负载服务列表;

2、通过浏览器访问http://192.168.3.89:8111/ui/#/dc2/nodes,能够正常获取到各种信息:



3、停止Win下的Client节点,再次查看生成的conf配置文件:



可以看到其仅仅有一个存活状态的Server节点存在,更新成功。

4、再次通过浏览器访问http://192.168.3.89:8111/ui/#/dc2/nodes,节点信息如下:



5、KEY/VALUE部分的验证已经在之前的章节验证,不再说明;

总结

本章节主要介绍了如何通过Nginx+ConsulTemplate实现高可用Consul的配置和验证,其仍然存在一定的不足,需要重新启动Nginx,重启频率低时还是可以接受的,如果很频繁势必造成一定的影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息