基於 CentOS 5.2 的RHCS 的高可用性解決方案

火星人 @ 2014-03-04 , reply:0


基於 CentOS 5.2 的RHCS 的高可用性解決方案

基於 CentOS 5.2 的RHCS 的高可用性解決方案

作者:liheng



本文所參考的資源:
史應生《紅帽集群高可用性配置管理和維護之最強版》、《基於紅帽RHEL5U2 GFS2+ISCSI+XEN+Cluster 的高可性解決方案-最新技術版》
鳥哥Linux 私房菜:http://linux.vbird.org/ 網友分享區的 《 MySQL on RHCS 》
RedHat doc: http://www.redhat.com/docs
《 Cluster_Suite_Overview5.2 》、《 Cluster_Administration5.2 》

        感謝以上IT Pro的無私奉獻,沒有你們,我想我不可能體驗到RHCS !




























簡介:
不間斷的無故障的業務運行環境是每一個企業IT系統部署要求的重中之重。任何一個發生在關鍵服務上的停頓故障都會導致直接和間接的企業經濟損失以及客戶的滿意度下降。雖然Linux操作系統已經提供高度的容錯能力,但是關鍵業務系統仍舊需要成熟的技術來實現服務的高可用性,儘可能減少和縮短服務停頓的次數和時間。傳統的通過冗餘和複製硬體設備的解決方式既昂貴且局限性大,用戶只能通過這樣的方式解決企業中最關鍵的業務應用對於可用性的要求。 因此很多企業內部的重要應用由於缺乏高性價比的方案而失去保護,面臨著災難后的長時間恢復和數據的丟失。 同樣的情況下,當企業的IT部門需要對關鍵應用所處軟硬體環境進行調整,或僅僅是作系統維護的時候,這種計劃內的停機也會造成應用重新上線前的長時間服務停止以及潛在的數據丟失。
計算機集群作為一種技術近兩年也越來越受到大家的關注,這也是因為海量信息的不斷廠商要求計算機提升自己的性能,在不能有效的更換硬體設備的情況下,就要通過網路手段,將多台伺服器通過高速的區域網連接,實現統一管理,分散式運算,提高整體系統的性能。
商業的 Unix 市場中,高可用性 ( High Availability ) 是銷售Unix 伺服器解決方案的關鍵。事實上每個 Unix 供貨商都有他們自己的高可用性軟體解決方案,例如IBM 的高可用性叢集軟體解決方案,就是 AIX 上的HACMP ( High Availability Cluster Multi-Processing ) 。其它主要的 Unix 供貨商像 HP,Sun,DEC 和其它的供貨商有許多類似的軟體解決方案可用。High Availability 是現今銷售Unix 給許多企業的關鍵。特別對於需要web-based 和其它必須一整年,每周七天,每天 24 小時可用的伺服器。至於新竄起的網格運算市場而言更是如此。
Red Hat 公司在2007年發布Red Hat Enterprise Linux 5 時,就將原本是作為獨立軟體發售的用於構建企業級集群的集群套件redhat cluster suite(RHCS,紅帽集群套件)集成到了操作系統中一同發布,將RHCS集成到系統中,這意味著將是RHEL產品在集群功能方面的提升。而且RHCS的安裝與管理也將會變得更容易掌握。
紅帽的企業集群解決方案(RHCS)是全球領先的高可用性解決方案,專為紅帽企業Linux量身定做,是全球企業Linux廠商中唯一提供原生集群解決方案的廠商。RHCS集群經過紅帽公司全球研發團隊以及廣大開發者社區的多年打造,已經成為企業級Linux平台上頂尖的高可用解決方案。
紅帽RHCS集群採用了業界成熟的技術和主流國際標準,遵循高度安全和可靠的苛刻要求,被廣泛的部署在電信,金融,政府,軍隊,製造,醫療,商貿,教育等各行業。
          通過長年於主流硬體製造商及軟體製造商的研發協作與合作,紅帽RHCS集群已經在幾乎所有主流硬體平台上運行,並且高度支持主流的資料庫及中間件應用,針對絕大多數網站/網路所必須的應用服務也提供了完整的支持。 紅帽RHCS集群方案已經預置了對主要網路和資料庫服務的支持,用戶可通過紅帽全球專家服務(GlobalProfessional Service)完成對特殊服務和應用的集群定製部署。
        以上花了如此一大篇的篇幅介紹集群技術與Red Hat Cluster Suite ,那麼集群究竟是怎麼一回事?那麼Red Hat Cluster Suite 又憑什麼能夠成為Linux 平台上頂尖的高可用解決方案呢?下面就以這兩個問題展開討論:
