1、Nginx四層負載均衡基本概訴
(1) 什么是四層負載均衡
四層負載均衡基于傳輸層協(xié)議包來封裝的(如:TCP/IP),那我們前面使用到的七層指的是應(yīng)用層,它的封裝在四層基礎(chǔ)之上,無論四層還是七層都指的是OSI網(wǎng)絡(luò)模型。
(2) 四層負載均衡應(yīng)用場景
1.
四層負載
可以保證7層負載的高可用:四層+七層來做負載均衡,四層可以保證七層的負載均衡的高可用性,如:nginx就無法保證自己的服務(wù)高可用,需要依賴LVS或者keepaive。2、端口映射(端口轉(zhuǎn)發(fā)):如:TCP協(xié)議的負載均衡,有些請求是TCP協(xié)議的(mysql,ssh),或者說這些請求只需要使用四層進行端口的轉(zhuǎn)發(fā)就可以了,所以使用四層負載均衡。
(3) 四層+七層構(gòu)建大規(guī)模集群架構(gòu)使用場景
(4) 四層負載均衡總結(jié)
1、四層負載均衡僅能轉(zhuǎn)發(fā)TCP/IP協(xié)議、UDP協(xié)議、通常用來轉(zhuǎn)發(fā)端口,如:tcp/22、udp/53
2、四層負載均衡可以用來解決七層負載均衡端口限制問題;(七層負載均衡最大使用65535個端口)
3、四層負載均衡可以解決七層負載均衡高可用問題;(多臺后端七層負載均衡能同時的使用)
4、四層的轉(zhuǎn)發(fā)效率比七層的高得多,但僅支持tcp/ip協(xié)議,不支持http和https協(xié)議;
5、通常大并發(fā)場景通常會選擇使用在七層負載均衡前面增加四層負載均衡
2、Nginx四層負載均衡實戰(zhàn)
(1) Nginx四層負載語法
Syntax: listen address:port [ssl] [udp] [proxy_protocol] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default: —
Context: server
#示例
worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
#在events層下面,http層上面配置stream
# stream配置多的時候,直接配置include更加簡潔
stream {
#1.定義虛擬資源池
upstream backend {
hash $remote_addr consistent;
server backend1.example.com:12345 weight=5;
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
upstream dns {
server 192.168.0.1:53535;
server dns.example.com:53;
}
#2.調(diào)用虛擬資源池
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
server {
listen 127.0.0.1:53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
}
(2) Nginx四層負載均衡前期準備
① 環(huán)境規(guī)劃
主機名 應(yīng)用環(huán)境 IP地址
Nginx-5 Nginx+PHP 192.168.2.5
Nginx-6 Nginx+PHP 192.168.2.6
MySQL-7 MySQL 192.168.2.7
7-Proxy1-8 Nginx 192.168.2.8
7-Proxy2-9 Nginx 192.168.2.9
4-Proxy1-10 Nginx 192.168.2.10
② 搭建第二臺七層proxy服務(wù)器 7-Proxy2-9
#1、準備對應(yīng)的www用戶
[root@7-Proxy2-9 ~]# groupadd -g666 www
[root@7-Proxy2-9 ~]# useradd -u666 -g666 www
#2、在7-Proxy2-9上面安裝Nginx
[root@7-Proxy2-9 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@7-Proxy2-9 ~]# yum install nginx -y
#3、在7-Proxy2-9上面拷貝7-Proxy1-8的所有nginx相關(guān)配置即可。
[root@7-Proxy2-9 ~]# scp -rp root@192.168.2.8:/etc/nginx /etc/
#4、啟動nginx
[root@7-Proxy2-9 conf.d]# nginx -t
[root@7-Proxy2-9 conf.d]# systemctl start nginx
[root@7-Proxy2-9 conf.d]# systemctl enable nginx
#注:注銷7-Proxy1-8的域名解析,換成7-Proxy2-9,再訪問網(wǎng)站是否游泳,成功即可。
③ 搭建四層proxy服務(wù)器 4-Proxy1-10
#1、準備對應(yīng)的www用戶
[root@4-Proxy1-10 ~]# groupadd -g666 www
[root@4-Proxy1-10 ~]# useradd -u666 -g666 www
#2、在4-Proxy1-10上面安裝Nginx
[root@4-Proxy1-10 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@4-Proxy1-10 ~]# yum install nginx -y
#3、查看是否有四層模塊
[root@4-Proxy1-10 ~]# nginx -V
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module
`--with-stream`(這個四層負載模塊是nginx>=1.9.0才有) --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
#4、啟動nginx
[root@4-Proxy1-10 conf.d]# nginx -t
[root@4-Proxy1-10 conf.d]# systemctl start nginx
[root@4-Proxy1-10 conf.d]# systemctl enable nginx
(3) Nginx四層負載均衡實戰(zhàn)
① 需求
1.通過訪問負載均衡的5555端口,實際是后端的Nginx-5的22端口在提供服務(wù)。
2.通過訪問負載均衡的6666端口,實際是后端的mysql-7的3306端口在提供服務(wù)。
② 4-Proxy1-10配置
#如果監(jiān)聽了80端口,要刪除/etc/nginx/conf.d/default.conf
[root@4-Proxy1-10 ~]# rm -f /etc/nginx/conf.d/default.conf #刪除http的80端口
#配置四層負載均衡(這里采用文件方式,后面直接用include就行)
[root@4-Proxy1-10 ~]# mkdir -p /etc/nginx/conf.c
[root@4-Proxy1-10 ~]# vim /etc/nginx/nginx.conf
# 在events層下面,http層上面配置include
include /etc/nginx/conf.c/*.conf;
# 編寫四層代理配置
[root@4-Proxy1-10 ~]# cd /etc/nginx/conf.c/
[root@4-Proxy1-10 conf.c]# cat stream.conf
stream {
#1.定義虛擬資源池
upstream ssh {
server 192.168.2.5:22;
}
upstream mysql {
server 192.168.2.7:3306;
}
#2.調(diào)用虛擬資源池
server {
listen 5555;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass ssh;
}
server {
listen 6666;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass mysql;
}
}
[root@4-Proxy1-10 conf.c]# systemctl restart nginx
#1.打開訪問 Nginx-5、Nginx-6、7-Proxy1-8、7-Proxy2-9和4-Proxy1-10的訪問日志
#2.可以用ssh 192.168.2.10:5555 登入到Nginx-5
#3.可以用navicat 登入192.168.2.10:6666登入到mysql-7上
#4.命令tail -f /var/log/nginx/access.log查看到是分攤到7-Proxy1-8、7-Proxy2-9上
#5.可以正常訪問wordpress、wecenter、eduSoho
#6.4-Proxy1-10上并沒有產(chǎn)生日志
(4) nginx四層負載均衡記錄日志
① 四層負載均衡日志必須配置在stream模塊
[root@4-Proxy1-10 ~]# cat /etc/nginx/conf.c/tcp_proxy.conf
stream {
#定義日志的格式
log_format proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
#調(diào)用日志,使用proxy格式
access_log /var/log/nginx/tcp_proxy.log proxy;
......其他配置省略......
#查看日志 tail -f /var/log/nginx/tcp_proxy.log 可以看見日志
}
-
MySQL
+關(guān)注
關(guān)注
1文章
809瀏覽量
26552 -
SSH
+關(guān)注
關(guān)注
0文章
189瀏覽量
16336 -
LVS
+關(guān)注
關(guān)注
1文章
36瀏覽量
9942 -
nginx
+關(guān)注
關(guān)注
0文章
149瀏覽量
12173 -
TCP通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
4222
發(fā)布評論請先 登錄
相關(guān)推薦
評論