1.什麼是負載均衡?
随着應用各個核心子產品業務量的提高,通路量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的伺服器裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體更新,這樣将造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又将導緻再一次硬體更新的高額成本投入,甚至性能再卓越的裝置也不能滿足目前業務量增長的需求。
針對此情況而衍生出來的一種廉價有效透明的方法以擴充現有網絡裝置和伺服器的帶寬、增加吞吐量、加強網絡資料處理能力、提高網絡的靈活性和可用性的技術就是負載均衡(Load Balance)。
2.負載均衡的種類
①一種是通過硬體來進行解決,常見的硬體有NetScaler、F5、Radware和Array等商用的負載均衡器,但是它們是比較昂貴的
②一種是通過軟體來進行解決的,常見的軟體有LVS、Nginx、apache等,它們是基于Linux系統并且開源的負載均衡政策
以上内容摘自:
https://www.cnblogs.com/wang-meng/p/5861174.html 3.虛拟機準備工作,三台安裝了nginx伺服器的機器![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3MWNjRTN3kTNkZDOjVzYxkTN5YmM4QmN0QDOjRDM5IWOzITYzIzYy8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
該檔案中一些節點的作用:
worker_processes:工作程序個數,可配置多個
worker_connections:單個程序最大連接配接數
server:每一個server相當于一個代理伺服器
lister:監聽端口,預設80
server_name:目前服務的域名,可以有多個,用空格分隔(我們是本地是以是localhost)
location:表示比對的路徑,這時配置了/表示所有請求都被比對到這裡
index:當沒有指定首頁時,預設會選擇這個指定的檔案,可多個,空格分隔
proxy_pass:請求轉向自定義的伺服器清單
upstream name{ }:伺服器叢集名稱
重新開機nginx服務
5.安裝并啟動Tomcat
參考連結:
https://yq.aliyun.com/articles/6555426.修改Tomcat的index.jsp檔案
為了區分是哪個IP下的Tomcat,修改下index.jsp的内容,顯示對應的IP位址
7.浏覽器通路
http://192.168.0.115,展示頁面為116的Tomcat
8.設定權重,重新通路
,用115做伺服器負載均衡到116和117
9.搭建Keepalived,需要依賴openssl
檢視是否安裝openssl
rpm -qa|grep openssl
openssl已安裝
如果機器115出現故障了呢? 那麼怎麼使用116上的Nginx進行轉發呢? 怎麼設定主機和備機呢? 如果主機死了怎麼進行故障移除呢? 如果主機從不可用到可用狀态又怎麼進行恢複添加呢? 這些功能都是可以通過Keepalived來進行設定的.
Keepalived
(1)Keepalived高可用軟體
Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理并監控LVS叢集系統中各個服務節點的狀态,後來又加入了可以實作高可用的VRRP功能。是以,keepalived除了能夠管理LVS軟體外,還可以作為其他服務的高可用解決方案軟體。
Keepalived軟體主要是通過VRRP協定實作高可用功能的。VRRP是Virtual Router Redundancy Protocol (虛拟路由備援協定)的縮寫,VRRP出現的目的就是為了解決靜态路由的單點故障問題的,它能保證當個别節點當機時,整個網絡可以不間斷地運作。是以,keepalived一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可以實作系統網絡服務的高可用功能。
(2)Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是通過VRRP來實作的。在keepalived服務工作時,主Master節點會不斷地向備節點發送(多點傳播的方式)心跳消息,用來告訴備Backup節點自己還活着。當主節點發生故障時,就無法發送心跳的消息了,備節點也是以無法繼續檢測到來自主節點的心跳了。于是就會調用自身的接管程式,接管主節點的IP資源和服務。當主節點恢複時,備節點又會釋放主節點故障時自身接管的IP資源和服務,恢複到原來的備用角色。
①keepalived官網:
http://www.keepalived.org/②下載下傳keepalived最新版V2.0.9
wget http://www.keepalived.org/software/keepalived-2.0.9.tar.gz
③解壓keepalived-2.0.9.tar.gz
tar -xzvf ./keepalived-2.0.9.tar.gz
④執行./configure
cd /usr/local/keepalived-2.0.9
./configure
說明缺少依賴包libnl、libnl-devel
yum -y install libnl libnl-devel
重新執行./configure
⑤開始編譯和安裝
make && make install
⑥keepalived安裝後預設不會注冊為系統服務,需要手動添加系統服務腳本
- keepalived啟動腳本變量引用檔案,預設檔案路徑是/etc/sysconfig/,也可以不做軟連結,直接修改啟動腳本中檔案路徑即可(安裝目錄下)
cp /usr/local/keepalived-2.0.9/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
- 将keepalived主程式加入到環境變量(安裝目錄下)
cp /usr/local/keepalived-2.0.9/keepalived/keepalived /usr/sbin/
- keepalived啟動腳本(源碼目錄下),放到/etc/init.d/目錄下就可以使用service指令便捷調用
cp /usr/local/keepalived-2.0.9/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
- 将配置檔案放到預設路徑下
mkdir /etc/keepalived
cp /usr/local/keepalived-2.0.9/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
- 設定為開機啟動
chkconfig keepalived on
- 啟動keepalived服務
service keepalived start
192.168.0.115環境搭建完成,116按同樣的環境搭建
- 檢查keepalived是否啟動成功
ip add show eth0
eth0是網卡名稱,通過ifconfig檢視
⑦192.168.0.115做主機,192.168.0.116做備機,備機需要修改keepalived.conf
主機 (主節點):
備機 (從節點):
現在主節點和從節點都會生成VIP,這種現象叫做“腦裂”
腦裂(split-brain) : 指在一個高可用(HA)系統中,當聯系着的兩個節點斷開聯系時,本來為一個整體的系統,分裂為兩個獨立節點,這時兩個節點開始争搶共享資源,結果會導緻系統混亂,資料損壞。對于無狀态服務的HA,無所謂腦裂不腦裂;但對有狀态服務(比如MySQL)的HA,必須要嚴格防止腦裂
思考:正常情況下keepalived的VIP應該生成在主節點,從節點在檢測到主節點正常運作的時候是不生成VIP的,但是現在從節點生成了VIP,有可能主從節點間的通信異常了。主從節點通信是通過VRRP廣播實作的,首先檢查從節點是否可以接收到VRRP廣播
tcpdump -i eth0|grep VRRP
很明顯從節點已經接收到VRRP廣播,應該是被過濾掉了,有這功能的就隻有防火牆了,檢視防火牆過濾規則
vim /etc/sysconfig/iptables
添加過濾規則
#允許多點傳播位址通信
-A INPUT -s 192.168.0.0/24 -d 224.0.0.18 -j ACCEPT
#允許VRRP(虛拟路由器備援協)通信
-A INPUT -s 192.168.0.0/24 -p vrrp -j ACCEPT
重新開機防火牆
service iptables reload
檢視是否生成VIP
已經成功了
⑧主節點的keepalived服務停掉,觀察從節點是否可以生成VIP
主節點:
從節點:
⑨主節點啟動keepalived服務後,觀察是否出現“腦裂現象”
通路tomcat頁面不受任何影響,說明故障移除是OK的
10.因為我們是用nginx做負載均衡分發請求資料包的,如果主節點keepalived服務正常運作,但是nginx服務出現故障,就會出現負載均衡服務失靈的問題,導緻請求無法通路到116或117的應用伺服器上,是以我們要檢測nginx服務是否正常運作,如果出現故障,則立即停掉keepalived服務,這樣就可以自動切換到從節點上
通過檢測80端口是否開啟來判定nginx的運作情況,2秒鐘檢測一次,腳本如下
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
/etc/init.d/keepalived stop
fi
sleep 2
done
直接執行該腳本,是一個死循環,如果服務正常(netstat -tlnp|grep nginx|wc -l)=1,腳本裡判斷如果不等于1,就停掉keepalived服務,sleep 2,2秒執行一次
結束