一、什麼是集群?
一個集群是由兩台或更多台計算機(也可以稱為節能或成員)同時工作來執行一個任務。群集一般可以分為存儲、高可用群集、高性能群集、負載均衡群集四大類。下面分別對這四類集群進行簡單說明,以及介紹在紅帽群集套件是通過哪一部分功能來實現這一系列功能。
存儲集群在一個集群中為服務提供一個一致的文件系統映像,允許服務同時去讀寫一個單一的共享文件系統。存儲集群通過將數據放到一個共享文件系統中從而消除了在應用程序間拷貝數據的麻煩,並提供一個單一的備份和故障恢復點。Red Hat Cluster Suite通過Red Hat GFS提供一個存儲集群。
Red Hat Cluster Suit高可用性集群通過消除單一故障點和節點故障轉移功能(當一個集群節點失敗后將服務轉移到其他節點上)來提供高可用性。節點故障轉移功能對客戶端是透明的,當節點失敗后客戶端並不會看到節點之間的服務轉移。Red Hat Cluster Suite通過高可用性服務管理組件來提供一個高可用性集群。
負載均衡集群將服務請求調度到集群中的多個節點上。負載均衡是一個低成本、高可用性的集群,因為你可以根據負載情況靈活的添加和刪除節點。在負載均衡集群中當一個節點失敗后,調度器會發現這個失敗並停止向此節點發送請求。節點的失敗對於客戶端是透明的。Red Hat Cluster Suite 通過LVS(Linux Virtual Server)來提供負載均衡集群。
高性能集群在節點上執行并行計算。高性能集群允許應用程序并行計算從而提高應用程序性能。

NOTE:紅帽群集套件暫不支持高性能群集的應用。

二、什麼是 RHCS ?
RHCS即 RedHat Cluster Suite ,中文意思即紅帽集群套件。紅帽集群套件(RedHat Cluter Suite, RHCS)是一套綜合的軟體組件,可以通過在部署時採用不同的配置,以滿足你的對高可用性,負載均衡,可擴展性,文件共享和節約成本的需要。
對於需要最大正常運行時間的應用來說,帶有紅帽集群套件(Red Hat Cluster Suite)的紅帽企業 Linux 集群是最佳的選擇。紅帽集群套件專為紅帽企業 Linux 量身設計,它提供有如下兩種不同類型的集群:
1、應用/服務故障切換-通過創建n個節點的伺服器集群來實現關鍵應用和服務的故障切換
2、IP 負載均衡-對一群伺服器上收到的 IP 網路請求進行負載均衡
利用紅帽集群套件,可以以高可用性配置來部署應用,從而使其總是處於運行狀態-這賦予了企業向外擴展(scale-out)Linux 部署的能力。對於網路文件系統(NFS)、Samba 和Apache 等大量應用的開源應用來說,紅帽集群套件提供了一個隨時可用的全面故障切換解決方案。而對於其它大多數應用來說,客戶可以使用紅帽集群套件提供的模板來創建自定義的故障切換腳本。如果需要,還可以採用紅帽專業服務(Red Hat Professional Services),由專業人員提供量身定製的紅帽集群套件部署服務。
技術要點 :
1、最多支持128個節點(紅帽企業Linux 3 和紅帽企業Linux 4 支持 16 個節點)。
2、可同時為多個應用提供高可用性。
3、NFS/CIFS 故障切換:支持 Unix 和 Windows 環境下使用的高可用性文件。
4、完全共享的存儲子系統:所有集群成員都可以訪問同一個存儲子系統。
5、綜合數據完整性:使用最新的 I/O 屏障(barrier)技術,如可編程的嵌入式和外部電源開關裝置(power switches)。
6、服務故障切換:紅帽集群套件可以確保及時發現硬體停止運行或故障的發生並自動恢復系統,同時,它還可以通過監控應用來確保應用的正確運行並在其發生故障時進行自動重啟。
紅帽集群套件可與 x86、AMD64/EM64T 和 Itanium 計算機上運行的紅帽企業 Linux AS 和紅帽企業 Linux ES 共同使用。像所有紅帽解決方案一樣,它也是以年度訂閱的方式通過紅帽網路提供 。

