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文件,内容如下:
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.go;https://github.com/hashicorp/consul-template/blob/master/dependency/catalog_node.go;https://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/nodes和http://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,重启频率低时还是可以接受的,如果很频繁势必造成一定的影响。
在《构建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.go;https://github.com/hashicorp/consul-template/blob/master/dependency/catalog_node.go;https://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/nodes和http://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,重启频率低时还是可以接受的,如果很频繁势必造成一定的影响。
相关文章推荐
- [转载]微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
- 基于Consul+Registrator+Nginx实现容器服务自动发现的集群框架 推荐
- nginx整合tomcat实现负载均衡/集群(可用版)
- 使用Docker、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架
- Centos 7 Docker、docker-compose、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架
- nginx+keepalived实现高可用小型集群
- Linux高可用(HA)之Nginx+Redis+Tomcat集群实现session保持和共享
- Linux高可用(HA)之Nginx+Redis+Tomcat集群实现session保持和共享
- 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
- Keepalived+Nginx实现高可用负载均衡集群
- Consul+Registrator+Consul-template实现动态修改nginx配置文件
- Keepalived+Nginx实现高可用负载均衡集群
- 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
- Nginx+Keepalived实现Nginx负载均衡及高可用WEB服务器集群
- Centos 7部署docker+nginx+keepalived实现高可用web集群
- keepalived+Nginx实现高可用集群
- keepalived + nginx 实现高可用集群方案
- keepalived + nginx 实现高可用集群方案
- keepalived + nginx 实现高可用集群方案
- Nginx+Tomcat实现负载均衡动静分离集群