nginx淘宝nginx_upstream_check_module安装
前言
之前已经进行常规的nginx安装,但是nginx是不能把这台realserver剔除upstream的,所以可以安装nginx_upstream_check_module。nginx_upstream_check_module是淘宝提供的主动式后端服务器健康检查的功能的nginx插件,能够检测后⽅realserver的健康状态,不会把请求转到不可以用的服务器上面。
我是基于上一期的nginx安装后继续安装nginx_upstream_check_module插件,如果需要可以查看上一期内容链接如下
NGINX安装
提示:以下是本篇文章正文内容,下面案例可供参考
一、下载
#插件下载
wget http://github.com/yaoweibin/nginx_upstream_check_module
二、安装
#安装解压zip软件
unzip nginx_upstream_check_module-master
#进入nginx压缩包解压后的文件中(解压后未编译的目录)
cd /usr/local/nginx/nginx-1.18.0
#打补丁(注意版本nginx版本和插件版本 )
#patch -p1 < nginx插件目录
patch -p1 < /usr/local/nginx/nginx_upstream_check_module/check_1.20.1+.patch
#编译
./configure --add-module=/usr/local/nginx/nginx_upstream_check_module
注意版本nginx版本和插件版本对应关系如下
如果使用的是nginx-1.2.1或nginx-1.3.0,Nginx的上游轮询模块发生了很大变化。您应该使用名为’check_1.2.1.patch’的补丁。
如果您使用的是nginx-1.2.2+ 或 nginx-1.3.1+,它添加了上游最少连接模块。您需要使用名为’check_1.2.2+.patch’的补丁。
如果您使用的是nginx-1.2.6+ 或 nginx-1.3.9+,它调整了轮询模块。您需要使用名为’check_1.2.6+.patch’的补丁。
如果您使用的是nginx-1.5.12+,您应该使用名为’check_1.5.12+.patch’的补丁。
如果您使用的是nginx-1.7.2+,您应该使用名为’check_1.7.2+.patch’的补丁。
三、配置nginx.conf
#upstream inner下面配置
upstream inner{
----------------------------修改-------------------------------
server 127.0.0.1:8080;
server 127.0.0.1:8081;
---------------------------------------------------------------
##配置健康检测
#check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false][type=tcp|http|ssl_hello|mysql|ajp|fastcgi]
#interval:必要参数,检查请求的间隔时间。
#fall:当检查失败次数超过了fall,这个服务节点就变成down状态。
#rise:当检查成功的次数超过了rise,这个服务节点又会变成up状态。
#timeout:请求超时时间,超过等待时间后,这次检查就算失败。
#default_down:后端服务器的初始状态。默认情况下,检查功能在Nginx启动的时候将会把所有后端节点的状态置为down,检查成功后,在置为up。
#type:这是检查通信的协议类型,默认为http。以上类型是检查功能所支持的所有协议类型。
check interval=2000 rise=3 fall=1 timeout=2000 type=http;
#设置检查的服务可以自定以
check_http_send "HEAD /health/check/status HTTP/1.0\r\n\r\n";
#check_http_send设置,这个设置描述了检查模块在每次检查时,向后端节点发送什么样的信息
check_http_expect_alive http_2xx http_3xx;
}
#添加一个server
server {
listen 81;
server_name localhost;
location /status {
check_status;
access_log off;
}
}
以下是一个完整nginx.conf
#user nobody;
worker_processes 1;
#错误日志地址
error_log /var/log/nginx/error.log warn;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream inner{
server 127.0.0.1:8090;
server 127.0.0.1:8091;
##配置健康检测
#check interval=milliseconds [fall=count] [rise=count][timeout=milliseconds] [default_down=true|false][type=tcp|http|ssl_hello|mysql|ajp|fastcgi]
#interval:必要参数,检查请求的间隔时间。
#fall:当检查失败次数超过了fall,这个服务节点就变成down状态。
#rise:当检查成功的次数超过了rise,这个服务节点又会变成up状态。
#timeout:请求超时时间,超过等待时间后,这次检查就算失败。
#default_down:后端服务器的初始状态。默认情况下,检查功能在Nginx启动的时候将会把所有后端节点的状态置为down,检查成功后,在置为up。
#type:这是检查通信的协议类型,默认为http。以上类型是检查功能所支持的所有协议类型。
check interval=2000 rise=3 fall=1 timeout=2000 type=http;
#设置检查的服务
check_http_send "HEAD /health/check/status HTTP/1.0\r\n\r\n";
#check_http_send设置,这个设置描述了检查模块在每次检查时,向后端节点发送什么样的信息
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name localhost;
#配置服务地址
access_log /var/log/nginx/access.log;
location / {
proxy_pass http://inner;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#开启81端口配置查看状态地址ip:81/status
server {
listen 81;
server_name localhost;
location /status {
check_status;
access_log off;
}
}
}
四、重启nginx
##重新加载配置
systemctl reload nginx.service
可以通过页面localhost:81/status查看。
如果需要对nginx服务进行监控的可以调用一下链接获取对应格式的数据:
localhost:81/status?format=html
localhost:81/status?format=csv
localhost:81/status?format=json
总结
本文列举了作者部署添加nginx_upstream_check_module插件的一个全过程。
如果需要更详细的插件版本说明可以查看git仓库的md,高版本的nginx大部分可以直接使用check_1.20.1+.patch。
如果觉得找组件太麻烦或者需要详细的文档,也可以尝试使用淘宝的Tengine来替代nginx(链接如下:The Tengine Web Server)。
如果有问题或者建议,欢迎在评论区交流!!!