三、RHCS有哪幾部分組成?
通過前面的介紹,大家知道RHCS是一套綜合的軟體組件包,那麼RHCS是由哪幾部分組成的呢?RHCS主要有下面部分組成:
集群架構—提供一個基本功能使節點作為集群工作在一起:配置文件管理,成員關係管理,鎖管理和柵設備。
高可用性服務管理--提供節點失敗轉移服務,當一個節點失敗后將服務轉移到另一個節點上。
集群管理工具—通過配置和管理工具來配置和管理Red Hat集群。
Linux Virtual Server (LVS)—LVS提供一個基於IP的負載均衡功能,通過LVS可以將客戶請求均勻的分配到集群節點上。
你可以通過下面的組件補充Red Hat集群:
Red Hat GFS (Global File System)--GFS為Red Hat Cluster Suite提供一個集群文件系統,CFS允許多個節點在塊級別上共享存儲。
Red Hat Cluster Suit
   * Cluster Logical Volume Manager (CLVM)--提供邏輯卷管理集群存儲。
   * Global Network Block Device (GNBD)--GFS的一個補充組件用於將存儲在塊級別導出到乙太網上。
在上面介紹了如此多的與集群、RHCS相關的內容,現在就言歸真傳了,講一些真正實用的,與本文密切相關的內容,如讀者對其他相關的內容感興趣,可以自己去找找。因為本文主要是針對於如何使用RHCS構建一個高可用的集群環境,故本文只會針對於RHCS中的高可用集群相關的內容進行介紹,其他的內容就不作介紹啦(如果介紹下去,我想那不是一兩篇文檔的事啦)。
首先,先來熟悉一下本文需要掌握的與RHCS相關的知識點:
1、集群節點(Cluster Node)
集群節點也稱為集群成員,說白了就是一台運行著的伺服器。
2、故障切換域 (Failover domain)
故障切換域是多個群集節點的一個子集,用來執行特定的群集服務。
Note:故障切換域是不需要操作的。
為了維護數據的完整性,一個群集服務可以在同一個時間裡只運行在一個群集節點上。在一個故障切換域里可以指定個容錯優先順序。特定的故障切換優先順序包含分配一個故障切換優先順序別到故障切換域里的每一個節點。故障切換優先順序別用來決定故障轉移次序-----決定哪一個節點上運行的群集服務應該進行故障切換。如果沒有指定故障切換優先順序,一個群集服務可以故障切換到故障切換域里的任何節點上。同樣,如果你要限制一個群集服務只是運行在與它自己相關聯的故障切換域的一個指定的節點上,你也可以對它進行指定(當同一個無限制的故障切換域相關聯的時候,在一個故障切換域里沒有任何成員是可用的事件中,群集服務可以在任何節點啟動)。

在上圖中,故障切換域1(Failover Domain 1)是配置在它自己的域里進行可限制的故障切換的,因為,群集服務X只能在節點A與節點B之間進行故障切換。故障切換2(Failover Domain 2)同樣也是配置在它們自己的域里進行可限制的故障切換。另外,它還進行了故障切換優先順序的配置。在故障切換域2中的優先順序配置中,節點C的故障轉移優先順序別是1,節點B的優先順序別是2,節點D的優先順序別是3。如果節點C出現故障,群集服務Y將故障切換到節點B,如果不能故障切換到節點B,那麼將嘗試故障切換到節點D。故障切換3(Failover Domain 3)是配置成沒有優先順序和限制性的。如果節點上的群集服務Z運行出錯的話,群集服務Z嘗試故障切換到故障切換域3里的任意一個節點上。如果這些節點都是不可用的,群集服務Z將故障切換到集群中的任何一個節點。

上圖顯示的是一個高可用的群集的實例,在這個實例中一個WEB伺服器命名為「Content-Webserver」,它運行集群節點B上,並且集群節點B是在一個故障切換域里,在這個故障切換域里包含節點A、B、D。另外,故障轉移域是配置具有一個故障轉移優先順序的,這個故障轉移的順序是:B-D-A。並且故障轉移只能在這個故障轉移域的節點內進行。群集服務包含如下集群資源:
IP Address resource-------IP Address 10.10.10.201
一個應用程序資源命名為「httpd-content」-----一個WEB伺服器應用程序的初始腳本「/etc/init.d/httpd(指定的httpd)」
一個文件系統資源-------- RedHat GFS 命名為「gfs-content-webserver」

客戶端訪問群集服務是通過 IP 地址10.10.10.201。WEB 伺服器應用程序 httpd-content 開始互動操作。httpd-content 應用程序使用 gfs-content-webserver 文件系統。如果節點B出錯,content-webserver群集服務將故障切換到節點D,如果節點D是不可用的或者同樣也出錯,服務將故障切換到節點A。故障轉移將會造成不會顯示任何錯誤信息給客戶端。群集服務將通過一個相同的IP地址可以從另一個集群節點上實現可訪問,因為它是故障切換前的。

故障切換域是可以在一個發生故障的節點中,用來選擇子組成員有資格來運行群集服務。故障切換域的特性可以在域創建或域創建之後的時候指定,他們是:
無限制的(儘管一個成員子集是首選的,群集服務分配到這個域任何可用的成員上運行)
受限制的(限制成員運行一個指定的群集服務,如果在一個受限制的故障切換域里沒有任何一個成員是可以的,服務將不能啟動)
無序的(運行群集服務的成員是從可用的故障切換域成員中選擇的,而不是通過優先權排序)
有序的(在一個故障切換域中指定一個首選成員序列表)
默認,故障切換域是無限制和無序列的。
在群集具有幾個成員時,使用一個受限制的故障切換域可以最小化設置群集來運行一群集服務(如 httpd,)的工作量。這就需要你在所有運行群集服務的成員上設置配置相等性,而不是建立在整個集群運行群集服務。在受限制的故障切換域里必須設置唯一的成員與群集服務相關聯。
3、資源(Resource)
有許多集群資源類型是可以配置的,以下的三個資源類型將用來定義提供一個高可用的WEB服務功能。
腳本(Script)
IP address
File system
3.1腳本(Script)
腳本資源基本上是參考一個腳本的執行,這個腳本可以是預先存在的或出於一個指定目標撰寫的。
3.2IP address
這個資源地址可以用於任何需要資源地址的群集服務,在同一個群集服務相關聯后,如果認為它是必需的,可以通過一個群集成員重新設置,或者通過一個GUI介面(luci)或命令行。如果任何群集成員提供的服務變得不可用(如硬體或軟體錯誤,網路/連通性錯誤),服務IP將自動遷移到一個有資格的成員上。通常,一部分地址是為不同的群集服務所保留的。
必須定義一個地址給WEB服務用來發布HTML內容。

4、服務(Service)
        在這裡,這個服務(Service)與我們平時所接觸到的 /etc/init.d/httpd 等應用程序是不同的。在RHCS高可用性集群中,服務(Service)實際上指的是一系列資源(Resource)的集合。為什麼這麼說呢?大家想一想,在一個WEB伺服器應用的集群中,如果集群中的主WEB伺服器宕機啦,另一台備用的伺服器開始接管WWW服務,只需要啟動 /etc/init.d/httpd 就行了嗎?在一個高可用性集群中,這樣是不行的,備份伺服器需要全部接管主WEB伺服器所有與集群相關的資源,包括集群使用的IP地址、網頁文件存放的目錄(存放在 sharedisk 上)等,在備份伺服器接管主伺服器的資源時,首先接管IP地址,之後是網頁文件存放目錄(Sharedisk),最後才是啟動 /etc/init.d/httpd start 命令。

5、Fence Device
通過柵設備可以從集群共享存儲中斷開一個節點。柵設備從共享存儲切斷I/O以保證數據的完整性。當CMAN確定一個節點失敗后,它在集群結構中通告這個失敗的節點,fenced進程將失敗的節點隔離,以保證失敗節點不破壞共享數據。Fenced運行在每個節點上。
Red Hat Cluster Suite提供下面集中隔離方式:
   * 電源柵設備
   * 光線通道柵設備
   * GNBD柵
   * 其他柵設備
柵設備實例
當A上的柵進程發現D節點失效時,它通過柵代理通知電源控制器將D節點隔離。


電源柵設備實例 
當A上的柵進程發現D節點失效時,它通過柵代理通知光纖通道交換設備將D節點隔離

光纖通道交換柵設備實例
那麼為什麼RHCS需要使用 Fencing device 呢?在現實生活中,伺服器有時都會出現負載過重,尤其是像資料庫伺服器,在伺服器負載過重時,負載過重會使到伺服器完全處理不過來手上的工作,甚至連 Heartbeat 也無法傳遞,但此時伺服器實際上並沒有宕機,在經過一段時間后,負載沒有那麼重啦,伺服器又重新開始正常工作,Heartbeat 也可以正常傳遞啦。這裡面就有一個問題啦,在RHCS的機制里,主伺服器與備用伺服器是通過 Heartbeat  來進行集群信息傳遞的,在一個規定的時間裡,備份伺服器都會通過  Heartbeat 與主伺服器取得聯繫,以確定主伺服器是否是工作正常。當備用伺服器發現與主伺服器的 Heartbeat 不通時,沒有產生響應時,備用伺服器就會判斷主伺服器已經宕機啦,那麼備用伺服器就會開始接管主伺服器上的集群服務。但是正如上面所描述的,如果主伺服器是由於負載過重,而無法響應備用伺服器的 Heartbeat ,但過了一段時間主伺服器又開始恢復工作啦,集群服務中包含有File System資源,這時就有可能會造成兩台伺服器同時掛載文件系統,就會造成文件系統數據不一致,嚴重的情況可能會損壞整個文件系統。
                RHCS為了避免這種情況,就使用了 Fencing Device 。當RHCS發現主伺服器的Heartbeat 不通時,第一件事不是先接管 Service ,而是利用 Fencing Device 將主伺服器重開機(poweroff),然後備用伺服器再開始接管Service ,這樣就不會發生兩台伺服器同時掛載文件系統資源的情況啦。

6、Conga
                Conga 是一個綜合的軟體組件集,用來提供紅帽集群和存儲的集中控制和配置管理。Conga 主要提供以下功能:
(1)用於管理紅帽集群和存儲的WEB圖形化介面
(2)集群數據和支持包的自動部署
(3)易於整合現有的集群
(4)不需要重新驗證
(5)集群狀態和日記的集成
(6)細粒度用戶許可權控制
在Conga 里主要的組件是 luci 和 ricci ,它們都是單獨安裝的。luci 是一個伺服器(server)組件,它運行在一台計算機上,通過 ricci 可以同多個集群和計算機聯繫。ricci 是一個代理(agent)組件,運行在每一台通過 Conga進行管理的計算機上。
第二,再來介紹一下本次所使用到的技術:
1、共享存儲使用了基於ISCSI的IP-SAN技術。iSCSI集SCSI、乙太網和TCP/IP等技術於一身,支持iSCSI技術的伺服器和存儲設備能夠直接連接到現有的IP交換機和路由器上,具有低廉、開放、大容量、傳輸速度高、安全等諸多優點,最適合需要在網路上存儲和傳輸大量數據的應用環境,比如廣電視頻製作和媒資系統,視頻監控系統,IPTV系統,數據備份系統,以及許多的對IOPS和帶寬性能要求不是還很高的資料庫存儲系統、大容量文件存儲系統。
2、基於Cenos5.2 的RHCS高可用集群的實現,真正避免單點故障,保證服務的不間斷運行 。CentOS(Community ENTerprise Operating System)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。由於出自同樣的源代碼,因此有些要求高度穩定性的伺服器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在於CentOS並不包含封閉源代碼軟體。本次所有伺服器上運行的操作系統都為 CentOS 5.2
最後,我們來首先一下本次試驗的環境:
3、本次環境的網路拓撲:

4、各個伺服器IP的地址規劃
伺服器主機名        IP地址        承擔的角色
Iscsitarget.cqh.com        192.16898.240        IscsiTarget Server ,luci server
Rs-01.cqh.com        192.168.98.231        Iscsi ininiator,ricci agent ,Cluster node
Rs-02.cqh.com        192.168.98.232        Iscsi ininiator,ricci agent ,Cluster node

系統安裝:

語言選擇:簡體中文
鍵盤布局:U.S.English
硬碟分區:
伺服器主機名        IP地址        硬碟分區(8G)
Iscsitarget.cqh.com        192.16898.240        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     5G
/dev/sda5      500M  
/dev/sda6      500M
/dev/sda7      500M

Rs-01.cqh.com        192.168.98.231        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     7.4G
Rs-02.cqh.com        192.168.98.232        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     7.4G
註:iscsitarget.cqh.com 中的 /dev/sda5、/dev/sda6、/dev/sda7 用於 iscsi 共享使用,可以暫不用劃分分區,系統安裝完成後,再進行分區。

主機名與網路設置:按IP地址與主機名規劃表進行設置
時區:Asia/ShangHai
Root password:
包安裝選擇:clustering、 storage clustering,開發工具包全選、伺服器中選擇 web 伺服器與windows文件伺服器
系統安裝完成後,進入系統,使用ntsysv 命令,設置開機自啟動項,將以下啟動項禁用:
NetworkManager
NetworkManagerDispatcher
Acpid
Apmd
Atd
Auditd
Avahi-daemon
Avah-dnsconfd
Bluetooth
Cpuspeed
Cups
Gpm
Hidd
Ip6tables
Iptables
Irqbalance
Isdn
Lvm2-monitor
Mcstrans
Mdmonitor
Netfs
Nfslock
Pcscd
Readahead_early
Restorecond
Rpcgssd
Rpcidmapd
Sendmail
Smartd
Xend
Xendomains
Xfs
Yum-updatesd
禁用 SELINUX
[root @iscsitarget root]# vi /etc/selinux/conifg
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
將 SELINUX=enforcing
改成
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

[ 本帖最後由 liheng 於 2009-5-13 14:04 編輯 ]
《解決方案》

在iscitarget server 上掛載Centos5.2 的第4張光碟到電腦上,找到 scsi-target-untils-0.0-0.20070620snap.el5.i386.rpm
# rpm -ivh scsi-target-untils-0.0-0.20070620snap.el5.i386.rpm
用 fdisk 在本地硬碟上增加三個分區/dev/sda5、/dev/sda6、/dev/sda7(分區的結果與下圖相同),不用格式化。作為rs-01與rs-02 的共享磁碟。

重新啟動電腦,以使剛新增的分區表生效
# reboot
啟動tgt (Linux target framework )服務
# service tgtd start
Tips:
Linux target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance. The key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space.
設置 tgtd 服務開機自啟動
# chkconfig —level 35 tgtd on
新增 target device ,使用 tgtadm 定義 iscsi target 的 qualified 名字
# tgtadm —lld iscsi —op new —mode target —tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
# tgtadm —lld iscsi —op new —mode target —tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
# tgtadm —lld iscsi —op new —mode target —tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3

使用 tgtadm 將上一步新建的target device 加入分區
# tgtadm —lld iscsi —op new —mode logicalunit —tid 1 —lun 1 -b /dev/sda5
# tgtadm —lld iscsi —op new —mode logicalunit —tid 2 —lun 1 -b /dev/sda6
# tgtadm —lld iscsi —op new —mode logicalunit —tid 3 —lun 1-b /dev/sda7

利用下面的指令查看 target device 的內容
# tgtadm —lld iscsi —op show —mode target
Target 1: iqn.2008-12.com.cqh.rhcs-storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
       LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 525M
            Backing store: /dev/sda5
    Account information:
    ACL information:
Target 2: iqn.2008-12.com.cqh.rhcs-storage-2
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf2:0
            SCSI SN: beaf20
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf2:1
            SCSI SN: beaf21
            Size: 517M
            Backing store: /dev/sda6
    Account information:
    ACL information:
Target 3: iqn.2008-12.com.cqh.rhcs-storage-3
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf3:0
            SCSI SN: beaf30
            Size: 0
            Backing store: No backing store
        LUN: 1
           Type: disk
            SCSI ID: deadbeaf3:1
            SCSI SN: beaf31
            Size: 533M
            Backing store: /dev/sda7
    Account information:
    ACL information:



使用 tgtadm 允許客戶端訪問這三個目標邏輯卷
# tgtadm —lld iscsi —op bind —mode target —tid 1 -I ALL
# tgtadm —lld iscsi —op bind —mode target —tid 2 -I ALL
# tgtadm —lld iscsi —op bind —mode target —tid 3 -I ALL

也可以只指定某一台主機可以訪問這三個邏輯卷,如果只想讓192.168.98.231可以訪問共享存儲,就可以用以下指令可以實現
# tgtadm —lld iscsi —op bind —mode target —tid 1 -I 192.168.98.231

使用 tgtadm 驗證所有的目標邏輯卷是否定義正確
# tgtadm —lld iscsi —op show —mode target | grep Target
《解決方案》

因為上面的指令設定結果,重新開機后便會消失,而且現版本的 target server, Red Hat 尚未修改成 System V 服務,所以如果需要讓上述設定在重新開機后依然有效。就需要將上述設定指定全部寫進 /etc/rc.local 文件中,讓系統在重新開機時,再自動執行一次
#  vi /etc/rc.local#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
tgtadm --lld iscsi --op new --mode target --tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sda6
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/sda7
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 3 -I ALL

安裝配置 Iscsi-initiator 客戶端 rs-01.cqh.com
掛載CentOS5.2安裝盤的第一張安裝盤到電腦上,找到 iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm
# rpm -ivh iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

啟動 Iscsi 服務
# service iscsi start
設置 iscsi 服務開機自啟動
# chkconfig —level 35 iscsi on

運行下面的命令,discorery iscsitarget 上的邏輯卷:
# iscsiadm -m discovery -t sendtargets -p 192.168.98.240
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-2
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-3

出現這樣的結果,說明了 iscsitarget 上的邏輯卷已經被成功發現。
使用 iscsiadm 登錄 target
# iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage -p 192.168.98.240 -l
《解決方案》

因為上面的指令設定結果,重新開機后便會消失,而且現版本的 target server, Red Hat 尚未修改成 System V 服務,所以如果需要讓上述設定在重新開機后依然有效。就需要將上述設定指定全部寫進 /etc/rc.local 文件中,讓系統在重新開機時,再自動執行一次
#  vi /etc/rc.local#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
tgtadm --lld iscsi --op new --mode target --tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sda6
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/sda7
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 3 -I ALL

安裝配置 Iscsi-initiator 客戶端 rs-01.cqh.com
掛載CentOS5.2安裝盤的第一張安裝盤到電腦上,找到 iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm
# rpm -ivh iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

啟動 Iscsi 服務
# service iscsi start
設置 iscsi 服務開機自啟動
# chkconfig —level 35 iscsi on

運行下面的命令,discorery iscsitarget 上的邏輯卷:
# iscsiadm -m discovery -t sendtargets -p 192.168.98.240
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-2
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-3

出現這樣的結果,說明了 iscsitarget 上的邏輯卷已經被成功發現。
使用 iscsiadm 登錄 target
# iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage -p 192.168.98.240 -l


# iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage-2 -p 192.168.98.240 -l

# iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage-3 -p 192.168.98.240 -l

使用 fdisk -l 檢驗被識別的設備名
# fdisk -l

圖中的 /dev/sdb、/dev/sdc、/dev/sdd 都是 iscsitarget 上的邏輯卷,分別被識別成了本地的/dev/sdb、/dev/sdc、/dev/sdd 。
在這三個磁碟上,分別建立一個分區,建立成功后結果就為下圖所示:
# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         778     6144862+  83  Linux
/dev/sda3             779         843      522112+  82  Linux swap / Solaris
Disk /dev/sdb: 551 MB, 551061504 bytes
17 heads, 62 sectors/track, 1021 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1021      538036   83  Linux
Disk /dev/sdc: 542 MB, 542836224 bytes
17 heads, 61 sectors/track, 1022 cylinders
Units = cylinders of 1037 * 512 = 530944 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1022      529876+  83  Linux
Disk /dev/sdd: 559 MB, 559286784 bytes
18 heads, 60 sectors/track, 1011 cylinders
Units = cylinders of 1080 * 512 = 552960 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1011      545910   83  Linux

在 rs-01.cqh.com 或 rs-02.cqh.com 上將 /dev/sdb1、/dev/sdc1、/dev/sdd1格式化成ext3文件系統。


在 iscsi target 上配置 luci
初始化 luci
# luci_admin init
《解決方案》

設置 luci 服務開機自啟動
# chkconfig —level 35 luci on
# service luci start
打開Firefox,在地址欄中鍵入 https://luciserver:8084,進入conga 的登錄界面,輸入登錄的用戶名admin 和初始化 luci 時設置的密碼,點擊登錄

首先新建一個 cluster,點擊頂端 cluster,點擊左側 clusters 欄中的 Create a New cluster 項,顯示 Create a new cluster 編輯頁面,如下:

輸入項說明:
Cluster Name:創建的新集群的名稱,集群名稱不能超過15個字元
Node Hostname:要加入集群中的節點主機名稱
Root Password:加入集群節點主機的 root 用戶密碼
Download packages:從Luci伺服器下載集群軟體包
Use locally installed packages:節點使用本地集群安裝包
Enable Shared storage suupport:啟用共享存儲支持,如果需要使用共享存儲的話,勾選此項。
Reboot nodes bdfore joining cluster :在加入集群之前重啟節點計算機
Check if node passwords are indentical:檢查節點的root 密碼是不是相同的。

按輸入項要求輸入內容后,點擊 view SSL_cert fingerprints 顯示每台節點伺服器的SSL驗證信息,如果驗證成功,會顯示如 status messages 中的信息。確認無誤后,點擊 submit 按鈕提交,正在創建集群

在經過對添加的兩個節點的進行:Install----Reboot----Configure----Join.在經過這一番動作后,如果沒有出錯的話,集群就創建成功啦。顯示新建集群 Cluster-001 的全局集群屬性列表,內容包括:General、Fence、Multicast、Quorum partition。

General                -----                顯示集群名稱、集群配置的版本號、高級集群屬性。
Fence                  -----                提供配置 Fence daemon 屬性參數的介面。
Multicast         ----                提供配置多播配置屬性的介面,這些屬性包括:讓集群選擇默認多播
地址與手工指定多播地址
Quorum Partition ----        提供配置集群仲裁分區屬性的介面

Fence 列表內容:

Multicast 列表內容:

仲裁分區列表內容:

點擊 Clusters 欄中的 cluster list ,然後點擊集群名稱 cluster-001,在左邊欄里顯示 cluster-001 的配置欄,點擊配置功能下節點名稱:rs-01.cqh.com 顯示節點名稱:rs-01.cqh.com的狀態:

點擊節點:rs-02.cqh.com 顯示其狀態信息

狀態信息顯示,當前的狀態為 cluster member ,閉幕式顯示 cman、rgmanager 當前正在運行 ,並在集群啟動時自動啟用,如果這兩個程序沒有運行可以手工在節點上運行啟動。
下面開始創建集群的步驟,這裡創建的流程步驟如下:Failover domain → cluster resource→ service → Fence device 。

創建 failover domain,點擊頂端的 cluster ,在Cluster list 中點擊集群:cluster-001,在左下端的 cluster-001 欄中點擊 Failover domain | Add a Failover domain ,顯示新增 Failover domain 編輯頁面:


[ 本帖最後由 liheng 於 2009-4-30 18:33 編輯 ]
《解決方案》

參數解析:
Failover domain name :Failover domain 名稱,建議使用一個易記有代表性的的詞語。
Prioritized :在 Failover domain 中啟用域中成員優先順序設置
Restrict Failover to this domain』s member :在 Failover domain 中啟用服務故障切換限制在這個域中的成員。
Do not fail back services in this domain :在這個域中不使用故障回復服務
在Failover domain member 區域勾選 member 處的複選項框,將節點加入 Failover domain,在 priority 處設置成員的優先順序別,優先順序1的優先順序別最高。
點擊 submit  按鈕提交確定,新增 Failover domain 成功。

創建 resource
在左下端的 cluster-001 欄中點擊 Resource | Add a Resource ,顯示新增資源頁面,在選擇資源類型下拉框中選擇一個資源類型,這裡根據實際情況,選擇 IP Address、Scripts\File Systerm

選擇IP地址

創建 File System resource

創建 scripts resource

創建 service
在左下端的 cluster-001 欄中點擊 Service | Add a Service ,顯示新增服務編輯頁面,在 service name 處輸入服務的名稱,啟用 automatically start this serivce 選項,在Failover domain 中選擇Failover domain ,Recovery policy 處選擇 Relocate ,分別將IP Address、Scripts、File system 資源添加進服務裡面。


添加 Fence Device
在左下端的 cluster-001 欄中點擊 Shared Fence Device | Add a Fence Device 顯示新增 Fence Device 頁面,在 Select a shared fence device 下拉框選擇一下Fence Device ,這裡由於是使用 vmware workstation 進行,所以選擇 Vir

這裡由於是使用 vmware workstation 進行,所以選擇 Virtual machine Fencing


應用 Fence Device



點擊Update main fence properties
《解決方案》

點擊Update main fence properties
至此集群的相關設置就算是完了。現在可以到 rs-01.cqh.com 上去檢查一下集群設置是否成功:
使用 clustat 命令檢查集群是否在運行:

使用 df -h 檢查共享盤是否正常掛載

檢查 httpd 服務是否正常運行:

檢查集群IP地址是否在運行:

編輯 web 頁面的 index.html 文件

打開瀏覽器,在地址欄中輸入 http://192.168.98.244

成功。
測試將rs-01.cqh.com 電腦關機,看集群服務會否會自動轉到 rs-02.cqh.com 電腦上。

在rs-02.cqh.com 主機上查看集群狀態

顯示的狀是 online,但 rs-01.cqh.com 的服務已停止,繼續使用 clustat 命令查看

過了40秒鐘后,雖然  rs-01.cqh.com 的狀態依然是 online ,但服務卻已經故障轉移到rs-02.cqh.com 啦,集群的故障轉移功能生效。繼續使用 clustat 命令查看集群狀態

Rs-01.cqh.com 伺服器的狀態已經是離線啦。故障切換成功,高可用群集生效
《解決方案》

感謝lz
《解決方案》

LZ精神可嘉,但是這個結構的最大問題是沒有實現出fence的真正功能,virtual machine fence是針對RHEL系統XEN環境實現的虛擬機fence,而不是對vmware使用的fence方式。

所以你現在將一台節點關機,這當然沒有問題。因為相當於退出cluster domain以及fence domain; 但是如果你強制切斷心跳線或者把其中一台機器搞死機,你再看看還是這種狀況嗎?!:lol:

[ 本帖最後由 jerrywjl 於 2009-4-30 19:33 編輯 ]
《解決方案》

回復 #9 jerrywjl 的帖子

謝謝 jerrywjl ,又多懂得一點。
也謝謝之前jerrywjl 對我的幫助,謝謝!:em17:



[火星人 via ] 基於 CentOS 5.2 的RHCS 的高可用性解決方案已經有180次圍觀

http://www.coctec.com/docs/service/show-post-4344.html