设为首页 收藏本站
查看: 1314|回复: 0

[经验分享] consul-template + nginx部署高可用负载均衡

[复制链接]

尚未签到

发表于 2017-12-23 12:36:53 | 显示全部楼层 |阅读模式
  一、目标
  1、Nginx实现负载均衡
  2、consul-template动态维护Nginx里面的server
  3、consul-template监控Consul集群
  4、每个服务配置Consul做服务发现

  5、最终目的,当服务(Consul)Down机时;Nginx中的Server被Consul-template实时删除,并重新加载(Nginx -s>  二、主要用到的工具
  1、功能实现:Nginx、 Consul、 Consul-template
  2、配合工具:docker(用来搭建Consul群集 、 提供服务)   
  三、原理
  1、Nginx自身的负载均衡功能
  2、consul-template的Config功能实时监控Consul集群的节点
  3、实时的把consul节点的信息替换到Nginx配置文件、重新加载配置文件
  四、配置步骤
  第一步:搭建consul集群
  第二步:部署服务consul客户端(consul + webServer)使用config指定服务IP & Port
  第三步:部署Nginx
  第四步:搭建consul-template监听consul客户端的config文件
  第五步:consul-template绑定Nginx配置文件
  五、过程
  方案一:
  写在前面:因为要使用多个单独的服务,使用Docker来做隔离
  1、consul服务端集群3个节点
  2、consul客户端(service)2个节点
  3、Nginx + consul-template部署到同一个主机(本机)
  很多Dockers的配置,先不记录。
  ------------------------------------------------------------------------------------
  方案二:
  使用物理机
  192.168.102.134 本机(Windows物理机)
  192.168.102.207 CentOS(本机上的虚拟机)
  192.168.102.234 CentOS(物理机)
  192.168.102.134 作为Leader
  192.168.102.207 作为Client(consul + tomcat)
  192.168.102.234 作为consul-template + nginx服务
  具体配置如下:
  【leader 192.168.102.134】
  因为这个是Windows不适合做服务(主要原因:服务检测check没找到实现办法)
  

consul.exe agent -server -node leader -dc dc1 -data-dir c:\tmp -ui -client 0.0.0.0 -bind=192.168.102.134 -advertise 192.168.102.134 -bootstrap-expect 1  

  【consul client 192.168.102.207】
  1、服务部署:tomcat 8080
  启动一个Tomcat服务(任意内容)作为服务
  2、Config文件,服务检查 check : curl localhost:8080
  

{"service": {"name": "web", "tags": ["fyh"], "port": 8080, "check": {"script": "curl localhost:8080 >/dev/null 2>&1", "interval": "10s"}}}  

  3、启动consul并join到leader下
  

./consul agent -data-dir /opt/consulData -config-dir /opt/consulConfig/ -advertise 192.168.102.207 -join 192.168.102.134  

  【consul-template 192.168.102.234】
  1、Nginx配置
  (1)默认Nginx.conf中增加include ***/test.conf(曲线救国,直接映射到nginx.conf中不生效,include中间文件方法在服务全掉的时候无法reload成功,因为upstream中server为空)
  (2)test.conf内容为空(等待Template写入)

  (3)要求安装nginx正确,支持./nginx -s>  2、Template配置
  (1)Template文件内容(/opt/consulTemplate/test.ctmpl)
  

upstream web {  ip_hash;   
# Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream# least_conn;# least_time;  
{{range service
"web"}}  server {{.Address}}:{{.Port}} fail_timeout
=0;  
{{
end}}  server
127.0.0.1 fail_timeout=0;  keepalive
64;  
}
  
server {   
  listen
80;  server_name ipaddress;
  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_set_header   Host $host;   
  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:
//web;  }   
  
}
  

  (2)启动consul-template
  

nohup ./consul-template -consul 192.168.102.134:8500 -template /opt/consulTemplate/test.ctmpl:/usr/local/nginx/conf/conf.d/test.conf:"/usr/local/nginx/sbin/nginx -s>  

  六、验证
  方案一验证:
  查看template中获取到的service 数量
  停止web服务,consul的Config中配置的check是否能发现并把consul的服务状态置为高危不可用(critical)
  直接kill consul进程,查看service数量
  最终还是查看最上层的服务提供nginx的服务状态
  方案二验证:
  方案二只有一个consul客户端
  验证两个环境搭建后是否可用
  tomcat服务停止时是Consul状态是否为critical,重启tomcat服务后,服务正常
  停止consul客户端查看状态
  其中Consul服务端暂时未搭建集群未进行测试。
  七、附录
[consul服务端]:

  ./consul agent -server -data-dir /tmp/data -ui -client 0.0.0.0 -advertise 192.168.102.134 -bootstrap-expect 1
[consul客户端]:

  nohup ./consul agent -config-dir=/usr/local/config -join 192.168.102.134 -data-dir /data 2>&1 &
[consul-template]:


  ./consul-template -consul 192.168.102.134:8500 -template /usr/local/nginx/conf/myserver.conf.d/test.ctmpl:/usr/local/nginx/conf/nginx.conf:"/usr/local/nginx/sbin/nginx -s>
[Consul查询]:

  http://192.168.102.207:8500/v1/catalog/service/web
  http://192.168.102.207:8500/v1/catalog/nodes
  http://192.168.102.207:8500/v1/kv/key2?flags=42  设置key2=42
  http://192.168.102.207:8500/v1/kv/key2   查询kv值

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-427141-1-1.html 上篇帖子: nginx 隐藏 index.php 和 开启 pathinfo 模式的配置 下篇帖子: nginx如何设置防盗链
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表