Nginx负载均衡(四层)
Nginx 从1.9.0
版本起支持四层负载均衡,从而使得Nginx变得更加强大。目前,四层软件负载均衡器用得比较多的是HaProxy;而Nginx也支持四层负载均衡,一般场景我们使用Nginx一站式解决方案就够了。
静态负载均衡
在默认情况下,ngx_stream_core_module
是没有启用的,需要在安装Nginx时,添加--with-stream配置参数启用。
./configure --prefix=/usr/servers --with-stream
1.stream指令
我们配置HTTP负载均衡时,都是配置在http指令下,而四层负载均衡则是配置在stream指令下。
stream {
upstream backend {
... ...
}
server {
... ...
}
}
2.upstream配置
类似于http upstream配置,配置如下:
upstream backend {
server 192.168.0.10:3306 max_fails=2 fail_timeout=10s weight=1;
server 192.168.0.11:3306 max_fails=2 fail_timeout=10s weight=1;
least_conn;
}
失败重试、惰性健康检查、负载均衡算法的相关配置与HTTP负载均衡配置类似。此处我们配置实现了两个数据库服务器的TCP负载均衡。
3.server配置
server {
#监听端口
listen 3308;
#失败重试
proxy_next_upstream on;
proxy_next_upstream_timeout 0;
proxy_next_upstream_tries 0;
#超时配置
proxy_connect_timeout 1s;
proxy_timeout 1m;
#限速配置
proxy_upload_rate 0;
proxy_download_rate 0;
#上游服务器
proxy_pass backend;
}
配置说明:
①listen
指令指定监听的端口,默认TCP
协议,如果需要UDP
,则可以配置listen 3308 udp;
。
②proxy_next_upstream
*与HTTP负载均衡类似。
③proxy_connect_timeout
配置与上游服务器连接超时时间,默认60s。
④proxy_timeout
配置与客户端或上游服务器连接的两次成功读/写操作的超时时间,如果超时,将自动断开连接,即连接存活时间,通过它可以释放那些不活跃的连接,默认10分钟。
⑤proxy_upload_rate
和proxy_download_rate
分别配置从客户端读数据和从上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速。
接下来就可以连接Nginx的3308端口,访问我们的数据库服务器了。
目前的配置都是静态配置,像数据库连接一般都是使用长连接,如果重启Nginx服务器,则会看到如下Worker进程一直不退出。
Nobody 10268 ……nginx: worker process is shutting down
这是因为Worker维持的长连接一直在使用,所以无法退出,解决办法只能是杀掉该进程。
当然,一般情况下是因为需要动态添加/删除上游服务器,才需要重启Nginx,像HTTP动态负载均衡那样。如果能做到动态负载均衡,则一大部分问题就解决了。
动态负载均衡
todo
内容来源
《亿级流量网站架构核心技术》:负载均衡与反向代理
Last updated