什麼是負載均衡?
互聯網早期,業務流量比較小並且業務邏輯比較簡單,單臺服務器便可以滿足基本的需求;但隨着互聯網的發展,業務流量越來越大並且業務邏輯也越來越複雜,單臺機器的性能問題以及單點問題凸顯了出來,因此需要多臺機器來進行性能的水平擴展以及避免單點故障。但是要如何將不同的用戶的流量分發到不同的服務器上面呢?
那麼通過使用nginx搭建的負載均衡器即可解決該問題
客戶端的流量首先會到達負載均衡服務器,由負載均衡服務器通過一定的調度算法將流量分發到不同的應用服務器上面,同時負載均衡服務器也會對應用服務器做週期性的健康檢查,當發現故障節點時便動態的將節點從應用服務器集羣中剔除,以此來保證應用的高可用。
搭建步驟以及準備條件:
- 搭建三臺Linux服務器
- 一臺安裝Nginx,另外兩臺各安裝Tomcat
- 對Nginx的/etc/nginx/conf.d/default.conf進行配置
- 測試負載均衡
這裏我用的是使用Vmware創建三臺Linux服務器,其中一臺安裝Nginx,爲其使用dhclient分配ip爲:192.168.248.128
另外兩臺安裝jdk+Tomcat.,分別爲其分配IP爲:192.168.129和129.168.248.130.
結果如下圖所示:
詳細操作:
1.克隆三臺Linux服務器
1.1 以上圖爲例 dhclient 分配 ip地址
安裝tomcat的兩臺服務器ip分別爲192.168.30.128、192.168.30.130
安裝的nginx的服務器ip爲192.168.30.131
2.安裝JDK和Tomcat
在192.168.30.128、192.168.30.130上先安裝JDK,在安裝tomcat
安裝tomcat需要依賴JDK
安裝步驟參考之前的文章
3.安裝Nginx
在192.168.30.131安裝Nginx
4.配置負載均衡
在192.168.30.131安裝Nginx的服務器上, 打開/etc/nginx/conf.d/default.conf文件
#新增
upstream aa{
server 192.168.30.128:8080;
server 192.168.30.130:8080;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
#新增一行
proxy_pass http://aa;
}
}
5.關閉Nginx上的安全組
使用 vi /etc/selinux/config
編輯config文件,修改SELNUX=disabled
如圖所示:
注意:修改過安全組要把系統重啓reboot下生效!
重啓之後如果不能訪問就要禁用掉防火牆:systemctl stop firewalld
並且開啓Nginx:stystemctl start nginx
6.測試
通過 http://192.168.30.131:80 訪問Nginx,即可看到實際訪問了tomcat
負載均衡的策略
-
輪詢 (默認)
特點:一個一個挨着訪問,tomcat服務器會被依次訪問
-
權重
weight=數字越大權重越大,被訪問的機率越高
下邊的配置上邊的機器訪問2次,下邊的訪問1次
-
ip黏着
根據用戶的ip,綁定到一臺tomcat服務器
根據客戶端用戶的ip地址計算出一個可以被訪問的tomcat服務器
如果客戶端用戶的ip地址不變,那麼訪問的tomcat就固定了
原理:把用戶的ip進行hash處理(取用戶ip的hash值),對tomcat總數量取模,然後根據得到的值,對應找到要訪問的Tomcat
反向代理和正向代理的區別
代理如果在服務器端就是反向代理,如果放在客戶端就是正向代理
反向代理 和 負載均衡 的關係?
什麼是負載均衡? 搭建多個tomcat服務器,在用戶訪問量大的時候,可以訪問不同的tomcat,減少某個tomcat的訪問壓力
在nginx中如果想實現負載均衡,需要藉助反向代理機制