[转帖]Nginx 负载均衡 和 健康检查

nginx,负载,均衡,健康检查 · 浏览次数 : 0

小编点评

安装ngx_http_upstream_module模块时,因为模块路径与默认安装路径不一致,导致模块安装失败。 **解决方案:** 1. 检查模块路径是否与默认安装路径一致。 2. 如果模块路径不一致,请修改模块路径。 3. 重新安装ngx_http_upstream_module模块。

正文

https://www.jianshu.com/p/fbb0a81604d9

 

简介

从 nginx 下载, 到模块安装

关于为什么不使用 ngx_http_upstream_module

测试过 ngx_http_upstream_module 这个模块, 在应用稳定的情况下做做负载均衡还可以. 但一旦某一服务出现异常, 异常的发现和服务重启之后的恢复都比较缓慢.

使用版本

[root@chen]# nginx -v
nginx version: nginx/1.14.0

步骤

下载 nginx

从 nginx 官网下载最新稳定版:

wget http://nginx.org/download/nginx-1.14.0.tar.gz

我是下载到本地 /opt/nginx 中

tar -zxvf nginx-1.14.0.tar.gz

目录如下:

└── opt
    └── nginx
        ├── nginx-1.14.0
        └── nginx-1.14.0.tar.gz

下载 nginx-upstream-fair

下载并解压缩, 删除原压缩包

cd nginx-1.14.0
wget https://files.cnblogs.com/files/ztlsir/nginx-upstream-fair-master.zip
unzip nginx-upstream-fair-master.zip
rm nginx-upstream-fair-master.zip

下载 nginx_upstream_check_module

在 nginx-1.14.0 文件夹下

wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
unzip master.zip
rm master.zip

补丁

还是在 nginx-1.14.0 文件夹下

cd nginx_upstream_check_module-master
patch -p1 < ../nginx_upstream_check_module-master/upstream_fair.patch
cd ..
patch -p1 < ./nginx_upstream_check_module-master/check_1.12.1+.patch

注意: 这里不能使用 check_1.14.0+.patch

我在第一次安装的时候使用了 check_1.14.0+.patch , 报错如下:

[root@chen]# patch -p1 < ./nginx_upstream_check_module-master/check_1.14.0+.patch
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -burN nginx-1.14.0.orig/src/http/modules/ngx_http_upstream_hash_module.c nginx-1.14.0/src/http/modules/ngx_http_upstream_hash_module.c
|--- nginx-1.14.0.orig/src/http/modules/ngx_http_upstream_hash_module.c 2018-06-28 21:30:48.891580738 +0000
|+++ nginx-1.14.0/src/http/modules/ngx_http_upstream_hash_module.c  2018-06-28 21:40:41.801180483 +0000

没有仔细研究过 nginx , 但使用 check_1.12.1+.patch的时候, 成功了

[root@chen]# patch -p1 < ./nginx_upstream_check_module-master/check_1.12.1+.patch
patching file src/http/modules/ngx_http_upstream_hash_module.c
Hunk #3 succeeded at 565 (offset 16 lines).
patching file src/http/modules/ngx_http_upstream_ip_hash_module.c
patching file src/http/modules/ngx_http_upstream_least_conn_module.c
patching file src/http/ngx_http_upstream_round_robin.c
patching file src/http/ngx_http_upstream_round_robin.h

配置安装

还是在 nginx-1.14.0 文件夹下

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --add-module=./nginx_upstream_check_module-master --add-module=./nginx-upstream-fair-master

如果模块路径和我的不一致, 请修改路径.

这里如果输出以下内容, 基本上前面的步骤都对了

adding module in ./nginx_upstream_check_module-master
checking for ngx_http_upstream_check_module ... found
 + ngx_http_upstream_check_module was configured
adding module in ./nginx-upstream-fair-master
 + ngx_http_upstream_fair_module was configured

最后

sudo make && sudo make install

最后如果没有 error 提示, 就算安装成功了.

测试

最后我测试了下健康检查的功能

为了方便, 我直接修改的 nginx.conf (默认安装目录在 /usr/local/nginx/conf/nginx.conf )

upstream backend {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "GET /status.html HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx ;
}

server {
        listen       80;
        server_name  localhost;

        location /abc/ {
            proxy_pass http://backend/;
        }
}

搭建了两个 web 服务器, 在8081和8082中轮询.

关掉一个后 nginx 的 error.log 会有日志输出

2018/09/11 19:46:04 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:07 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:10 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:13 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:16 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:16 [error] 18107#0: disable check peer: 127.0.0.1:8081

重新连接后会有:

2018/09/11 19:46:37 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:41 [error] 18107#0: send() failed (111: Connection refused)
2018/09/11 19:46:44 [error] 18107#0: recv() failed (104: Connection reset by peer)
2018/09/11 19:46:51 [error] 18107#0: enable check peer: 127.0.0.1:8081 

与[转帖]Nginx 负载均衡 和 健康检查相似的内容:

[转帖]Nginx 负载均衡 和 健康检查

https://www.jianshu.com/p/fbb0a81604d9 简介 从 nginx 下载, 到模块安装 关于为什么不使用 ngx_http_upstream_module 测试过 ngx_http_upstream_module 这个模块, 在应用稳定的情况下做做负载均衡还可以. 但

[转帖]【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档

本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量。 目录 介绍先决条件配置反向代理配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法配置会话持久性 主动健康监控 怎么运行的先决条件基本配置微调健康检查使用匹配配置块进行微调健康检查 TCP的微调健康检查UD

[转帖]Nginx负载均衡之ip_hash

原理: 通过哈希值和ip进行运算,得出一个哈希字符串,一个值。分发的时候进行判断请求之前是否和哈希绑定过。有的话则优先分配 匹配到对应哈希值的服务器上。 什么是ip_hash? ip_hash是根据用户请求过来的ip,然后映射成hash值,然后分配到一个特定的服务器里面;使用ip_hash这种负载均

[转帖]nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布

https://zhuanlan.zhihu.com/p/464491494 挺好的文章. nginx负载均衡配置 1.负载均衡配置 http { upstream real_server { server 192.168.1.100:8082 weight=1; #轮询服务器和访问权重 serve

[转帖]Nginx性能调优

https://www.jianshu.com/p/024b33d1a1a1/ 本文翻译自Tuning NGINX for Performance Nginx以高性能负载均衡、缓存和web服务器出名,支撑着世界上繁忙网站中的40%。大多数使用场景下,Nginx和Linux系统的默认配置表现较好,但是

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]Nginx四层负载均衡详解

https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 2022-04-14 322举报 简介: Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的

[转帖]解决Nginx负载均衡重复提交问题

https://www.qiansw.com/resolving-nginx-load-balancing-repeated-commit-problems.html 这篇文章的发布时间较早,其中的信息可能已经过时,阅读时请注意甄别。 Nginx [测试环境 Tengine version: Ten

[转帖]Nginx/LVS/HAProxy负载均衡软件的优缺点详解

转载:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应

[转帖]记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到那压力测试的结果时,我也是逗乐了。 现象是,直接访问Golang