61 期 - RedHat Cluster for Oracle (下)

網管人雜誌

          本文刊載於 網管人雜誌第 61 期 - 2011 年 2 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。



文章目錄

1、前言
2、RedHat Cluster Suite
          建立叢集名稱 (Cluster Name)
          將儲存設備上 LUN1 空間格式化為 GFS 檔案系統
          安裝 Oracle 10g 於Node1 及 Node2 主機
          使用 Luci 設定 Cluster Node
          使用 Luci 設定 Fence Device
          使用 Luci 設定 Failover Domain
          使用 Luci 設定 Resource
          使用 Luci 設定 Cluster Service
3、災難演練
          網路交換器及網路卡故障演練
          儲存設備光纖連線及 HBA 卡故障演練
          伺服器故障演練
4、結語



1、前言

          在前一篇文章中我們已經安全及設定好叢集運作的環境,接下來我們開始進行 RedHat Cluster 的設定並在叢集設定完成後進行相關的災難演練。



2、RedHat Cluster Suite

          在上一篇文章中提到 網路卡/HBA 卡/儲存設備控制器 這三項裝置我們都已經建立容錯備援機制來避免因為單一裝置損壞而導致營運停擺的風險那麼實體伺服器呢? 同樣的為了因應實體伺服器遭受人為或不可抗拒因素而無法提供服務時我們也必須為實體伺服器建立容錯備援機制,RHEL 提供實體伺服器的高可用性容錯解決方案為 RHCS(RedHat Cluster Suite),在本文的一開始我們已經為 RHEL 安裝好相關的 Cluster 套件,並且目前 RHEL 主機也已經能正確識別儲存設備上的 LUNs 儲存空間,因此所有 RHCS 建置環境條件我們已經準備完成可以開始來進行 RHEL 叢集的設定了!!

          下列設定說明為使用 RedHat Cluster圖形化介面設定工具 Luci 作為主要工具, Luci 管理工具預設登入帳號為 admin,您可透過 luci_admin 指令來設定 Luci 登入密碼,設定完成後即可透過瀏覽器來登入 Luci 管理介面,例如此次實作中請於瀏覽器網址列上輸入 http://192.168.1.11:8084 即可看到 Luci 登入視窗,並輸入您的管理帳號及密碼。

建立叢集名稱 (Cluster Name)

          登入 Luci 後請點選【Cluster】標籤後選擇 【Cluster a New Cluster】 項目並填入 Cluster Name此例為 【Oracle】 及填入 Node1 及 Node2 的 FQDN此例為【db1.weithenn.org、db2.weithenn.org】 及二台主機的管理帳號及密碼後按下 【Submit】 按鈕之後系統即開始建立 Cluster。




將儲存設備上 LUN1 空間格式化為 GFS 檔案系統

          接下來將先前於儲存設備上建立的 LUN1 (Database 556GB) 空間格式化為 RedHat Cluster 運作基礎的 GFS(Global File System) 檔案系統,在格式化以前請先於根目錄下建立資料夾 (此次實作為 /oracledata) 作為屆時格式化空間完成後相對應的掛載目錄。

          請點選【Storage】標籤後選擇【sdc】項目並在 /etc/fstab Mounpoint 及 Mounpoint 欄位填入剛才建立的資料夾名稱 【/oracledata】 後按下【Apply】即開始將 LUN1 空間格式化為 GFS。


          經過上述動作後 db1(Node1) 主機已經完成將儲存設備上 LUN1 空間進行格式化及掛載的動作,因此在 db2(Node2) 主機上只要執行建立資料夾及掛載共用儲存設備中 LUN1 空間即可。
# mkdir /oracledata
# vi /etc/fstab
   /dev/sdc1 /oracledata gfs defaults 0 0
mount –a
# df -h
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sda5             75G   3.3G   68G   5% /
   /dev/sda3             49G   2.0G   45G   5% /oracle
   /dev/sda1            114M    19M   90M  18% /boot
   tmpfs                3.9G     0   3.9G   0% /dev/shm
   /dev/sdc1            556G   1.2G  555G   1% /oracledata



安裝 Oracle 10g 於Node1 及 Node2 主機

          安裝 Oracle 10g 時請注意在 RHEL 中必須事先建立 oracle 這個使用者帳號及 dba 群組並且使用此帳號執行安裝 Oracle 10g的動作 (請勿使用 root 帳號進行安裝),另外請記得必須將 oracle 使用者帳號加入 dba 群組中,此次實作中 oracle 使用者帳號家目錄位於 /oracle 目錄中,請將使用者帳號環境設定檔 (.bash_profile) 加入如下四行內容:
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=testdb

          執行下列指令建立相關資料夾及設定相關權限設定以便屆時能順利安裝 Oracle 10g 的環境,完成後請使用 oracle 使用者帳號登入後進行安裝的動作。
