一:四層負載均衡與七層負載均衡區別
1.七層負載均衡
通常使用的nginx負載均衡技術, 在網絡分層中處於應用層(第七層)的,nginx與客戶端建立TCP連接(握手),然后再根據請求信息以及本地配置信息,將請求靈活的分發到不同的服務上。nginx這類7層負載均衡的優缺點都很明顯。
- 優點
可以將請求分發到不同的服務上,並且可以根據請求信息進行靈活的代理轉發;由於請求會通過負載均衡服務器,負載均衡服務器會過濾一些請求(例如:DOS攻擊)避免所有請求信息都打到服務器上,保障了服務器的穩定運行。
- 缺點
處於網絡分層的最上層,需要對數據進行解析,與客戶端建立連接,效率比較低。
2.四層負載均衡
除了nginx這種7層負載均衡策略,還有基於傳輸層(4層)的負載均衡策略。通過分析請求的IP地址以及端口號進行請求的負載均衡。根據請求處理的模式不同4層負載均衡算法可以分為:NAT,D-NAT,DR以及TUN隧道技術等。4層負載均衡的實現方式有:LVS。
- 優點
不對數據進行完全解析,不跟客戶端建立連接(握手),請求分發的效率快。
- 缺點
無法靈活的進行轉發,負載的服務器必須部署的相同服務器,否則同一個請求信息可能獲取的結果是不同的。
3.四層和七層協議區別
-
七層是基於HTTP協議
-
四層是基於TCP/IP協議
-
總結七層與四層
四層負載均衡的性能遠高於HTTP協議
HTTP協議也是基於TCP/IP協議
4.四層負載均衡應用場景
1.四層+七層來做負載均衡,四層可以保證七層的負載均衡的高可用性;
2.SSH代理端口,負載均衡可以做端口轉發
3.MySQL服務,數據庫讀寫分離
5.四層負載均衡的作用
1.在網站訪問流量特別多的時候,七層負載均衡抵擋不住這么多的流量時
2.四層負載均衡的性能遠高於七層負載均衡 就可以使用
3.四層負載均衡就是 負載均衡代理
6.四層與七層的協作
1.四層負載均衡不能區分域名
2.七層負載流量轉發和安全認證
7.四層負載均衡的實現
四層負載均衡必須要有以下該參數
--with-srearm
- 注:epel源安裝的Nginx無法使用四層負載均衡
二:部署四層負載均衡准備工作(編譯安裝)
1.使用編譯安裝nginx(不能yum安裝)
注意:yum安裝沒有--with-stream 參數
四層負載均衡必須要--with-stream 參數
3.安裝准備
yum install net-tools vim wget -y
4.添加源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
5.執行
[root@lb02 ~]# yum clean all
6.編譯
[root@lb02 ~]# yum makecache
7.安裝nginx
[root@lb02 ~]# yum install nginx
8.將epel源壓縮(不能使用epel安裝)
切換路徑
[root@lb02 ~]# cd /etc/yum.repos.d
將epel源壓縮(不能使用epel安裝)
[root@lb02 yum.repos.d]# gzip epel.repo
total 52
-rw-r--r--. 1 root root 2523 Dec 24 18:31 CentOS-Base.repo
-rw-r--r--. 1 root root 1664 Oct 23 2020 CentOS-Base.repo.backup
-rw-r--r--. 1 root root 1309 Nov 23 2020 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Nov 23 2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Nov 23 2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Nov 23 2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Nov 23 2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Nov 23 2020 CentOS-Vault.repo
-rw-r--r--. 1 root root 616 Nov 23 2020 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 254 Dec 24 18:31 epel.repo.gz
-rw-r--r-- 1 root root 398 Jan 8 21:34 nginx.repo
9.重新安裝nginx
yum install nginx
10.顯示--with-stream 參數
11.執行nginx -V
顯示該 參數 --with-stream 則成功(啟用四層負載均衡)
三:部署搭建四層負載均衡
1.搭建准備
1.不能把nginx配置放在 http內
就是 /etc/nginx/conf.d
2.四層負載均衡
要放在stream 內
2.修改nginx全局配置文件
切換路徑
[root@lb02 ~]# cd /etc/nginx
編寫全局配置文件
[root@lb02 nginx]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
include /etc/nginx/stream.conf/*.conf;
}
3.創建網址配置文件
[root@lb02 nginx]# mkdir /etc/nginx/stream.conf
4.切換目錄
[root@lb02 nginx]# cd stream.conf
5.編寫配置網址
[root@lb02 stream.conf]# vim nginx.conf
# 連接池
upstream nginx {
server 172.16.1.5:80;
}
server {
# 四層負載均衡不能寫域名
listen 80;
# 連接池 連接
proxy_pass nginx;
}
6.關閉 selinux 與firewalld
關閉 selinux
setenforce 0
關閉firewalld
systecmtl stop firewalld
7.測試
nginx -t
8.重啟
systemctl restart nginx
9.網址測試 (四層代理成功)
四:四層負載均衡實戰(SSH代理端口)
- 設備需求
| 服務器名稱 | 服務器ip地址 | 服務器 |
| ---------- | ------------ | ------------ |
| lb01 | 192.168.15.5 | 七層負載均衡 |
| lb02 | 192.168.15.6 | 四層負載均衡 |
1.使用場景(SSH代理端口)
- 案例1:要求使用192.168.15.6的1234端口鏈接192.168.15.5的22端口
- ssh服務不是http協議 通過的是tcp協議 來實現nginx代理ssh服務
- (通過地址轉換,隱藏原本自己ip)
2.創建ssh文件
切換路徑
[root@lb02 ~]# cd /etc/nginx
創建ssh文件
[root@lb02 stream.conf]# vim ssh.conf
upstream ssh {
server 172.16.1.5:22;
}
server {
listen 1234;
proxy_pass ssh;
}
3.測試
nginx -t
4.重啟
[root@lb02 stream.conf]# systemctl restart nginx
5.連接自己ip端口,實現跳板機,地址轉換
[root@lb02 stream.conf]# ssh 192.168.15.6 -p 1234
五:nginx代理mysql服務
1.四層負載均衡代理mysql
- 案例2:要求使用192.168.15.6的33060端口代理192.168.15.61的3306端口
2.編寫配置文件
[root@lb02 stream.conf]# vim mysql.conf
upstream mysql {
server 172.16.1.61:3306;
}
server {
listen 33060;
proxy_pass mysql;
}
3.四層負載均衡33060端口代理數據庫3306端口
四層負載均衡33060端口代理數據庫3306端口
[root@db01 ~]# mysql -uroot -p123456 -h192.168.15.6 -P33060