今天小編要和讀者聊聊有關伺服器的高可用性的問題,目前讀者應該知道,國内一些從事電子商務行業的伺服器性能是相當的強大的(淘寶、阿裡巴巴等等),這些電子商務的主站每秒鐘的通路量可是相當的可觀,讀者試着想想如果伺服器當掉了咋辦,回答可能是肯定還有其他伺服器替代啦,對,可是如何迅速替代讓使用者感覺不到已經有伺服器當掉了呢,那便引出小編今天要談的HA。
HA是啥?High-Availability Linux 的開源項目的目标是,通過社群開發努力提供一個提升 Linux 可靠性(reliability)、可用性(availability)和可服務性(serviceability)(RAS)的群集解決方案。Linux-HA 項目得到了廣泛的應用,是很多有趣的高可用性解決方案的重要組成部分。
高可用性叢集一般是指當叢集中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以将叢集中的某節點進行離線維護再上線,該過程并不影響整個叢集的運作。
今天小編的主要任務就是來實作HA群集。
Project 1:了解高可用性群集的架構
如圖1-1所示,高可用性群集的幾個重要部分 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116239Hr45.jpg"></a> 圖1-1 1)共享資訊層 在基礎架構上實作心跳資訊探測。雙方節點可以随時探測到對方的心跳資訊,以實作對對方主機工作狀态的探測。三類控制資訊:心跳(Heartbeats),叢集事務資訊(Cluster Transition Messages),重傳資訊(Retransmission Request)。 配置檔案:/etc/ha.d/ha.cf。各節點間域共享密鑰,實作節點間互相通信的認證。加密方式:MD5、HMAC-SHA1 。常用實作軟體:HeartBeat(小編這裡就是使用的這個)、keepalived、ultramonkey、openais/corosync。紅帽官方提供的叢集套件RHCS底層使用的通信機制就是openais/corosync。 2)資源配置設定子層 在資源配置設定上定義資源種類,界定資源歸屬,每個服務需要哪些資源及這些資源之間的前後次序。 叢集資料總管(CRM,常用軟體pacemaker),管理雙方向外提供服務所需用到的資源,包括IP位址、Web服務、共享存儲等等。而這些資源需要依靠叢集資訊庫CIB(XML檔案)來定義,同時還必須保證一旦某個節點上的XML檔案更新,即刻通知其他節點上的XML也要及時更新。 政策引擎(PE Policy Engine):定義法定人數以及根據法定人數所做出的動作等等。 本地資料總管(LRM Local Resource Manager):監控本地某個資源的工作狀況。 3)資源層 本地資源代理(Resource Agent),腳本檔案,一旦叢集資料總管發現某個資源工作異常,立即通知本地資源代理重新開機服務。常用方法: (1)Heartbeat v1(小編這裡使用的); (2)使用腳本LSB scripts (Linux Standards Base ); (3)OCF Open Cluster Format 開放集
Project 2:常用的架構模型
1)主從架構:正常情況下隻有主伺服器工作,當主伺服器當掉從伺服器立即啟用 2)互為主從架構:兩台伺服器提供不同的服務,互相為主從架構,兩台伺服器同時工作 3)多主機架構 N台主機組成一個叢集,分别提供不同的服務,一台伺服器空閑做備節點。或者全部處于工作狀态,一台伺服器出故障,立刻将服務轉移到其他主機上。各節點之間需要以多點傳播的形式将自己的健康情況發送給其他主機。
Project 3:高可用性叢集的實作
1)主從架構 step 1:實驗拓撲規劃,如圖3-1-1所示 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116242jkWr.jpg"></a> 圖3-1-1 Primary eth0 192.168.1.100 eth1 192.168.2.10 //心跳測試 Standby eth0 192.168.1.200 eth1 192.168.2.20 //心跳測試 向外提供Web服務IP:192.168.1.150 step 2:系統與軟體資源需求安裝 小編的系統是Red Hat EnterPrise Linux 5.4 小編的系統上已經安裝了apache2.2.3和php環境,如果讀者不會安裝的話可以參見小編的部落格http://wnqcmq.blog.51cto.com/5200614/1177203 小編将這些軟體包放在/root/heart目錄下了,然後使用不加gpg驗證的本地yum安裝完成 <a href="ftp://195.220.108.108/linux/epel/5/x86_64/heartbeat-2.1.4-11.el5.i386.rpm">heartbeat-2.1.4-11.el5.i386.rpm</a> <a href="ftp://195.220.108.108/linux/centos/5.9/os/i386/CentOS/openhpi-libs-2.14.0-5.el5.i386.rpm">openhpi-libs-2.14.0-5.el5.i386.rpm</a> <a href="http://ftp.univie.ac.at/systems/linux/fedora/epel/5/i386/libnet-1.1.5-1.el5.i386.rpm">libnet-1.1.5-1.el5.i386.rpm</a> primary伺服器的安裝配置 # cd heart/ # yum localinstall ./* --nogpgcheck 這樣安裝省了很多事,系統會自動解決依賴關系,但是讀者還要記着安裝完成之後查詢一下heartbeat到底産生了哪些檔案 # rpm -ql heartbeat 其中/usr/share/doc/heartbeat-2.1.4/目錄下就存放了heartbeat的樣例配置檔案 接下來的工作是修改主機名,Heartbeat依靠伺服器的主機名來識别伺服器,是以使用hostname指令得到的結果必須與uname -n 結果保持一緻。 # vim /etc/sysconfig/network //修改主機名稱; HOSTNAME=primary.a.com # hostname primary.a.com # vim /etc/hosts //修改主機位址映射; 192.168.1.100 primary.a.com primary 192.168.1.200 standby.a.com standby # cd /etc/ha.d/ # cp /usr/share/doc/heartbeat-2.1.4/ha.cf ./ # cp /usr/share/doc/heartbeat-2.1.4/authkeys ./ # cp /usr/share/doc/heartbeat-2.1.4/haresources ./ # vim ha.cf //定義各節點之間Heartbeat程序如何通信; debugfile /var/log/ha-debug //設定調試日志檔案名 logfile /var/log/ha-log //設定其他日志檔案名 keepalive 2 //設定heartbeat之間的時間間隔為2秒; deadtime 30 //在30秒後宣布節點死亡; warntime 10 //在日志中發出late heartbeat警告之前等待的時間,機關為秒; udpport 694 // 使用端口694進行bcast和ucast通信,預設參數; bcast eth1 //在eth1接口上使用廣播heartbeat-”心跳”; node primary.a.com //定義節點; node standby.a.com //定義節點; # dd if=/dev/urandom bs=512 count=1 | openssl md5 //生成節點間域共享密鑰; 14df2a6b5b26b510e7d5d5b16b7cc10b # vim authkeys //定義心跳探測包使用哪種加密方式; auth 1 1 sha1 14df2a6b5b26b510e7d5d5b16b7cc10b # chmod 600 authkeys //僅允許管理者修改檔案; # cp /etc/init.d/httpd /etc/ha.d/resource.d/ # vim haresources //定義資源;檔案給出了相應的格式 primary.a.com 192.168.1.100/24/eth0/192.168.1.255 httpd standby 伺服器的配置 從伺服器的主機名稱為standby.a.com,安裝heartbeat的方法同主伺服器一緻。/etc/hosts檔案、Heartbeat的配置檔案也必須與主機保持一緻。是以這裡采用将primary上的配置檔案直接遠端複制過來的方法: # scp 192.168.1.100:/etc/ha.d/ha.cf ./ # scp 192.168.1.100:/etc/ha.d/authkeys ./ # scp 192.168.1.100:/etc/ha.d/haresources ./ # chmod 600 authkeys step 3:集中測試 分别重新啟動primary和standy伺服器的heartbeat服務,如圖3-1-2、3-1-3所示 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116244wiIw.jpg"></a> 圖3-1-2 這樣就啟動成功了,接下來編寫測試網頁,小編這裡為了讓讀者看的清楚兩台伺服器的工作,是以兩個測試網頁的内容是不同的,而在實際的應用中兩台伺服器上的内容肯定是一緻的啦。 primary伺服器的/var/www/html/index.php内容 <?php for($i=0;$i<9;$i++) echo $i."web1"."<br/>"; ?> standby伺服器的/var/www/html/index.php内容 echo $i."web2"."<br/>"; <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116247hnId.jpg"></a> 圖3-1-4 以上結果是在primary伺服器為主伺服器的情況才會出現的,那麼現在小編就來模拟以下主伺服器成為備份伺服器的情況再來看看,這裡heartbeat提供了一個工具來切換伺服器狀态,在/usr/lib/heartbeat/目錄下,這裡小編在切換伺服器狀态的同時,來監控一下兩台伺服器的日志,讓讀者清楚兩台伺服器之間是如何切換主從關系的 在primary伺服器上執行 # cd /usr/lib/heartbeat/ # ./hb_standby //請求成為輔助伺服器 主伺服器的日志情況如圖3-1-5所示: <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116250fSCB.jpg"></a> 圖3-1-5 從伺服器的日志情況如圖3-1-6所示: <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116252Dtgl.jpg"></a> 圖3-1-6 小編現在來說明一下切換流程 1.primary伺服器發出申請說自己想成為standby伺服器,并且說明standby伺服器可以拿走資源 2.”心跳“(廣播)被standby伺服器抓到,知道primary要變為standby伺服器 3.primary開始釋放資源,可以看到主伺服器關閉了httpd伺服器,當掉了192.168.1.150 4.standby開始申請資源,可以看到standby伺服器開始啟動httpd伺服器,并且啟用對外IP192.168.1.150 5.雙方工作都完成顯示success 此時在重新整理一下PC機的浏覽器看看,結果如圖3-1-7所示 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116255T6uD.jpg"></a> 圖3-1-7 看到了吧,成功轉到standby伺服器了 剛剛不是standby伺服器成為了主伺服器麼,那麼下面小編就來模拟一下主伺服器當掉的情況,這裡小編将監控“心跳”的eth1端口當掉 # ifconfig eth1 down 可以在primary伺服器的日志上看到如圖3-1-8所示的資訊 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116257k45z.jpg"></a> 圖3-1-8 此時再次重新整理一下PC的浏覽器看看,結果如圖3-1-9所示 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116260HX6s.jpg"></a> 圖3-1-9 primary伺服器成功切換成為主伺服器啦 到這裡主從架構的配置以及測試小編就完全示範完了,接下來的工作交個讀者你去動手操作啦,接下來的工作是完成互為主從架構的案例啦
2)互為主從架構
step 1:實驗拓撲規劃,如圖3-2-1所示:
<a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_1366116262GITI.jpg"></a>
圖3-2-1
這裡小編仍然使用主從架構的環境,稍作修改即可 step 2: primary伺服器的資源配置修改 # vim /etc/ha.d/haresources primary.a.com 192.168.1.150/24/eth0/192.168.1.255 httpd standby.a.com 192.168.1.151/24/eth0/192.168.1.255 vsftpd //添加ftp # touch /var/ftp/primary //作為區分用 standby伺服器的資源配置修改 standby.a.com 192.168.1.151/24/eth0/192.168.1.255 vsftpd # touch /var/ftp/standby step 3:重新啟動兩台伺服器的heartbeat服務 # service heartbeat restart step 4:集中測試 <a href="http://wnqcmq.blog.51cto.com/attachment/201304/16/5200614_13661162644Wph.jpg"></a> 圖3-2-2 PC浏覽器輸入ftp://192.168.1.151試試,結果如圖3-2-3所示: 看見了吧,兩台伺服器互相備份,都運作有應用服務,讀者可以自己測試一下将其中一台伺服器當掉,看看結果,小編這裡就不掩飾了,有啥問題請聯系小編哈,至于第三種模式,由于小編的主機有限就沒做了,如果讀者能把上面兩種模式了解透徹,第三種很容易實作啦。
編後語:HA叢集一般都是以兩個節點的形式出現的,單機處理能力有限,是以當伺服器壓力較大時,想擴容伺服器的處理能力往往得把以前的伺服器淘汰掉,浪費了以前的投資;是以對于高通路性需求的商業性網站單純想使用HA群集來解決問題是不可行的,如果再結合LVS來使用,那便是極好的了,至于LVS的實作小編會在後續的部落格中道來,敬請關注哈。。。。。
本文轉自 chenming421 51CTO部落格,原文連結:http://blog.51cto.com/wnqcmq/1179525