# mkdir -p /oracle/product/10.2.0/db_1
# mkdir /oracle/oraInventory
# chown -R oracle:dba /oracle ; chmod -R 755 /oracle/
# chown oracle:dba /oracledata ; chmod 755 /oracledata
# gunzip 10201_database_linux_x86_64.cpio.gz
# cpio -idvc < /tmp/10201_database_linux_x86_64.cpio
# su – oracle
# cd /tmp/oracle ; ./runInstaller


          上述指令完成後將會跳出 Oracle 安裝圖形化介面,請於安裝時將 Oracle Inventory 指定至剛才建立的 /oracle/oraInventory 目錄,而安裝目的地請指定至剛才建立的 /oracle/product/10.2.0/db_1 目錄,選擇設定時請選擇 Install Database Software only 項目,安裝完成後系統會提示您使用 root 帳號登入系統並執行下列二個 Shell Script:
# sh /oracle/oraInventory/orainstRoot.sh
# sh /oracle/product/10.2.0/db_1/root.sh


          接下來請使用 Oracle 資料庫組態輔助工具指令 dbca 來建立測試用資料庫,此次實作中我們建立名稱為 testdb 的資料庫 (SID) 並且將安裝路徑指定存放至共用儲存設備中 /oracledata/testdb 資料夾,安裝完成後請於 Node 1 主機執行下列指令將 oracle 服務停止後登入至 Node 2 主機進行上述相同的動作安裝 Oracle 10g,倘若您未將 Node 1 上的 oracle 服務停止將造成 Node 2 安裝 Oracle 10g 時在共用儲存設備中的檔案因為被 Node 1 Lock 住而導致安裝失敗。
# sqlplus / as sysdba
     > shutdown immediate



使用 Luci 設定 Cluster Node

          首先請新增此次叢集內的二個成員伺服器 Node1 及 Node2,請於登入 Luci 後選擇【Cluster】標籤後選擇【Add a Node】會請您輸入 Node IP Address 及系統管理帳號及密碼,並請將二項服務 cman、rgmanager 設為 Enable at start-up。



使用 Luci 設定 Fence Device

          何謂 Fence? 當 RHEL 的 Cluster Manager (CMAN) 發現叢集內有節點 (Node) 失效時,它會與叢集中其它的元件通訊來把失敗節點排除在外避免切換到失效的節點,此次使用的 IBM x3650 M3 伺服器的 Fence Device 即為 IBM RSA II (若是HP 伺服器則為 iLO),請於 Luci 管理介面內選擇【Cluster】標籤後選擇【Add a Fence Device】項目後選擇【Fence Type】為【IBM RSAII】而 Name 為【RSA1】及輸入 db1 的 FQDN【db1.weithenn.org】及 IBM RSAII 的登入帳號及密碼,完成 db1 主機的 fence 設定後也請依照相同步驟將 db2 主機的 fence 設定加入。(IBM RSAII 預設登入帳號為大寫英文字母 USERID 密碼則是PASSW0RD,請注意密碼是數字 0 不是英文字母的 O)



