Linux的企業-高可用集群Haproxy+corosync+pacemaker+fence
一.Haproxy簡介
Haproxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
二.HAProxy的特點
1、支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
3、支持url
4、更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
5、單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。
6、HAProxy可以對Mysql進行負載均衡,對後端的DB節點進行檢測和負載均衡。
9、支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據
10、不能做Web服務器即Cache。
三.高可用corosync+pacemaker介紹
高可用架構由兩個核心部分組成,一個是心跳檢測,判斷服務器是否正常運行;一個是資源轉移,用來將公共資源在正常服務器和故障服務器之間搬動。整個運行模式就是心跳檢測不斷的在網絡中檢測各個指定的設備是否能夠正常響應,如果一旦發生設備故障,就由資源轉移功能進行應用的切換,以繼續提供服務。
corosync,心跳信息傳輸層,它是運行在每一個主機上的一個進程 。
pacemaker是一個集群管理器。它利用推薦集群基礎設施(OpenAIS 或heartbeat)提供的消息和成員能力,由輔助節點和系統進行故障檢測和回收,實現性群集服務(亦稱資源)的高可用性。用於資源轉移。
四.環境配置
客戶機:172.25.29.250
服務端
server1:172.25.29.1 haproxy httpd8080 corosync+pacemaker
server4:172.25.29.4 corosync+pacemaker
RS:
server2:172.25.29.2 httpd
server3:172.25.29.3 httpd
1.安裝haproxy
安裝包依賴
配置指定路徑
為了方便創建rpm包,先安裝rpmbuild包
編譯後做成*.rpm
安裝做好後的haproxy包
2.配置haproxy
復制模版配置文件
創建haproxy用戶和添加內核最大連接數量8000
配置主配置文件
3.測試
服務端口已經打開
可以輪詢
haproxy監控頁面正常
haproxy正常
五.Haproxy日誌的配置
vim /etc/rsyslog.conf
測試顯示日誌正常
六.調度算法的設置
1.默認為rr輪詢
2.設置權重weight 2
server2的權重變大
3.設置source算法原地址保持
七.設置動態頁面訪問php
1.載server1上配置文件
2.在server3上安裝php,配置httpd
設置訪問頁面vim /var/www/html/index.php
設置httpd默認優先訪問index.php
3.在客戶機測試
八.設置acl禁止訪問用戶
客戶機172.25.29.250無法訪問
九.acl設置重定向
設置訪問錯誤的重定向到本機的8080端口
將本機的httpd改為8080端口
十.acl設置動態寫入
1.設置配置
2.在server2上安裝php,設置好所需要的測試文件
在默認的html下放置上傳文件的upload_file.php upload目錄
3.設置好權限,並將文件傳給server3
在server3上設置好權限
4.在客戶機上測試
可以上傳圖片
可以訪問images目錄下的圖片
十一.安裝高可用pacemaker+corosync集群
1.安裝配置
bindnetaddr 設置網段
多波設置改變一個mcastaddr和mcastport
底下添加service
server4與server1同樣配置
2.校驗集群配置文件,顯示錯誤,需要安裝接口插件crmsh
crmsh作為pacemaker的接口,而安裝crmsh需要依賴pssh
3.兩邊啟動corosync服務後,在server1上 crm_mon 監控集群健康狀態,server1與server4 online
4.在server4上使用crm相關命令管理集群
STONITH
shoot the other node in the head,這個RA類型主要是做節點隔離的,專為配置stonith設備耐用。
使用STONITH主要目的就是為了避免由於網絡原因,節點之間不能完全通信(比如分為了兩部分,左邊3臺,右邊2臺),左邊的3臺能收到各自的心跳信息,右邊的2臺也可以收到各自的心跳信息,就是左邊部分和右邊部分收不到各自的心跳信息,因此,它們都各自以為對方故障了,就會各自重新推選出一臺做為DC(Designated Coordinator),從而出現了兩個集群,這就導致了資源爭用;如果恰好雙方都往其共享存儲寫數據,很可能就會導致文件系統崩潰,這種現象就叫做集群分裂(brain-split)。
為了避免集群分裂,就出現了法定票數(quorum,票數>半數票數的集群成為滿足法定票數)這一說法,就是在集群通信故障時,為了避免資源搶占,應該讓一方放棄成為集群,具體應該哪方放棄呢?這就是投票的結果了,只有具有法定票數的一方才有資格做為集群,相反的一方就應該退出集群,但它放棄後並不代表服務停止,所以應該讓其釋放資源,關閉電源。stonith設備就是在這裏用的,要讓退出集群的設備徹底失效,電源交換機就是這個原理了
而如果一個集群只有兩個節點的話,這又是一種特殊的集群,萬一出現集群分裂後,它們雙方可能都不會具有法定票數,那結果可想而知,資源不會轉移,導致整個資源都故障了,因為沒有仲裁設備
說這麽多,就是為了說明下面兩個比較重要的概念
①、corosync默認啟用了stonith功能,而我們要配置的集群並沒有stonith設備,因此在配置集群的全局屬性時要對其禁用
②、當一個集群沒有法定票數時,資源是不會正常轉移的,當一個節點出現故障時,資源不會正常的轉移到正常的節點上,就會導致所有的資源都故障了。所以,應該定義法定票數不足時做忽略而不是停止所有資源
5.安裝fence
在server1上安裝fence
在客戶機上安裝fence
端口1229已經開打
6.在server4上配置fence機制
在server1上crm_mon監控集群健康狀態,fence已經啟動正常
7.在server4上配置虛擬IP,並重啟corosync服務
在server1上crm_mon監控集群健康狀態,vip已經啟動正常
8.測試fence機制
關閉server4上節點,服務到server1上
十二.添加負載均衡Haproxy
1.server4配置haproxy
修改綁定的VIP
將server1的haproxy傳給server4
2.server4安裝haproxy
在高可用上配置haproxy
crm node standby操作節點的備用屬性以確定資源是否可在此節點上運行
在資源裏更新server1 的haproxy
3.server4節點上線,集群正常,VIP已經到server4
4.測試,停止server4節點,服務到server1
server4網卡down掉,服務到server1
Linux的企業-高可用集群Haproxy+corosync+pacemaker+fence