文章目录
- 一、四层负载均衡(TCP层)
- 1.1 什么是四层负载均衡
- 1.2 四层负载均衡应用场景
- 1.3 四层负载均衡优缺点
- 1.4 nginx四层与LVS四层的区别
- 二、四层负载均衡场景实践
- 2.1 配置示例
- 2.2 实现TCP协议负载均衡
- 2.3 基于端口映射,实现跳板机
一、四层负载均衡(TCP层)
1.1 什么是四层负载均衡
所谓四层就是基于IP+端口的负载均衡,它通过用户请求的端口来决定将请求转发至哪台后端服务器。就是通过第三层(网络层)的IP地址并加上四层(传输层)的端口号,来决定哪些流量需要做负载均衡。对需要负载均衡的流量进行NAT转换,然后转发至后端服务器节点,并记录这个TCP或者UDP的流量是由哪台后端服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
1.2 四层负载均衡应用场景
- 端口代理。首先http当然是最常用的一种协议,但是还是有很多非http的应用(mysql、redis、ssh),只能用四层代理
- 四层负载均衡+七层负载均衡,实现大规模集群架构。其次七层代理需要CPU运算,所以单台机器很难做到很高的处理能力,因此需要在七层负载均衡前面再加四层负载均衡。(提高网站的访问效率,并保证了七层负载均衡的高可用性。)
1.3 四层负载均衡优缺点
1.四层负载均衡通常用来转发非http应用:如 tcp/80 tcp/443 tcp/3306 tcp/22 udp/53
2.四层负载均衡可以解决七层负载均衡高可用性的问题。( 多个七层负载均衡同时提供服务 )
3.四层负载均衡可以解决七层负载均衡端口数限制问题。(七层负载均衡最多能使用的端口是5w)
4.四层转发效率远比七层代理的效率高的多,但是他只能支持tcp/ip协议,所以他的功能较弱,虽然七层效率不高,但他支持http/https这样的应用层协议。
1.4 nginx四层与LVS四层的区别
二、四层负载均衡场景实践
2.1 配置示例
基于TCP的四层负载均衡配置文件不能配置http层,需要在 /etc/nginx/nginx.conf
文件中配置(负载均衡主机ip :10.0.0.9)
[root@web03 nginx]# cat nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
# 需要包裹在stream中
stream {
upstream backend {
server 172.16.1.51:3306;
server 172.16.1.5:3306;
}
server {
listen 3366;
proxy_pass backend; # tcp代理
}
}
....
然后找两台安装过mariadb的主机,授权远程连接用户为mysql 密码123456,两台主机都执行如下命令
MariaDB [(none)]> grant all privileges on *.* to 'mysql'@'%' identified by '123456';
随便找一台安装了mariadb客户端的主机,测试
[root@web04 wordpress]# mysql -h 10.0.0.9 -u"mysql" -P 3366 -p"123456"
MariaDB [(none)]> select @@hostname
-> ;
+------------+
| @@hostname |
+------------+
| db01 |
+------------+
1 row in set (0.00 sec)
MariaDB [(none)]> exit
Bye
[root@web04 wordpress]# mysql -h 10.0.0.9 -u"mysql" -P 3366 -p"123456"
MariaDB [(none)]> select @@hostname;
+------------+
| @@hostname |
+------------+
| lb01 |
+------------+
1 row in set (0.00 sec)
可以看到,他们轮询的调度到集群的不同的主机。
2.2 实现TCP协议负载均衡
前端四层负载均衡(TCP)+后端七层负载均衡(HTTP)+应用节点
1.配置nginx四层负载均衡
不能配置在http层。
stream {
upstream lb_cluster { # lb集群
server 172.16.1.4:80;
server 172.16.1.5:80;
server 172.16.1.6:80;
}
server {
listen 999;
proxy_pass lb_cluster;
}
}
七层配置:
upstream web {
server 172.16.1.7;
server 172.16.1.8;
server 172.16.1.9;
}
server {
listen 80;
server_name proxy.oldxu.net;
location / {
proxy_pass http://xx;
include proxy_params;
}
}
2.3 基于端口映射,实现跳板机
stream {
server {
listen 6666; # 只要ssh远程连接匹配到我的6666 我就跳转到 172.16.1.7:22
proxy_pass 172.16.1.7:22;
}
}