1. 4層負荷分散とは
4層のロードバランシングは、トランスポート層プロトコルパケット(TCP / IPなど)に基づいてカプセル化されます。次に、前に使用した7層は、4層に基づいて組み立てられたアプリケーション層を指します。 7つの層はOSIネットワークモデルを参照します。
2. 4層の負荷分散アプリケーションのシナリオ
1、四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需 要依赖LVS或者keepalive。
2、如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发 就可以了,所以使用四层负载均衡。
大規模クラスターアーキテクチャ用の4層+ 7層の構築シナリオ
3. 4層の負荷分散の概要
-
レイヤー4の負荷分散は、TCP / IPプロトコル、UDPプロトコルのみを転送できます。通常、次のようなポートの転送に使用されます。tcp/ 22、udp / 53;
-
レイヤー4ロードバランシングを使用して、レイヤー7ロードバランシングのポート制限問題を解決できます(レイヤー7ロードバランシングは最大65535のポート番号を使用します)。
-
4層の負荷分散により、7層の負荷分散の高可用性問題を解決できます(複数のバックエンドの7層の負荷分散を同僚が使用できます)。
-
レイヤー4の転送効率はレイヤー7よりもはるかに高くなりますが、tcp / ipプロトコルのみをサポートし、httpおよびhttpsプロトコルはサポートしません。
-
通常、大規模な同時実行シナリオでは、通常、レイヤー7のロードの前にレイヤー4のロードバランスを追加することを選択します。
4. Nginx 4層負荷分散シナリオの実践
Nginx如何配置四层负载均衡
1、通过访问负载均衡的5555端口,实际是后端的web01的22端口在提供服务;
2、通过访问负载均衡的6666端口,实际是后端的mysql的3306端口在提供服务。
先配置两台lb负载均衡
[root@lb02 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx‐stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
#在lb02上安装nginx
[root@lb02 yum.repos.d]# yum install ‐y nginx
#在lb02上同步lb01的所有nginx相关配置
[root@lb02 ~]# scp ‐r [email protected]:/etc/nginx /etc/
#启动nginx
[root@lb02 conf.d]# nginx ‐t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb02 conf.d]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi‐user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@lb02 conf.d]# systemctl start nginx
①4層負荷分散構成ファイルを格納するディレクトリを作成します
[root@lb02 ~]# vim /etc/nginx/nginx.conf
events {
....
}
include /etc/nginx/conf.c/*.conf;
http {
.....
}
[root@lb02 ~]# mkdir /etc/nginx/conf.c
②4層負荷分散を構成する
[root@web03 conf.c]# cat lb_domain.conf
stream {
upstream lb {
server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;
server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass lb;
}
}
[root@web03 conf.c]# nginx ‐t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web03 conf.c]# systemctl reload nginx
#配置本机hosts解析后浏览器访问并查看nginx日志
③4層負荷分散オープンログ
#四层负载均衡是没有access的日志的,因为在nginx.conf的配置中,access的日志格式是配置在http下的,而四层负载均衡配置是在http以外的;
#如果需要日志则需要配置在stream下面
[root@web03 conf.c]# cat lb_domain.conf
stream {
log_format proxy '$remote_addr $remote_port ‐ [$time_local] $status $protocol ' '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ; access_log /var/log/nginx/proxy.log proxy;
upstream lb {
server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;
server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s; }
server {
listen 80;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass lb;
}
}
5. Nginxレイヤー4負荷分散ポート転送
①nginx4層負荷分散を使用してTCP転送を実現する
请求负载均衡 5555 ‐‐‐> 172.16.1.7:22; 请求负载均衡 6666 ‐‐‐> 172.16.1.51:3306;
②tcp転送を実現するためにnginx 4層負荷分散を構成する
[root@lb4‐01 ~]# cat /etc/nginx/conf.c/lb_domain.conf
stream {
log_format proxy '$remote_addr $remote_port ‐ [$time_local] $status $protocol ' '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ; access_log /var/log/nginx/proxy.log proxy;
#定义转发ssh的22端口
upstream ssh_7 {
server 10.0.0.7:22;
}
#定义转发mysql的3306端口
upstream mysql_51 {
server 10.0.0.51:3306;
}
server {
listen 5555;
proxy_connect_timeout 3s;
proxy_timeout 300s;
proxy_pass ssh_7;
}
server {
listen 6666;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass mysql_51;
}
}