一、目标
1、Nginx实现负载均衡
2、consul-template动态维护Nginx里面的server
3、consul-template监控Consul集群
4、每个服务配置Consul做服务发现
5、最终目的,当服务(Consul)Down机时;Nginx中的Server被Consul-template实时删除,并重新加载(Nginx -s reload)配置文件

二、主要用到的工具
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 reload命令进行重新加载

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 reload"  2>&1 >/opt/consul-template.log &

六、验证

方案一验证:

  查看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 reload" -dry

[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值

转载于:https://www.cnblogs.com/MrCandy/p/7152312.html

consul-template + nginx部署高可用负载均衡相关推荐

  1. Keepalived+Nginx实现高可用负载均衡集群

    转载自 https://www.cnblogs.com/mrlapulga/p/6857294.html 一 环境介绍 1.操作系统 CentOS Linux release 7.2.1511 (Co ...

  2. RHCS套件+Nginx实现高可用负载均衡

    红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要. 它提供有如下 ...

  3. Keepalived+nginx实现高可用负载均衡

    图1基本逻辑图 图2 为IP地址分配. 主要用途 IP Haproxy+ningx_master 192.168.236.143 Haproxy+nginx_backup 192.168.236.19 ...

  4. Linux高可用负载均衡 集群理解

    高可用集群HA的实现方式Heartbeat 当然还有其它如Keeplive 负载均衡群集LB的实现方式. (1).硬件LB(比较出名的)F5;BIG-IP系列.Citri;公司的 NetScaler系 ...

  5. 基于linux下的 Pacemaker+Haproxy高可用负载均衡架构

    corosync + pacemaker + crmsh 高可用集群 corosync提供集群的信息层(messaging layer)的功能,传递心跳信息和集群事务信息,多台机器之间通过组播的方式监 ...

  6. Centos7+Nginx+Keepalived实现Apache服务的高可用负载均衡

    Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Kee ...

  7. keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...

    概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...

  8. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  9. LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离

    l  系统环境: RHEL7 l  硬件环境:虚拟机 l  项目描述:为解决网站访问压力大的问题,需要搭建高可用.负载均衡的 web集群. l  架构说明:整个服务架构采用功能分离的方式部署.后端采用 ...

最新文章

  1. C/s模式B/S模式
  2. QT自定义窗口插件在QT Creator的应用
  3. Excel中Sumproduct函数的使用方法
  4. html如何禁止用户缩放,html如何禁止页面缩放
  5. ensp中ap获取不到ip_对比网络模拟器软件,Cisco Packet Tracer、华为eNSP、H3C Cloud Lab...
  6. python六角星绘制_一小时销量破百万,Python告诉你周杰伦的《Mojito》到底有多火!...
  7. NYOJ 453 小珂的烦恼
  8. 【ArcGIS微课1000例】0016:ArcGIS书签操作(添加书签、管理书签)知多少?
  9. 如何搭建socks5和ss节点_redis cluster搭建实践(非常详细,值得收藏)
  10. Spring Security 基于数据库的认证
  11. 罗永浩谈乔纳森离职:乔布斯才是苹果的灵魂设计师
  12. 大数据下的数据分析-Hadoop架构解析[转]
  13. pythonddos防御_一个自动封IP防御DDOS脚本
  14. 基于php旅游网站的设计与实现
  15. 最新Android开发视频教程 Android Studio教程(2017-2018-2019)
  16. 模拟电子技术基础-什么是放大?
  17. ggplot2作图之PcoA
  18. Elasticsearch的ETL利器——Ingest节点
  19. Sipeed MaixSense:Allwinner R329 (一)官方Debian系统--AIPU的基本使用--图像识别
  20. 网络编程中常见错误码总结

热门文章

  1. Java 7并发编程实战手册
  2. linux的套接口和管道
  3. 多线程-010-后台线程
  4. 第 5 章 Stream
  5. Hibernate(2)——Hibernate的实现原理总结和对其模仿的demo
  6. 使用easeui dialog弹出框中使用CKeditor多次加载后无法编辑问题
  7. 如何不停机迁移一个mysql INNODB 数据库?
  8. Fiddler的学习
  9. Unity3D官网教程:Roll-A-Ball实现C#代码,5.X版
  10. 2017年4月25日(日志库glog)