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

一、目标
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值

时间: 2024-10-17 21:40:40

consul-template + nginx部署高可用负载均衡的相关文章

配置nginx+keepalived高可用负载均衡的时候。主从服务器都出现了VIP 阿里云问题

配置nginx+keepalived高可用负载均衡的时候.主从服务器都出现了VIP 出现这问题的场景是在阿里VPS云服务器网络环境中,因为路由交换层禁用了ARP的广播限制,造成KEEPALIVE主备协议无法通过广播的方式进行通信,造成主备两台服务器都强占HAVIP地址,出现同时两台服务器都有VIP地址的情况出现,必须通过配置来指定IP的两台服务器间进行通讯(阿里说明文档中解释只能支持两台使用同一个HAVIP地址),基于以下方法可以的情况下,多备方式用同样的方式也应该可行 ,有需要的兄弟可以测试下

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

一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2.13-7.el7.x86_64nginx-1.10.2-1.el7.x86_64httpd-2.4.6-45.el7.centos.x86_64 二 原理及拓扑图 1.vrrp协议在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接.对于这样的情况,它们之间路由怎样选择?主机如何

Nginx+Keepalived高可用负载均衡

转自 https://www.jianshu.com/p/da26df4f7d60 Keepalived+Nginx实现高可用Web负载均衡 Master 192.168.0.69 nginx.keepalived Centos7.4 backup 192.168.0.70 nginx.keepalived Centos7.4 vip(虚拟IP) 192.168.0.180 192.168.0.181 1.两台都安装nginx,参照安装nginx文档 2. 两台都安装Keepalived yum

LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置(DR模式,一个VIP,多个端口)

一.概述 LVS作用:实现负载均衡 Keepalived作用:监控集群系统中各个服务节点的状态,HA cluster. 配置LVS有两种方式: 1. 通过ipvsadm命令行方式配置 2. 通过Redhat提供的工具piranha来配置LVS 软件下载: ipvsadm下载地址: http://www.linuxvirtualserver.org/software/kernel-2.6/ Keepalived下载地址: http://www.keepalived.org/software/ 安装

nginx + keepalived 高可用负载均衡

虚拟IP:    192.168.2.52 nginx-1:   192.168.2.50 nginx-2:   192.168.2.51 关闭/etc/sysconfig/selinux SELINUX=disabled nginx-1 yum install keepalived vim /etc/keepalived/keepalived.conf--------------------------------------------------- ! Configuration File

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

高可用集群HA的实现方式Heartbeat 当然还有其它如Keeplive 负载均衡群集LB的实现方式. (1).硬件LB(比较出名的)F5;BIG-IP系列.Citri;公司的 NetScaler系列.A10 公司的 AX系列 (2).软件LB 四层:LVS(Linux VirtualServer) 注:国人开发的.七层:Nginx,HAProxy 高可用负载均衡 在配置HA时  服务器的VIP不需要在setup中设置子接口,heartbeat会创建 在配置LB时  LB服务器的VIP 需要在

使用Nginx1.9.9+Keepalived1.2.x搭建高可用负载均衡集群

一 简介以及原理介绍 (1)Nginx概念介绍: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度.京东.新浪.网易.腾讯.淘宝等 (2)Keepalived概念介绍: Keepalived的作用是检测服务器的状态,如果有一台we

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

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友:说到负载均衡,其实在linux下有很多服务可以实现,比如nginx.haproxy.lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Kee

HAProxy高可用负载均衡集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist