Linux 上的高可用中间件
原文地址:http://www.ibm.com/developerworks/cn/linux/l-halinux/
Linux 上的高可用中間件,第 1 部分: heartbeat 與 Apache Web 服務器
開源軟件提供了一個廉價的解決方案
Hidayatullah Shaikh (hshaikh@us.ibm.com), 高級軟件工程師, IBM簡介: 本文是由 5 篇文章組成的系列文章中的第一篇,在文中,您將了解高可用性對軟件意味著什么,學習如何在一個兩節點系統上安裝并設置來自 High-Availability Linux 項目的 heartbeat 軟件。您還將學到如何配置 Apache Web 服務器,將其作為一項高可用性服務來運行。
發布日期: 2004 年 11 月 08 日
級別: 初級
訪問情況 : 7119 次瀏覽
評論:0 (查看 | 添加評論 - 登錄)
為本文評分
維持最長的系統正常運行時間對隨需應變計算的成功來說越來越重要。不幸的是,很多現成即用(off-the-shelf)的高可用性(high availability,HA)解決方案 價格昂貴,而且需要專門技術。本系列的 5 篇文章將提供一個使用公開可用軟件獲得 HA 服務的廉價替代方案。
本系列中的詳盡步驟將展示如何在 Linux 上構建一個高可用性的 Apache Web 服務器、WebSphere MQ 隊列管理器、LoadLeveler 群集、WebSphere Application Server 群集和 DB2 Universal Database。 系統管理員可以投入最少的時間來學習如何使用和維護這個系統。本系列講述的技術也適用于 Linux 上的很多服務。
為了最有效地利用本系列,您應該對 WebSphere MQ、WebSphere Application Server、IBM LoadLeveler、 DB2 Universal Database 以及高可用性群集有基本的了解。
簡介
在業務關鍵型或任務關鍵型環境中使用任何軟件產品,都需要考慮 可用性,這是對系統完成其應該完成的任務(甚至是在出現崩潰、設備故障和環境 災難的情況下)的能力的度量。隨著越來越多商業關鍵型應用程序轉移到 Internet 上,提供高可用性服務 變得日趨重要。
本文將重點介紹實現 HA 解決方案時可能會遇到的一些實現問題。我們將回顧 HA 的概念、可用的 HA 軟件、要使用的硬件, 以及關于 heartbeat(用于 Linux 的開源 HA 軟件)的安裝和配置細節,而且我們將查看如何通過 heartbeat 使 Web 服務器變得高度可用。
回頁首
硬件要求
本系列中描述的測試場景需要以下硬件:
4 個裝有以太網網絡適配器的、支持 Linux 的系統。
一個共享的外部 SCSI 磁盤驅動器(雙硬盤)。
一根 IBM 串口直連線纜(serial null modem cable)。
在我的設置中,我使用的是內存為 1 GB 的 IBM eServer xSeries 335 機器。至于共享磁盤,我將 這些機器中的一臺用作 NFS 服務器。完成安裝所需要的軟件如下所示,盡管對本文來說,只需安裝 Red Hat Enterprise Linux 和 heartbeat 即可:
Red Hat Enterprise Linux 3.0(2.4.21-15.EL)
heartbeat 1.2.2
IBM Java 2 SDK 1.4.2
安裝了 Fix Pack 7 的 WebSphere MQ for Linux 5.3.0.2
LoadLeveler for Linux 3.2
安裝了 Cumulative Fix 1 的 WebSphere Base Edition 5.1.1 for Linux
安裝了 Fixpack 1 的 WebSphere ND 5.1 for Linux
DB2 Universal Database Enterprise Server Edition 8.1 Linux
下載后面 下載部分中列出的代碼包,就可以得到該測試場景。表 1 描述了 hahbcode.tar.gz 中的目錄。
表 1. 示例代碼包中有哪些內容
| 目錄 ? ? ? ? ? | 內容 |
| heartbeat | heartbeat 的示例配置文件 |
| www | 測試用于 Apache Web 服務器的 HA 的 HTML 文件 |
| mq | 用于 WebSphere MQ HA 的腳本和代碼:
|
| loadl | 將 LoadLeveler 作為一項 Linux 服務來啟動和停止的腳本 |
| was | 用于 WebSphere 應用服務器 HA 的腳本和文件:
|
| db2 | 檢查數據庫可用性、創建表、向表中插入行并從表中選擇 行的腳本 |
回頁首
高可用性的概念
高可用性 是在系統、組件或者應用程序發生故障時快速恢復基本服務的系統管理策略。其目的是最大程度地減少服務中斷,而不是容錯。用來解決關鍵商務操作的系統執行故障的最常見解決方案是,使用另一個系統來 等待并接管出故障的系統的負載,使商務操作繼續進行下去。
術語“群集(cluster)”在不同的計算領域有著不同的含義。除非另外指明,否則本文中的 群集 都是指 heartbeat 群集,它是協作提供運行于群集內的高可用性服務的節點和資源(比如磁盤和網絡)的一個集合。 如果這些機器中的一臺出了故障,那么保持商業操作所需要的資源會轉移到群集中另一臺可用機器上。
兩種主要的群集配置是:
備份(standby)配置:最基本的群集配置,在這種配置中,由一個節點執行任務,另一個節點只是作為備份。備份 節點不執行任務,被認為是 空閑的(idle);這種配置有時被稱為 冷備份(cold standby)。 這樣的配置需要高度的硬件冗余。 本系列文章關注的重點是冷備份配置。
接管(Takeover)配置:一種更高級的配置,在這種配置中,所有節點都執行同類任務,在某個節點出現故障時, 關鍵任務可以被接管。在 單邊(one-sided)接管 配置中,備份節點執行一些附加的、不關鍵的、不可移動的任務。 在 相互接管(mutual takeover) 配置中,所有節點都執行高可用性(可移動的)任務。本系列文章沒有介紹接管配置。
在建立一個高可用性群集時,必須為一些關鍵條目制定計劃:
用于存儲數據的硬盤必須通過私有互聯結構(串行線纜)或者 LAN 連接到構成群集的服務器。
必須有自動檢測出故障的資源的方法。這項任務由稱為 心跳監控器(heartbeat monitor) 的軟件組件來完成。
在出故障時,資源所有者必須能被自動轉換為一個或更多正在工作的群集成員。
回頁首
可用的 HA 軟件
很多當前可用的軟件都具備心跳監測和資源接管的功能。這里是可以用于不同操作系統的構建高可用性群集的軟件列表 (請參閱 參考資料中的鏈接):
heartbeat(Linux)
High Availability Cluster Multiprocessing - HACMP(AIX)
IBM Tivoli System Automation for Multiplatforms(AIX、Linux)
Legato AAM 5.1(AIX、HP-UX、Solaris、Linux 和 Windows)
SteelEye LifeKeeper(Linux、Windows)
Veritas Cluster Server(AIX、HP-UX、Solaris、Linux 和 Windows)
本系列介紹的是開源 HA 軟件 heartbeat。不過,您可以將在這學到的概念應用于上面的任意軟件系統。
回頁首
High-Availability Linux 項目和 heartbeat
名為 High-Availability Linux 的開源項目的目標是,通過社區開發努力提供一個提升 Linux 可靠性(reliability)、 可用性(availability)和可服務性(serviceability)(RAS)的群集解決方案。Linux-HA 項目得到了廣泛的應用,是很多有 趣的高可用性解決方案的重要組成部分。
heartbeat 是可以從 Linux-HA 項目 Web 站點公開獲得的軟件包之一。它提供了所有 HA 系統所需要的基本功能,比如 啟動和停止資源、監測群集中系統的可用性、在群集中的節點間轉移共享 IP 地址的所有者等。它通過串行線、以太網接口 或者同時使用二者來監測特定服務(或多個服務)的健康狀況。當前版本支持兩節點配置,使用專門的 heartbeat“pings”來檢查 服務的狀態和可用性。heartbeat 為比本文中所描述的更復雜的情形提供了基礎,比如 active/active 配置,該配置中 兩個節點是并行工作的,負責完成負載平衡。
要獲得更多關于將 heartbeat 和項目應用在什么地方的資料,請訪問 Linux-HA 項目的 Web 站點 (請參閱 參考資料中的鏈接)。
回頁首
群集配置
這些文章中測試使用的群集配置如圖 1 所示。該設置包括一對構成群集服務器(ha1 和 ha2),兩者都可以訪問包含多個物理 磁盤的磁盤盒;服務器處于冷備份模式。應用程序數據需要位于兩個節點都可訪問的共享設備上。該設備可以是一個共享磁盤,或者網絡 文件系統。為了防止數據被破壞,設備本身應該被鏡像或者具有數據保護。這種配置經常被稱作 共享磁盤群集,不過,實際 上,這是一個什么都不共享的體系結構,因為在同一時刻任何磁盤都只能被一個節點訪問。
圖 1. 產品環境中的 heartbeat 群集配置
在測試設置中,我使用的共享磁盤機制是 NFS,如圖 2 所示,不過,我建議使用如圖 1 所示的選項,尤其是在產品環境中時。 兩個系統的串口之間的直連線纜用來在兩個節點間傳輸 heartbeat。
圖 2. 使用 NFS 作為共享文件系統的 heartbeat 群集配置
表 2 給出的是我所使用的兩個節點的配置。在本例中,可以通過 DNS 或者兩個節點上的 /etc/hosts 文件 得到主機名和 IP 地址。
表 2. 測試群集配置
| 角色 | 主機名 | IP 地址 |
| 共享(群集) | ha.haw2.ibm.com | 9.22.7.46 |
| Node1(主) | ha1.haw2.ibm.com | 9.22.7.48 |
| Node2(備份) | ha2.haw2.ibm.com | 9.22.7.49 |
| Node 3(未知) | ha3.haw2.ibm.com | 9.23.7.50 |
| NFS 服務器 | hanfs.haw2.ibm.com | 9.2.14.175 |
回頁首
建立串行連接
通過兩個節點的串口,使用一根直連線纜將它們連接起來?,F在測試串行連接,如下所示:
在 ha1(接收者)上輸入以下內容:
cat < /dev/ttyS0在 ha2(發送者)上輸入以下內容:
echo "Serial Connection test" > /dev/ttyS0您應該會在接收者節點(ha1)上看到這些文本。如果成功,那么互換它們的角色,重新再試一次。
回頁首
建立用作共享文件系統的 NFS
如前所述,在測試設置中,我使用 NFS 在節點間共享數據。
節點 nfsha.haw2.ibm.com 用作 NFS 服務器。
文件系統 /ha 是共享的。
要設置并運行 NFS,需要執行以下操作:
在 nfsha 節點上創建 /ha 目錄。
編輯 /etc/exports 文件。文件包含一個條目列表;每一個條目都指明一個卷是否是共享的,以及它是如何共享的。 清單 1 展示了我的設置中 exports 文件的相關部分。
清單 1. exports 文件
| ... /ha 9.22.7.48(rw,no_root_squash) /ha 9.22.7.46(rw,no_root_squash) /ha 9.22.7.35(rw,no_root_squash) /ha 9.22.7.49(rw,no_root_squash) /ha 9.22.7.50(rw,no_root_squash) ... |
啟動 NFS 服務。如果 NFS 已經在運行,那么您應該運行 /usr/sbin/exportfs -ra 命令,讓 nfsd 重新讀取 /etc/exports 文件。
在兩個 HA 節點(ha1 和 ha2)上,像添加本地文件系統那樣將文件系統 /ha 添加到 /etc/fstab 文件中。清單 2 展示了在我的設置中 fstab 文件的相關部分:
清單 2. fstab 文件
| ... nfsha.haw2.ibm.com:/ha /ha nfs noauto,rw,hard 0 0 ... |
稍后,我們將配置 heartbeat 來安裝該文件系統。
使用清單 3 中所示的命令在該文件系統上對代碼示例 hahdcode.tar.gz 進行解壓縮。 (首先通過下面的 下載部分下載代碼示例。)
清單 3. 解開示例代碼
| cd /ha tar xvfz hahbcode.tar.gz |
回頁首
下載并安裝 heartbeat
通過 參考資料中的鏈接下載 heartbeat,然后輸入清單 4 中的命令,在 ha1 和 ha2 這兩臺 機器上安裝它(按照給出的順序)。
清單 4. 安裝 heartbeat 的命令
| rpm -ivh heartbeat-pils-1.2.2-8.rh.el.3.0.i386.rpm rpm -ivh heartbeat-stonith-1.2.2-8.rh.el.3.0.i386.rpm rpm -ivh heartbeat-1.2.2-8.rh.el.3.0.i386.rpm |
回頁首
配置 heartbeat
要使用 heartbeat,必須配置三個文件:authkeys、ha.cf 和 haresources。我將給出實現中我使用的具體配置; 如果需要更多資料,請參閱 heartbeat Web 站點,并閱讀它們的文檔(請參閱 參考資料)。
1. 配置 /etc/ha.d/authkeys
該文件確定了為群集所使用的認證密鑰;兩個節點上的密鑰必須相同。有三種認證模式可以選擇:crc、md5 或 sha1。 如果您的 heartbeat 運行在一個安全的網絡上,比如例子中的交叉線纜,那么應該使用 crc。從資源的角度看,該方法的花費最低。如果您的網絡不夠安全,但您不是特別多疑,或者不是很關心最小化 CPU 資源的使用,那么應該使用 md5。 最后,如果您想要得到最好的認證,而不考慮 CPU 資源的使用,那么請使用 sha1,因為它最難破解。
文件的格式如下:
auth <number><number> <authmethod> [<authkey>]
在測試設置中,我選擇的是 crc 模式。清單 5 給出了 /etc/ha.d/authkeys 文件。要確保其許可是安全的, 比如 600。
清單 5. authkeys 文件
| auth 2 2 crc |
2. 配置 /etc/ha.d/ha.cf
這個文件將位于安裝后創建的 /etc/ha.d 目錄中。它告訴 heartbeat 使用哪些類型的媒體路徑以及 如何配置它們。該文件還定義了群集中的節點,以及 heartbeat 用來確認系統是否在運行的接口。 清單 6 給出了我的設置中 /etc/ha.d/ha.cf 文件的相關部分。
清單 6. ha.cf 文件
| ... # File to write debug messages to debugfile /var/log/ha-debug # # # File to write other messages to # logfile /var/log/ha-log # # # Facility to use for syslog()/logger # logfacility local0 # # # keepalive: how long between heartbeats? # keepalive 2 # # deadtime: how long-to-declare-host-dead? # deadtime 60 # # warntime: how long before issuing "late heartbeat" warning? # warntime 10 # # # Very first dead time (initdead) # initdead 120 # ... # Baud rate for serial ports... # baud 19200 # # serial serialportname ... serial /dev/ttyS0 # auto_failback: determines whether a resource will # automatically fail back to its "primary" node, or remain # on whatever node is serving it until that node fails, or # an administrator intervenes. # auto_failback on # ... # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node ha1.haw2.ibm.com node ha2.haw2.ibm.com # # Less common options... # # Treats 10.10.10.254 as a pseudo-cluster-member # Used together with ipfail below... # ping 9.22.7.1 # Processes started and stopped with heartbeat. Restarted unless # they exit with rc=100 # respawn hacluster /usr/lib/heartbeat/ipfail ... |
3. 配置 /etc/ha.d/haresources
該文件描述的是 heartbeat 管理的資源。這些資源本質上只是一些 start/stop 腳本,非常類似于在 /etc/rc.d/init.d 中用來啟動和停止資源的那些腳本。注意,heartbeat 會在 /etc/rc.d/init.d 和 /etc/ha.d/resource.d 中去尋找腳本。腳本文件 httpd 是 heartbeat 自帶的。清單 7 給出了我的 /etc/ha.d/haresources 文件:
清單 7. haresources 文件
| ha1.haw2.ibm.com 9.22.7.46 Filesystem::nfsha.haw2.ibm.com:/ha::/ha::nfs::rw,hard httpd |
該文件在兩個節點上必須相同。
這一行指出,在啟動時,要實現以下操作:
令 ha1 為 IP 9.22.7.46 服務。
安裝 NFS 共享文件系統 /ha。
啟動 Apache Web 服務器。
在后面的文章中,我將向這個文件中添加更多的資源。 在關閉時,heartbeat 將執行以下操作:
停止 Apache 服務器。
卸載共享文件系統。
釋放 IP。
這假定 uname -n 命令會顯示 ha1.haw2.ibm.com;您的配置中可能只顯示 ha1, 如果是那樣的話,請使用 ha1。
回頁首
配置 Apache HTTP 服務器的 HA
在這個步驟中,我將對 Apache Web 服務器的設置進行一些修改,使得它可以為共享系統上的文件提供服務,并為機器 ha1 和 ha2 的本地文件系統中的文件提供服務。index.html 文件(包含于代碼示例中)將從共享的磁盤獲得服務,而 hostname.html 文件 將從機器 ha1 和 ha2 上的本地文件系統獲得服務。要實現 Apache Web 服務器的 HA,請執行以下操作:
以 root 身份登錄。
在共享磁盤(/ha)上創建以下目錄:
/ha/www
/ha/www/html
在節點 ha1 上使用下面所示的命令為共享的目錄設置適當的權限:
chmod 775 /ha/www
chmod 775 /ha/www/html
在主節點機和備份節點機上,重命名 Apache Web 服務器的 html 目錄:
mv /var/www/html /var/www/htmllocal
在兩臺機器上使用下面的命令創建指向共享目錄的符號連接:
ln -s /ha/www/html /var/www/html
將 index.html 文件復制到節點 ha1 上的 /ha/www/html 目錄:
cp /ha/hahbcode/www/index.html /var/www/html
必須修改文件中的群集名稱。
將 hostname.html 文件復制到兩臺機器上的 /ha/www/htmllocal 目錄:
cp /ha/hahbcode/www/hostname.html /var/www/html
修改這個文件中的群集名稱和節點名稱。
在兩臺機器上創建指向 hostname.html 文件的符號鏈接:
ln -s /var/www/htmllocal/hostname.html /ha/www/html/hostname.html
現在您就已經準備好測試 HA 實現了。
回頁首
測試 Apaceh HTTP 服務器的 HA
要測試 Web 服務器的高可用性,請執行以下操作:
使用下面的命令啟動主節點上的 heartbeat 服務,然后啟動備份節點上的服務:
/etc/rc.d/init.d/heartbeat start
如果該命令失敗,那么去查看 /var/log/messages,以確定原因并進行改正。heartbeat 成功啟動后,您應該看到一個新的網絡接口,其 IP 地址是您在 ha.cf 文件中配置的那個 IP 地址。啟動 heartbeat 之后,查看一下 主節點上的日志文件(默認是 /var/log/ha-log),確保它正在進行 IP 接管并啟動 Apache Web 服務器。使用 ps 命令來確保 Web 服務器后臺進程正在主節點上運行。heartbeat 將不會在備份 節點上啟動任何 Web 服務進程。只是在主節點失敗時才會在備份節點上啟動 Web 服務進程。
將瀏覽器指向下面的 URL,以確認正確地為兩個 Web 頁提供了服務(如果使用了不同的主機名,那么 URL 應該有所不同):
http://ha.haw2.ibm.com/index.html
http://ha.haw2.ibm.com/hostname.html
注意,在上面我使用的是群集地址,而不是主節點的地址。
對于第一個 URL,瀏覽器將顯示下面的文本:
Hello!!! I am being served from a High Availability Cluster ha.haw2.ibm.com對于第二個 URL,瀏覽器將顯示下面的文本:
Hello!!! I am being served from a node ha1.haw2.ibm.com in a High Availability Cluster ha.haw2.ibm.com在主節點上使用下面的命令僅僅停止 heartbeat 來模擬故障轉移(failover):
/etc/rc.d/init.d/heartbeat stop
您應該會看到,在一分鐘之內,第二個節點上的所有 Web 服務器進程都會啟動。如果不是那樣,那么去查看 /var/log/messages 來確定問題所在并改正它。
將瀏覽器指向下面的 URL,以確認在 ha2 上正確提供了兩個 Web 頁的服務:
http://ha.haw2.ibm.com/index.html
http://ha.haw2.ibm.com/hostname.html
對于第一個 URL,瀏覽器將顯示下面的文本:
Hello!!! I am being served from a High Availability Cluster ha.haw2.ibm.com對于第二個 URL,瀏覽器將顯示下面的文本:
Hello!!! I am being served from a node ha2.haw2.ibm.com in a High Availability Cluster ha.haw2.ibm.com注意,現在正在為該頁提供服務的節點是 ha2。
重新啟動主節點上的 heartbeat 服務。這樣應該會停止第二節點上的 Apache 服務器進程,并在主節點上啟動它們。 主節點應該同時接管群集 IP。
這樣,通過將 Web 頁放置在共享磁盤上,當主節點機器發生故障時,第二節點機器就可以向客戶機提供其服務。故障轉移 對訪問 Web 頁的客戶機來說是透明的。該技術同樣適用于提供 CGI 腳本服務。
回頁首
結束語
我希望您嘗試使用該技術,用廉價的硬件和立即可用的軟件建立一個可用性非常高的 Web 服務器。在本系列的 下一篇文章中,您將看到如何使用 WebSphere MQ 來構建一個高可用性的消息隊列服務器。
回頁首
下載
| Sample code package for this article | hahbcode.tar.gz | 25 KB | HTTP |
關于下載方法的信息
參考資料
您可以參閱本文在 developerWorks 全球站點上的 英文原文。
參閱 High-Availability Linux 項目 Web 站點,以獲得關于 heartbeat 的更多資料,其中包括 heartbeat 的成功故事。
可以從下面這些位置下載本系列文章所需的大部分軟件(注意,不是所有的下載都是免費的):
Red Hat Enterprise Linux 3.0(2.4.21-15.EL)
heartbeat 1.2.2
IBM Java 2 SDK 1.4.2
WebSphere MQ for Linux 5.3.0.2 with Fix Pack 7
WebSphere Base Edition 5.1.1 for Linux with Cumulative Fix 1
DB2 Universal Database Enterprise Server Edition V8.1 for Linux
在 2003 年 8 月出版的歐洲發行刊物 Linux Magazine 上的 Inner Pulse(PDF 格式)一文中, André Bonhte 介紹了如何構建一個 HA NFS 服務器。
參閱關于本文中提及的其他高可用性解決方案的更多資料:
High Availability Cluster Multiprocessing (HACMP)
IBM Tivoli System Automation for Multiplatforms
SteelEye LifeKeeper
Veritas Cluster Server
通過 DB2 UDB 的高可用性和災難恢復概述(developerWorks,2003 年 4 月)一文,了解提供高可用性的 DB2 Universal Database 中的一些特性。
要獲得關于可用性以及如何在企業中間件環境中計劃和維護可用性的詳細討論,請參閱 IBM WebSphere 開發者技術期刊:企業中的可用性規劃(developerWorks,2003 年 12 月)。
在 developerWorks Linux 專區中,可以找到 更多為 Linux 開發者準備的參考資料。
從 developerWorks 的 Speed-start your Linux app 專區下載運行于 Linux 之上的 IBM 中間件產品的免費測試版本,其中包括 WebSphere Studio Application Developer、WebSphere Application Server、DB2 Universal Database、Tivoli Access Manager 和 Tivoli Directory Server,并可查找 how-to 文章和技術支持。
通過參與 developerWorks blogs 加入到 developerWorks 社區中。
在 Developer Bookstore Linux 區中訂購 打折出售的 Linux 書籍。
關于作者
Hidayatullah H. Shaikh 是 IBM T.J. Watson Research Center 的 On Demand Architecture and Development Team 的一名高級軟件工程師。他所感興趣和專長的領域包括業務流程建模和集成、面向服務的體系結構、網格計算、電子交易、企業 Java、數據庫管理系統和高可用群集。您可以通過 hshaikh@us.ibm.com 與 Hidayatullah 聯系。
轉載于:https://blog.51cto.com/flymanhi/1349025
總結
以上是生活随笔為你收集整理的Linux 上的高可用中间件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动游戏高速增长为市场营销带来新的机会
- 下一篇: 编写易于理解代码的六种方式