**
Keepalived熱備、HAProxy伺服器
**
Keepalived
概述
問:排程器出現單點故障,如何解決?
- Keepalived實作了高可用叢集
- Keepalived最初是為了LVS設計的,專門監控各伺服器節點的狀态
-
Keepalived後來加入了VRRP功能,防止單點故障
注:VRRP是一種選擇協定,它可以把一個虛拟路由器的責任動态配置設定到區域網路上的 VRRP 路由器中的一台。
VRRP是一種路由容錯協定,也可以叫做備份路由協定
VRRP(Virtual Router Redundancy Protocol,虛拟路由備援協
議)是一種容錯協定
VRRP 将區域網路的一組路由器(包括一個Master 即活動路由器和若幹個Backup 即備份路由器)組織成一個虛拟路由器,稱之為一個備份組。
VRRP的工作過程如下:
- 路由器開啟VRRP功能後,會根據優先級确定自己在備份組中的角色。優先級高的路由器成為主用路由器,優先級低的成為備用路由器。主用路由器定期發送VRRP通告封包,通知備份組内的其他路由器自己工作正常;備用路由器則啟動定時器等待通告封包的到來。
-
VRRP在不同的主用搶占方式下,主用角色的替換方式不同:
l在搶占方式下,當主用路由器收到VRRP通告封包後,會将自己的優先級與通告封包中的優先級進行比較。如果大于通告封包中的優先級,則成為主用路由器;否則将保持備用狀态。
l在非搶占方式下,隻要主用路由器沒有出現故障,備份組中的路由器始終保持主用或備用狀态,備份組中的路由器即使随後被配置了更高的優先級也不會成為主用路由器。
- 如果備用路由器的定時器逾時後仍未收到主用路由器發送來的VRRP通告封包,則認為主用路由器已經無法正常工作,此時備用路由器會認為自己是主用路由器,并對外發送VRRP通告封包。備份組内的路由器根據優先級選舉出主用路由器,承擔封包的轉發功能。
a) keepalived運作原理
- Keepalived檢測每個伺服器節點狀态
- 伺服器節點異常或工作出現故障,Keepalived将故障節點從叢集系統紅剔除
- 故障節點恢複後,Keepalived再将其加入到叢集系統中
-
所有工作自動完成,無需人工幹預
Keepalived+LVS
使用Keepalived高可用解決排程器單點失敗問題
主、備排程器上配置LVS
主排程器異常時,Keepalived啟用備用排程器
HAProxy伺服器
概述:
a) 它是免費、快速并且可靠的一種解決方案
b) 使用于那些負載特大的web站點,這些站點通常有需要會話保持或七層處理
c) 提供高可用性、負載均衡以及基于TCP和HTTP應用的代理
衡量負載均衡器性能的因素
Seesion rate 會話率
— 每秒鐘産生的會話數
Seesion concurrency并發會話數
— 伺服器處理會話的時間越長,并發會話數越多
Data rate資料速率
— 以MB/s或Mbps衡量
— 大的對象導緻并發會話數增加
— 高會話數、高資料速率要求更多的記憶體
HAProxy工作模式
a) mode http
— 用戶端請求被深度分析後再發往伺服器
b) mode tcp
— 用戶端與伺服器之間建立會話,不檢查第七層資訊
c) mode health
— 僅做健康狀态檢查,已經不建議使用
HTTP協定解析
HTTP解析
a) 當HAProxy運作在HTTP模式下,HTTP請求(Request)和響應(Response)均被完全分析和索引,這樣便于建立恰當的比對規則
b) 了解HTTP請求和響應,對于更好的建立比對規則至關重要
HTTP事務模型
a) HTTP協定是事務驅動的
b) 每個請求僅能對應一個響應
c) 常見模型
HTTP close
— 用戶端向伺服器建立一個TCP連接配接
— 用戶端發型請求給伺服器
— 伺服器響應用戶端請求後即斷開連接配接
— 如果用戶端到伺服器的請求不止一個,那麼就要不斷地去建立連接配接
— TCP三向交握消耗相對較大的形同資源,同時延遲較大
Keep-alive
— 一次連接配接可與傳輸多個請求
— 用戶端需要知道傳輸内容的長度,與避免無限期的等待傳輸結果
— 降低兩個HTTP事務間的延遲
— 需要相對較少的伺服器資源
Pipelining
— 仍然使用Keep-alive
— 在發送後續請求前,不用等前面的請求已經得到回應
— 适用于有大量圖檔的頁面
— 降低了多次請求之間的網絡延遲
HTTP頭部資訊
請求頭部包含許多有關的用戶端環境和請求正文的有用資訊
URL :統一資源定位符http://www.baidu.com/music/mp3/xxx.mp3
URI :除去協定剩下的部分/music/mp3/xxx.mp3
叢集排程軟體對比
Nginx分析
優點
— 工作在7層,可以針對http做分流政策
— 正規表達式比HAProxy強大
— 安裝、配置、測試簡單,通過日志可以解決多數問題
— 并發量可以達到幾萬次
— Nginx還可以作為Web伺服器使用
缺點
— 僅支援http、https、mail協定,應用面小
— 監控檢查僅通過端口,無法使用URL檢查
LVS分析
優點
— 負載能力強,工作在4層,對記憶體、CPU消耗低
— 配置性低,沒有太多可配置性,減少人為錯誤
— 應用面廣,幾乎可以為所有應用提供負載均衡
缺點
— 不支援正規表達式,不能實作動靜分離
— 如果網站架構龐大,LVS-DR配置比較繁瑣
HAProxy分析
優點
— 支援session、cokkie功能
— 可以通過URL進行健康檢查
— 效率、負載均衡速度,高于Nginx,低于LVS
— HAProxy支援TCP,可以對MYSQL進行負載均衡
— 排程算法豐富
缺點
— 正則弱于Nginx
— 日志依賴于syslogd,不支援apache日志
一、使用Keepalived軟體配置HA(高可用)叢集
把主機55和主機57配置 提供網站的服務HA叢集
配置步驟
- 分别在主機55和57運作網站服務并編寫網頁檔案test.html
- 分别在主機55和57上安裝Keepalived軟體
-
分别在主機55和57上修改配置檔案
http://192.168.4.252/test.html
a) 配置主伺服器(55)
- 備份主配置檔案
# cp /etc/keepalived/keepalived.conf{,.bak}
- 修改配置檔案(必須注釋掉 vrrp_strict 行,其他内容修改如下圖)
# vim /etc/keepalived/keepalived.conf
b) 配置備用伺服器(57)
修改配置檔案
# vim /etc/keepalived/keepalived.conf
- 分别主機55和57上啟動keepalived服務(先啟動優先級高的)
systemctl start keepalived.service
-
檢視配置設定的192.168.4.252IP位址
55主機
ip add show | grep 192.168.4
57主機
# ip add show | grep 192.168.4
6. 測試是否能夠通信(正常通信即可)
# ping 192.168.4.252
- 測試高可用功能(保證55,57上面的HTTP服務是運作的)
# curl http://192.168.4.252/test.html (顯示55web頁面)
down掉55主機的keepalived服務,再次進行測試,則顯示57web頁面
二、綜合應用:keepalived+LVS 配置LVS排程器HA叢集
需求:把主機56配置為備用的LVS排程器,當分發器54主機當機後,用戶端主機仍然可以連接配接VIP位址192.168.4.254 通路網站叢集
配置步驟;
1.在56主機上安裝提供LVS服務的軟體ipvsadm
2.删除54主機上政策和VIP位址
# ipvsadm-C
# ifdown eth0-------->ifup eth0
删除/etc/rc.local檔案裡的ifconfig eth0:1 192.168.4.253
3. 分别在54和56主機上安裝keepalived軟體
4. 修改配置檔案/etc/keepalived/keepalived.conf
a) 主分發器host54(注釋14行 vrrp_strict)
#vim /etc/keepalived/keepalived.conf
b) 備用分發器host56(注釋14行 vrrp_strict)
#vim /etc/keepalived/keepalived.conf
5. 啟動54 和56 主機上keepalived服務并設定為開機運作
6. 用戶端連接配接VIP位址192.168.4.253 通路網站叢集
用戶端50 #curl curl http://192.168.4.253/test.html
輪詢顯示52和53主機上的web頁面
7. 驗證分發器,能否實作高可用
主機54當機後,用戶端依然可連接配接VIP位址192.168.4.253 通路網站叢集
擴充:配置keepalived 對 LVS 服務的realserver 做健康性檢查
修改主機 54 和 56 配置檔案/etc/keepalived/keepalived.conf
三、使用HAProxy軟體 配置LB叢集(基于端口、傳輸層)
環境準備:55 和 57網站伺服器,用戶端 50,分發器 56
host56:
1.裝包haproxy
2.修改配置檔案/etc/haproxy/haproxy.cfg
a) 備份
# cp /etc/haproxy/haproxy.cfg{,.bak}
b) 修改
# /etc/haproxy/haproxy.cfg
配置檔案說明:
3. 啟動服務并設定為開機自啟動
# systemctl start haproxy
# systemctl enable haproxy
- 用戶端驗證50
a) # curl http://192.168.4.56/test.html (輪詢顯示55和57的web頁面) b) #浏覽器通路 http://192.168.4.56/admin
頁面内容如下:
宕掉其中一台伺服器的web服務,則顯示如下:(以斷開55為例)
再次打開55主機的web服務,則恢複輪詢
參數備注:
Queue隊列資料的資訊(目前隊列數量,最大值,隊列限制數量)
Session rate 每秒會話率(目前值,最大值,限制數量)
Session總會話量(目前值,最大值,總量,Lbtot: total number of times a server was selected選中一台伺服器所用的總時間)
Bytes(入站、出站流量);
Denied(拒絕請求、拒絕回應);
Errors(錯誤請求、錯誤連接配接、錯誤回應);
Warnings(重新嘗試警告retry、重新連接配接redispatches);
Server(狀态、最後檢查的時間(多久前執行的最後一次檢查)、權重、備份伺服器數量、down機伺服器數量、down機時長)