Nginx四层负载均衡
精选
原创
©著作权归作者所有:来自51CTO博客作者哭泣的馒头的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、四层负载均衡原理
Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的服务器上,如图当访问10.0.0.5的5555端口就会跳转至web服务器172.1.16.7的
22号端口,当访问10.0.0.5的6666端口就会转发到mysql服务器的3306端口,高效的保护了内网的安全。
为什么企业不再使用lvs而选择使用Nginx做负载
1.Nginx既支持四层又支持七层
2.很多企业使用云平台,但是云平台网络环境不支持lvs
3.都是用Nginx方便统一管理
二、Nginx四层负载均衡配置
Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块,默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时
,添加--with-stream配置参数启用
stream 模块和 http 模块是一同等级;做四层代理时需要添加上这个模块
1、配置stream
stream {
upstream mysql_backend {
......
}
server {
......
}
}
2、配置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;
}
3、配置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;
}
4、配置4层代理示例
stream {
upstream mytest1 {
server 192.168.0.100:80;
server 192.168.0.100:81;
}
server {
listen 192.168.0.108:80;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass mytest1;
}
upstream mytest2 {
server 192.168.0.100:3000;
server 192.168.0.100:3001;
}
server {
listen 192.168.0.108:8080;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass mytest2;
}
}
三、抄录
[root@lb02 ~]# vim /etc/nginx/stream.d/8001_22.conf
stream {
upstream web02_ssh {
server 172.16.1.8:22;
}
server {
listen 8001;
proxy_pass web02_ssh;
proxy_timeout 60s;
proxy_connect_timeout 30s;
}
upstream db01_mysql {
server 172.16.1.51:3306;
}
server {
listen 7777;
proxy_pass db01_mysql;
proxy_timeout 60s;
proxy_connect_timeout 30s;
}
upstream db01_redis {
server 172.16.1.51:6379;
}
server {
listen 2022;
proxy_pass db01_redis;
proxy_timeout 60s;
proxy_connect_timeout 30s;
}
}