使用 Luci 設定 Failover Domain

          接下請設定 Failover Domain,請於 Luci 管理介面中選擇【Cluster】標籤後選擇【Add a Failover Domain】項目,於 Failover Domain Name 欄位填入【ha_domain】並勾選【Restrict failover to this domain`s members】項目,於 node 項目中將 db1、db2 的 member 選項勾選起來並設定 Priority 數值為【1】,請注意 Priority 設定數值的影響!! 再此次實作中我們將二台 Node 皆設定為數值1表示不會有 FailBack 的行為也就是屆時 Active Node 失效切換至 Standby Node 運作後當原來失效的 Active Node 重新回到叢集時不會將目前的 Active Node 服務搶回來,倘若您將 Priority 設定為【1、2】則表示會有 FailBack 的行為。



使用 Luci 設定 Resource

          接下為設定 Failover Domain,請於 Luci 管理介面中選擇【Cluster】標籤後選擇【Add a Resource】項目來新增三項資源設定分別是 Cluster IP Address、GFS、Oracle SID,首先新增IP Address請填入此次實作的 Cluster IP Address 【192.168.1.10】 並勾選 【Monitor link】 項目,接下來是 GFS Resource 請輸入名稱、掛載點、裝置【gfsdata、/oracledata、/dev/sdc1】,最後則是Oracle 10g Failover Instance 設定 SID、Oracle user name、Oracle application home directory內容為 【testdb、oracle、/oracle/product/10.2.0/db_1】,如此一來即完成三項資源的新增,建立此三項資源的目的表示當 Active Node 失效時 Standby Node 所要接手服務時的依據,也就是屆時 Standby Node 會接手Active Node 上運作的Cluster IP Address、共用儲存設備資料及 Oracle 10g 資料庫。



使用 Luci 設定 Cluster Service

          最後為設定 Service 請將剛才新增的三項資源在 RedHat Cluster 中綁定為同一個服務,請於 Luci 管理介面上選擇 【Cluster】 標籤後選擇 【Add a Service】項目,Service Name 請填入【Oracle10g】 而Service Composition 首先選擇剛才新增的資源 IP Address【192.168.1.10】後按下【Add a child】後選擇剛才新增的資源【gfsdata】後再度按下【Add a child】選擇剛才新增的資源【testdb】,勾選【Automatically start this service】項目並於 Failover Domain 選擇剛才新增的【ha_domain】後按下【Add a resource to this service】,Service 設定完成後若看到 Service Name 字體顏色為綠色表示剛才設定的服務已正常運作中,如下圖目前 Cluster 的 Active Node 為 db1 主機所擔任,恭喜您 RedHat Cluster 設定完成!!


          您也可使用指令 clustat 在文字模式下觀察 RedHat Cluster 的運作狀態,如下所示使用指令來觀察 Cluster 狀態並且每秒更新其狀態資訊。
# clustat -i 1
   Cluster Status for Oracle @ Thu Aug 12 11:12:47 2010
   Member Status: Quorate
    Member Name        ID    Status
     -----------------  ----- ------
     db1.weithenn.org   1     Online, rgmanager
     db2.weithenn.org   2     Online, Local, rgmanager
     Service Name       Owner (Last)       State      
     ---------------    ---------------    ------      
     service:Oracle10g  db1.weithenn.org   started




3、災難演練

          終於我們將高可用性環境建置完成,在系統上線運作以前建議您先進行相關災難測試一方面確保設定正確無誤另一方面則先將可能發生的災難演練過一遍後撰寫成企業內部 SOP 以便屆時災難發生時能夠以最快的反應速度來進行處理。

網路交換器及網路卡故障演練

          建置時已經配置了二台實體網路交換器而在 IBM x3650 M3 伺服器上也具有 2 Port 的網路卡,並且在 RHEL 中設定了網路卡備援 Bonding 機制,請分別將網路線接於這二台實體交換器上後我們即可進行如下測試來驗證是否能正確保護到網路連線狀態,並且避免單點失敗的狀況,請在同網段中主機進行持續Ping db1(192.168.1.11)、db2(192.168.1.12) 主機IP Address 的動作:
  • 模擬網路交換器故障: 請將網路交換器其中一台關機後查看網路是否仍然運作中。
  • 模擬網路卡故障及網路線脫落: 將安裝於 db1 及 db2 主機上的二片網路卡上,接於其中一片的網路線拔除後查看網路是否仍然運作中。


儲存設備光纖連線及 HBA 卡故障演練

          建置時IBM DS3400 Storage 儲存設備已經具有二片 Controller 互相備援容錯,並且在 IBM x3650 M3 伺服器上也安裝 2 片 HBA 卡與儲存設備 Controller 互相連接,並且在 RHEL 中設定了 HBA 卡備援機制 Multipath,因此我們可以進行如下測試來驗證是否能正確保護到伺服器與共用儲存設備的連接狀態:
  • 模擬儲存設備控制器故障: 請將儲存設備上其中一片 Controller 關機後查看儲存設備是否能正確運作,並且查看伺服器主機是否仍然可以存取共用儲存設備上的 LUN0 及 LUN1空間。
  • 模擬 HBA 卡故及 Fibre 線脫落: 請將安裝於 db1 及 db2 主機上的二片 HBA 卡上,接於其中一片上的 Fibre 線拔除後查看伺服器主機是否仍然可以存取共用儲存設備。


伺服器故障演練

          建置時設定 RedHat Cluster 及安裝 Oracle 10g 資料庫,我們可以先進行手動切換模擬當 Active Node 需要進行硬體維護時手動切換到 Standby Node,手動切換測試通過後則模擬當 Active Node 意外損壞時能否自動切換至 Standby Node:

  • 手動切換 Node 測試: 首先請您在二台 Node 上都執行clustat –i 1 指令來即時觀察 Cluster 運作狀態,假設目前 Active Node 為 db1 主機您可在 db1 主機上執行下列指令來手動切換服務至 db2 主機上,指令中 –r 參數所帶的字串為剛才使用 Luci 設定的 Cluster Service Name (Oracle10g) 並加上 Node 2 的 FQDN 即可。
# clusvcadm -r Oracle10g -m db2.weithenn.org
# clusvcadm -r Oracle10g -m db1.weithenn.org


  • 自動切換 Node 測試: 當手動切換指令能夠成功運作在二台主機上後證明手動切換 Node 機制運作無誤,此時我們可以模擬 Active Node在無預警的情況下損壞看看服務能否自動切換至 Standby Node,請將 Active Node 關機即可驗證。



4、結語

          經過上一篇及本文的介紹後相信讀者們已經了解到在企業營運環境中應該如何避免因為設備發生單點故障 (SPOF) 而導致企業營運停擺,並透過建置 RedHat Cluster 來達成企業服務的高可用性,並且在服務上線以前進行災難演練以便災難發生時能在最短時間恢復企業服務,除此之外現今競爭激烈的商業環境中若使用者在進行線上購物時因為企業服務停擺造成金流交易中斷,不管是對於企業形象、使用者體驗、金流處理上都是很大的傷害,因此在眾多企業之中誰能提供使用者最好的使用經驗誰就能夠留住使用者 (使用者習慣),因此企業若能建置叢集及配合設備容錯的機制來提供使用者穩定不中斷的高可用性網路服務,相信對於企業及使用者而言都是雙贏的局面。