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;
    }
}
posted @ 2022-04-12 21:04  kirin(麒麟)  阅读(343)  评论(0编辑  收藏  举报
Δ