10、Nginx-四层负载均衡
版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin
1.Nginx四层负载均衡基本概述
1.什么是四层负载均衡
所谓四层就是基于IP+端口的负载均衡,它通过用户请求的端口来决定将请求转发至哪台服务器。
就是通过三层的IP地址并加上四层的端口号,来决定哪些流量需要做负载均衡。对需要负载均衡的流量进行NAT转换,然后转发至后端服务器节点,并记录这个TCP或者UDP的流量是由哪台后端服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
2.四层负载均衡应用场景
场景一:端口转发
首先http是最常用的一种协议,但是还有很多非http的应用,如mysql、redis、ssh等,只能用四层代理
场景二:四层负载均衡+七层负载均衡,实现大规模集群架构。
其次七层代理需要CPU运输,所以单台机器很难做到很高的处理能力,因此需要在七层负载均衡前面再加四层负载均衡。(提高网站的访问效率,并保证了七层负载均衡的高可用性)
2.Nginx四层负载均衡TCP配置
Nginx
四层代理仅能存在于main
段
stream {
upstream ssh_proxy {
hash $remote_addr consistent;
server 192.168.56.103:22;
}
upstream mysql_proxy {
hash $remote_addr consistent;
server 192.168.56.103:3306;
}
server {
listen 6666;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass ssh_proxy;
}
server {
listen 5555;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass mysql_proxy;
}
}
3.Nginx四层负载均衡+七层负载均衡场景配置
配置文件仅能写在main层,和http同级。因是四层代理,解析不到servername所以不需要配置域名。七层负载安装常规配置即可,这里仅展示四层负载的配置
stream {
upstream lb {
server 10.0.0.6;
server 10.0.0.5;
}
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "upstream_bytes_received" "upstream_connect_time"';
server {
listen 80;
proxy_pass lb;
access_log /var/log/nginxproxy.log proxy;
}
}
4.Nginx四层负载+七层负载透传真实IP
四层负载配置
stream {
upstream lb {
server 10.0.0.6;
server 10.0.0.5;
}
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "upstream_bytes_received" "upstream_connect_time"';
server {
listen 80;
proxy_pass lb;
proxy_protocol on;###加上这个参数,开启协议
access_log /var/log/nginxproxy.log proxy;
}
}
七层负载配置
###仅需要在第一级七层代理上配置即可
server {
listen 80 proxy_protocol;###添加这个参数,支持协议,否则仅在四层上配置会报400错误
server_name ip.com;
set_real_ip_from 172.16.1.0/24;###添加七层负载均衡前面经过的代理IP地址
real_ip_header proxy_protocol;###将proxy_protocol获取的IP地址复制给$remote_addr
location / {
proxy_pass http://10.0.0.6;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}
}
本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16137269.html