Keepalived+Nginx反向代理检测集群节点状态企业实战

简介:

转载于老男孩教育

成功绝非偶然,而是正确选择和持续努力后的必然! ------老男孩


作者简介:

老男孩,北京老男孩IT教育创始人,51CTO金牌讲师及长期战略合作专家,大规模网站集群实战运维架构专家及教学培训专家,国内IT教育实战心理学运维思想体系创始人,著有《跟老男孩学习Linux运维:Web集群实战》一书,影响屌丝无数。


正文开始:

Keepalived+Nginx反向代理检测集群节点状态企业实战

利用第三方Nginx插件监控代理后端节点的服务器

       淘宝技术团队开发了一个TengineNginx的分支)模块nginx_upstream_check_module,用于提供主动式后端服务器健康检查。通过它可以检测后端realserver的健康状态,如果后端realserver不可用,则所有的请求就不会转发到该节点上。

       Tengine原生支持这个模块,而Nginx则需要通过打补丁的方式将该模块添加到Nginx中。补丁下载地址:https://github.com/yaoweibin/nginx_upstream_check_module。下面介绍一下如何使用这个模块。

1)安装nginx_upstream_check_module模块。

# 系统已经安装了nginx-1.6.3软件

[root@lb01 ~]# /application/nginx/sbin/nginx -V

nginx version: nginx/1.6.3

[root@lb01 ~]# cd /home/oldboy/tools/

# 下载补丁包

[root@lb01 tools]# wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

[root@lb01 tools]# unzip master

# 因为是对源程序打补丁,所以还需要nginx软件包

[root@lb01 tools]# cd nginx-1.6.3

[root@lb01 nginx-1.6.3]# patch -p1 <../nginx_upstream_check_module-master/check_1.5.12+.patch

# 编译参数要和以前一致,最后加上--add-module=../nginx_upstream_check_module-master/

[root@lb01 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3--user=nginx --group=nginx --with-http_ssl_module--with-http_stub_status_module --add-module=../nginx_upstream_check_module-master/

[root@lb01 nginx-1.6.3]# make

# 如果是新装的nginx则继续执行下面make install一步,如果给已经安装的nginx系统打监控补丁就不用执行make install了,本文忽略执行make install

# make的作用就是重新生成Nginx二进制启动命令而已。

# 操作前备份

[root@lb01 nginx-1.6.3]# mv/application/nginx/sbin/nginx{,.ori} 

# 将打过补丁的nginx二进制程序复制到/application/nginx/sbin/目录下

[root@lb01 nginx-1.6.3]# cp ./objs/nginx /application/nginx/sbin/

# 检查是否正常

[root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -t 

nginx: the configuration file /application/nginx-1.6.3/conf/nginx.confsyntax is ok

nginx: configuration file /application/nginx-1.6.3/conf/nginx.conftest is successful

[root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -V

nginx version: nginx/1.6.3

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)

TLS SNI support enabled

configure arguments: --prefix=/application/nginx-1.6.3 --user=nginx--group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx_upstream_check_module-master/

2)配置Nginx健康检查,如下:

[root@lb01 nginx-1.6.3]# vi /application/nginx/conf/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
worker_processes   1 ;
events {
     worker_connections   1024 ;
}
http {
     include       mime.types;
     default_type  application / octet - stream;
     sendfile        on;
     keepalive_timeout   65 ;
  
upstream static_pools {
     server  10.0 . 0.9 : 80weight = 1 ;
     server  10.0 . 0.10 : 80weight = 1 ;
     check interval = 3000  rise = 2  fall = 5  timeout = 1000  type = http;


    #<== interval=3000表示检查节点间隔3秒,fall=5表示当检测节点连续5次宕机后,摘除节点,rise=2表示节点恢复后检测两次成功(rise)方加入集群,超时时间为1秒,检查的协议是http。,这点有点模仿haproxy健康检查的意味。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
}
upstream default_pools {
     server  10.0 . 0.11 : 80weight = 1 ;
}
     server {
         listen        80 ;
         server_name   www.etiantian.org;
         location  /  {
             root   html;
             index index.html index.htm;
             proxy_pass  http: / / default_pools;
             includeproxy.conf;
         }
         location ~. * .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
             proxy_pass  http: / / static_pools;
             includeproxy.conf;
          }
         location  / status {
             check_status;
             access_log off;
         }
     }
}


3)重启Nginx负载

[root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -s stop

[root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx

#注意此处必须重启Nginx,不能重新加载。

4)健康检查参数说明

# check interval=3000 rise=2 fall=5 timeout=1000 type=http;

上面配置的意思是,对static_pools这个负载均衡条目中的所有节点,每隔3秒检测一次,请求2次正常则标记realserver状态为up,如果检测5次都失败,则标记realserver的状态为down,超时时间为1秒,检查的协议是http详细用法见官网http://tengine.taobao.org。

相关文章
|
17天前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
23 0
|
2月前
|
应用服务中间件 PHP 开发工具
Nginx解析环境搭建及实战
Nginx解析环境搭建及实战
25 0
|
16天前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
30 2
|
3月前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
86 1
|
1月前
|
负载均衡 应用服务中间件 Linux
|
2月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
2月前
|
监控 安全 应用服务中间件
|
2月前
|
负载均衡 Java 应用服务中间件
|
2月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
59 0
|
3月前
|
应用服务中间件 nginx
4.5.1 Nginx反向代理与系统参数配置conf原理
4.5.1 Nginx反向代理与系统参数配置conf原理