网易首页 > 网易号 > 正文 申请入驻

Nginx如何实现四层负载均衡?

0
分享至

负载均衡可以分为静态负载均衡和动态负载均衡,接下来,我们就一起来分析下Nginx如何实现四层静态负载均衡和四层动态负载均衡。

静态负载均衡

Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块,默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置参数启用,如下所示。

./configure --prefix=/usr/local/nginx-1.17.2 --with-openssl=/usr/local/src/openssl-1.0.2s --with-pcre=/usr/local/src/pcre-8.43 --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-cc-opt=-O3 --with-stream --with-http_ssl_module

配置四层负载均衡

配置HTTP负载均衡时,都是配置在http指令下,配置四层负载均衡,则是在stream指令下,结构如下所示.

stream { upstream mysql_backend { ...... } server { ...... } }

配置upstream

upstream mysql_backend { server 192.168.175.201:3306 max_fails=2 fail_timeout=10s weight=1; server 192.168.175.202:3306 max_fails=2 fail_timeout=10s weight=1; least_conn; }

配置server

server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp; listen 3307; #失败重试 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m; #限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器 proxy_pass mysql_backend; }

配置完之后,就可以连接Nginx的3307端口,访问数据库了。

Nginx完整配置

完整的Nginx配置如下:

user hadoop hadoop; worker_processes auto; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } stream { upstream mysql_backend { server 192.168.175.100:3306 max_fails=2 fail_timeout=10s weight=1; least_conn; } server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp; listen 3307; #失败重试 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m; #限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器 proxy_pass mysql_backend; } }

动态负载均衡

配置Nginx四层静态负载均衡后,重启Nginx时,Worker进程一直不退出,会报错,如下所示。

nginx: worker process is shutting down;

这是因为Worker进程维持的长连接一直在使用,所以无法退出,只能杀掉进程。可以使用Nginx的四层动态负载均衡解决这个问题。

使用Nginx的四层动态负载均衡有两种方案:使用商业版的Nginx和使用开源的nginx-stream-upsync-module模块。注意:四层动态负载均衡可以使用nginx-stream-upsync-module模块,七层动态负载均衡可以使用nginx-upsync-module模块。

使用如下命令为Nginx添加nginx-stream-upsync-module模块和nginx-upsync-module模块,此时,Nginx会同时支持四层动态负载均衡和HTTP七层动态负载均衡。

git clone https://github.com/xiaokai-wang/nginx-stream-upsync-module.git git clone https://github.com/weibocom/nginx-upsync-module.git git clone https://github.com/CallMeFoxie/nginx-upsync.git cp -r nginx-stream-upsync-module/* nginx-upsync/nginx-stream-upsync-module/ cp -r nginx-upsync-module/* nginx-upsync/nginx-upsync-module/ ./configure --prefix=/usr/local/nginx-1.17.2 --with-openssl=/usr/local/src/openssl-1.0.2s --with-pcre=/usr/local/src/pcre-8.43 --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-cc-opt=-O3 --with-stream --add-module=/usr/local/src/nginx-upsync --with-http_ssl_module

配置四层负载均衡

配置HTTP负载均衡时,都是配置在http指令下,配置四层负载均衡,则是在stream指令下,结构如下所示,

stream { upstream mysql_backend { ...... } server { ...... } }

配置upstream

upstream mysql_backend { server 127.0.0.1:1111; #占位server upsync 192.168.175.100:8500/v1/kv/upstreams/mysql_backend upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off; upsync_dump_path /usr/local/nginx-1.17.2/conf/mysql_backend.conf; }

upsync指令指定从consul哪个路径拉取上游服务器配置;

upsync_timeout配置从consul拉取上游服务器配置的超时时间;

upsync_interval配置从consul拉取上游服务器配置的间隔时间;

upsync_type指定使用consul配置服务器;

strong_dependency配置nginx在启动时是否强制依赖配置服务器,如果配置为on,则拉取配置失败时Nginx启动同样失败。

upsync_dump_path指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出现问题,本地还有一个备份

配置server

server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp; listen 3307; #失败重试 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m; #限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器 proxy_pass mysql_backend; }

从Consul添加上游服务器

curl -X PUT -d "{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.201:3306 curl -X PUT -d "{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.202:3306

从Consul删除上游服务器

curl -X DELETE http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.202:3306

配置upstream_show

server { listen 13307; upstream_show; }

配置upstream_show指令后,可以通过curl http://192.168.175.100:13307/upstream_show查看当前动态负载均衡上游服务器列表。

Nginx完整配置

Nginx的完整配置如下:

user hadoop hadoop; worker_processes auto; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } stream { upstream mysql_backend { server 127.0.0.1:1111; #占位server upsync 192.168.175.100:8500/v1/kv/upstreams/mysql_backend upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off; upsync_dump_path /usr/local/nginx-1.17.2/conf/mysql_backend.conf; } server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp; listen 3307; #失败重试 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m; #限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器 proxy_pass mysql_backend; } server { listen 13307; upstream_show; } }

原文来自:https://server.51cto.com/sOS-625471.htm
本文地址:https://www.linuxprobe.com/nginx-upstream.html
Linux命令大全:https://www.linuxcool.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
是否对姆巴佩失望?恩里克:如果有人要为出局负责,那就是我

是否对姆巴佩失望?恩里克:如果有人要为出局负责,那就是我

懂球帝
2024-05-08 07:19:13
狂轰30脚颗粒无收!马尔基尼奥斯谈欧冠出局:我们的效率太低

狂轰30脚颗粒无收!马尔基尼奥斯谈欧冠出局:我们的效率太低

直播吧
2024-05-08 09:38:19
穿“露骨”服参赛的冯竟爽火了,颁奖台成焦点,皮肤白皙眼神放电

穿“露骨”服参赛的冯竟爽火了,颁奖台成焦点,皮肤白皙眼神放电

尘语者
2024-05-06 12:28:48
生死战!杨鸣:李晓旭和郭艾伦今晚都不会出战

生死战!杨鸣:李晓旭和郭艾伦今晚都不会出战

直播吧
2024-05-08 11:21:37
地方财政的紧张程度,可能远超你的想象,我们是真没钱了

地方财政的紧张程度,可能远超你的想象,我们是真没钱了

三狗讲汪
2024-05-08 03:36:06
突发!确定赛季报销!只剩6人轮换,还能创造奇迹吗?

突发!确定赛季报销!只剩6人轮换,还能创造奇迹吗?

左右为篮
2024-05-08 13:17:03
战局开始扭转,乌克兰成功收复失地!

战局开始扭转,乌克兰成功收复失地!

凡事一定有办法13119
2024-05-08 11:45:18
没想到老年人的瓜这么多!网友的评论太炸裂,我小脑都萎缩了

没想到老年人的瓜这么多!网友的评论太炸裂,我小脑都萎缩了

夢婷
2024-01-05 12:09:08
NBA最新消息!克莱3年9800万加盟魔术,将联手班凯罗征战新赛季

NBA最新消息!克莱3年9800万加盟魔术,将联手班凯罗征战新赛季

祝晓塬
2024-05-08 10:48:11
中法达成多项协议,冯德莱恩却颗粒无收,中方临走前留下三个忠告

中法达成多项协议,冯德莱恩却颗粒无收,中方临走前留下三个忠告

张贺在埃及
2024-05-08 10:56:14
突破性发现:年轻小鼠血液分子可显著延长寿命,最高“130岁”!

突破性发现:年轻小鼠血液分子可显著延长寿命,最高“130岁”!

徐德文科学频道
2024-05-07 12:05:02
河南郑州,一女子买了晚上的航班去深圳,她本想用空闲时间做个按摩

河南郑州,一女子买了晚上的航班去深圳,她本想用空闲时间做个按摩

今日搞笑分享
2024-05-08 07:30:18
数学家丘成桐:中国数学水平尚不及美国1940年代!数学是物理学和一切工程理论的基础

数学家丘成桐:中国数学水平尚不及美国1940年代!数学是物理学和一切工程理论的基础

和讯网
2024-05-07 14:13:03
福建3名女警花被两名男子掳走,救回时被折磨得精神失常

福建3名女警花被两名男子掳走,救回时被折磨得精神失常

莉雅细细谈
2024-01-08 20:37:20
笑死人!高亚麟塌房,每次给小三转2-3万,小三评论区沦陷太搞笑

笑死人!高亚麟塌房,每次给小三转2-3万,小三评论区沦陷太搞笑

汉史趣闻
2024-05-08 10:40:31
感谢中国的雪中送炭!果断拒绝日德先进技术,2200亿大单交给我国

感谢中国的雪中送炭!果断拒绝日德先进技术,2200亿大单交给我国

今日搞笑分享
2024-05-07 20:45:55
广东:任副局长的00后女子照片流出,两细节不寻常,当地霸气回应

广东:任副局长的00后女子照片流出,两细节不寻常,当地霸气回应

求实者
2024-05-08 11:29:40
布丽吉特:当第一夫人6年,整容扮嫩没正常生活,只为帮扶马克龙

布丽吉特:当第一夫人6年,整容扮嫩没正常生活,只为帮扶马克龙

缘缘人生观
2024-03-11 14:41:00
100%签约!广东宏远老板亲自招募!今夏第一笔“史诗级”补强啊!

100%签约!广东宏远老板亲自招募!今夏第一笔“史诗级”补强啊!

绯雨儿
2024-05-08 11:44:29
俄政府集体辞职!普京刚开启新任期,国防部长绍伊古会被撤掉吗?

俄政府集体辞职!普京刚开启新任期,国防部长绍伊古会被撤掉吗?

看度时政观望
2024-05-08 10:50:58
2024-05-08 13:34:44
孙有匪
孙有匪
科技
1595文章数 2009关注度
往期回顾 全部

科技要闻

M4芯片直接让iPad Pro秒杀了所有AI PC!

头条要闻

TikTok和母公司字节跳动"出手":起诉美政府禁令违宪

头条要闻

TikTok和母公司字节跳动"出手":起诉美政府禁令违宪

体育要闻

没戈贝尔没问题 森林狼的防守强到离谱

娱乐要闻

玄彬为孙艺珍拍吃饭照片 甜蜜溢出屏幕

财经要闻

金徽酒业绩未达标!管理层薪酬却翻倍

汽车要闻

绝不被驯服 福特烈马是台纯粹的越野玩具!

态度原创

本地
数码
艺术
公开课
军事航空

本地新闻

畅游中国 幸福生活

数码要闻

涨价还砍配置!新款iPad Pro取消后置双摄 仅有广角主摄

艺术要闻

造科幻之物于园林 “天工开悟——夏航雕塑展”于南池子美术馆呈现

公开课

父亲年龄越大孩子越不聪明?

军事要闻

中法关于中东局势的联合声明

无障碍浏览 进入关怀版