跳至內容
documentation.suse.com / 管理指南
SUSE Linux Enterprise High Availability Extension 15 SP2

管理指南

本指南適用於需要使用 SUSE® Linux Enterprise High Availability Extension 設定和維護叢集的管理員。為進行快速有效的組態設定和管理,產品提供有圖形使用者介面和指令行介面 (CLI)。本指南介紹了如何透過這兩種方法執行關鍵任務。您可以根據需要選擇適當的工具。

原著者: Tanja RothThomas Schraitle
出版日期: 2023 年 12 月 11 日

版權所有 © 2006–2023 SUSE LLC 和貢獻者。保留所有權利。

根據 GNU 自由文件授權 (GNU Free Documentation License) 1.2 版或 1.3 版 (自由選擇),使用者可以複製、散佈與/或修改本文件;「恆常章節」為此著作權聲明與授權。GNU 自由文件授權一節中包含 1.2 版授權的一份副本。

如需 SUSE 商標,請參閱 http://www.suse.com/company/legal/。所有其他協力廠商的商標所有權分屬其各自的公司。® 等商標符號表示 SUSE 及其關係企業的商標。星號 (*) 表示協力廠商的商標。

本手冊中所有資訊在編輯時,都已全力注意各項細節。但這不保證百分之百的正確性。因此,SUSE LLC 及其關係企業、作者或譯者都不需對任何錯誤或造成的結果負責。

關於本指南

本指南適用於需要使用 SUSE® Linux Enterprise High Availability Extension 設定和維護叢集的管理員。為進行快速有效的組態設定和管理,產品提供有圖形使用者介面和指令行介面 (CLI)。本指南介紹了如何透過這兩種方法執行關鍵任務。您可以根據需要選擇適當的工具。

本指南分為以下幾個部分:

安裝、設定與升級

在開始安裝及設定叢集之前,請先熟悉叢集的基礎知識與結構,瞭解一下其主要功能與優點。掌握須滿足的硬體與軟體要求,及在執行下一步操作之前需做的準備工作。使用 YaST 執行 HA 叢集的安裝與基本設定。瞭解如何將叢集升級至最新的發行版本,或如何更新個別套件。

組態與管理

使用 Web 介面 (Hawk2) 或指令行介面 (crmsh) 新增、設定和管理叢集資源。為了防止未經授權的使用者存取叢集組態,請定義角色並將其指定給特定使用者,以便進行精細控制。瞭解如何使用負載平衡與圍籬區隔。如果您要撰寫自己的資源代辦或修改現有資源代辦,請取得有關如何建立不同類型資源代辦的背景資訊。

儲存與資料複製

SUSE Linux Enterprise High Availability Extension 隨附有叢集感知檔案系統 OCFS2 和 GFS2,以及叢集邏輯磁碟區管理員 (叢集 LVM)。若要複製資料,可以使用 DRBD*。該工具可讓您將高可用性服務的資料自叢集的主動節點鏡像複製到其待命節點。此外,叢集化 SAMBA 伺服器還針對異質環境提供了高可用性解決方案。

附錄

包含常見問題及其解決方案的綜覽。提供本文件中使用的,關於叢集、資源與條件約束的命名慣例。包含 HA 特定術語的詞彙。

1 可用文件

注意
注意:線上文件和最新更新

我們的產品文件可從 https://documentation.suse.com/ 獲取,您也可以在此處找到最新更新,以及瀏覽或下載各種格式的文件。最新的文件更新通常以英語版本提供。

針對本產品提供的文件如下:

《安裝與設定快速入門》

此文件將引導您使用 ha-cluster-bootstrap 套件所提供的開機程序檔,完成最基本的雙節點叢集設定。其中包括將虛擬 IP 位址設定為叢集資源,以及在共享儲存上使用 SBD 做為節點圍籬區隔機制。

《管理指南》

本指南適用於需要使用 SUSE® Linux Enterprise High Availability Extension 設定和維護叢集的管理員。為進行快速有效的組態設定和管理,產品提供有圖形使用者介面和指令行介面 (CLI)。本指南介紹了如何透過這兩種方法執行關鍵任務。您可以根據需要選擇適當的工具。

《使用 DRBD 和 Pacemaker 的高度可用 NFS 儲存》

本文件介紹了如何使用以下元件在雙節點叢集中設定高度可用的 NFS 儲存:DRBD* (Distributed Replicated Block Device,分散式複製區塊裝置)、LVM (Logical Volume Manager,邏輯磁碟區管理員) 和叢集資源管理員 Pacemaker。

《Pacemaker 遠端快速入門》

本文件將引導您完成具有遠端節點或客體節點的高可用性叢集設定,這些節點由 Pacemaker 和 pacemaker_remote 管理。pacemaker_remote 中的 Remote 並不表示實體位置的遠近,而是表示節點的特殊狀態,即這些節點不執行完整的叢集堆疊,因此不屬於叢集的一般成員。

《Geo 叢集快速入門》

Geo 叢集可保護整個全域分散式資料中心的工作負載。本文件會引導您使用 ha-cluster-bootstrap 套件提供的 Geo 開機程序檔完成 Geo 叢集的基本設定。

《Geo 叢集指南》

本文件介紹 Geo 叢集及其元件的設定選項和參數,例如投票間票證管理員、特定 Csync2 設定和所需叢集資源的組態 (以及如何在發生變更時將其傳輸至其他站點)。瞭解如何從指令行或使用 Hawk2 Web 介面監控和管理 Geo 叢集。

2 提供回饋

歡迎為本文件提供回饋及協助我們改進文件!我們提供了多種回饋管道:

服務要求和支援

有關適用於產品的服務與支援選項,請參閱 http://www.suse.com/support/

若要開啟服務要求,需要在 SUSE Customer Center 中擁有一個訂閱。請移至 https://scc.suse.com/support/requests 並登入,然後按一下新建立的

錯誤報告

https://bugzilla.suse.com/ 中報告文件問題。若要簡化此程序,可以使用本文件 HTML 版本中的標題旁邊的報告文件錯誤連結。如此會在 Bugzilla 中預先選取正確的產品和類別,並新增目前章節的連結。然後,您便可以立即開始輸入錯誤報告。需要一個 Bugzilla 帳戶。

協助改進

若要協助我們改進本文件,請使用本文件 HTML 版本中的標題旁邊的編輯原始碼連結。這些連結會將您移至 GitHub 上的原始碼,在其中您可以開啟提取要求。需要一個 GitHub 帳戶。

如需本文件使用的文件環境的詳細資訊,請參閱儲存庫的讀我檔案

郵件

或者,您也可以向以下電子郵件地址報告錯誤以及傳送有關本文件的回饋: <>。請務必包含文件標題、產品版本以及文件發行日期。請參考相關的章節編號和標題 (或包含 URL),並提供問題的簡要說明。

3 文件慣例

本文件中使用以下注意事項與排版慣例:

  • tux > command

    可由任何使用者 (包括 root 使用者) 執行的指令。

  • root # command

    必須具有權限才能執行的指令。通常,您也可以在這些指令前面加上 sudo 指令,以執行該指令。

  • crm(live)# 

    在互動式 crm 外圍程序中執行的指令。如需詳細資料,請參閱第 8 章 「設定和管理叢集資源 (指令行)

  • /etc/passwd:目錄名稱與檔案名稱

  • PLACEHOLDER:以實際的值來取代 PLACEHOLDER

  • PATH:環境變數 PATH

  • ls--help:指令、選項和參數

  • user:使用者或群組

  • 套件名稱:套件的名稱

  • AltAltF1:供人按下的按鍵或案件組合;顯示的按鍵與鍵盤上一樣為大寫

  • 檔案 檔案 ›  另存新檔:功能表項目、按鈕

  • amd64, em64t, ipf 本段落內容僅與 amd64em64tipf 架構相關。箭頭標示了文字區塊的開頭與結尾。

  • Dancing Penguins (「Penguins」一章,↑另一本手冊):這是對另一本手冊中某一章的參考。

  • 注意事項

    警告
    警告

    繼續操作之前必須瞭解的重要資訊。提醒您注意安全問題、可能的資料遺失、硬體損毀或者實際危險。

    重要
    重要

    繼續操作之前應該瞭解的重要資訊。

    注意
    注意

    其他資訊,例如各軟體版本之間的區別。

    提示
    提示

    有用的資訊,例如一條準則或實用的建議。

如需叢集節點和名稱、資源及條件約束的命名慣例綜覽,請參閱附錄 B 「命名慣例

4 產品生命週期和支援

SUSE 產品的支援週期長達 13 年。若要查看產品的生命週期日期,請參閱 https://www.suse.com/lifecycle/

SUSE Linux Enterprise 適用以下生命週期和發行週期:

  • SUSE Linux Enterprise Server 的生命週期為 13 年:10 年的一般支援,以及 3 年的延伸支援。

  • SUSE Linux Enterprise Desktop 的生命週期為 10 年:7 年的一般支援,以及 3 年的延伸支援。

  • 主要版本每 4 年發行一次。Service Pack 每 12-14 個月發行一次。

  • 當新的 SUSE Linux Enterprise Service Pack 發行後,SUSE 會在 6 個月後停止對上一個 Service Pack 的支援。

某些產品提供長期 Service Pack 支援 (LTSS)。如需我們的支援規則和選項的資訊,請參閱 https://www.suse.com/support/policy.htmlhttps://www.suse.com/support/programs/long-term-service-pack-support.html

模組的生命週期、更新規則和更新時間軸與其基本產品不同。模組包含軟體套件,是受到完全支援的 SUSE Linux Enterprise High Availability Extension 元件。

4.1 SUSE Linux Enterprise High Availability Extension 的支援聲明

若要獲得支援,您需要一個適當的 SUSE 訂閱。若要檢視為您提供的特定支援服務,請移至 https://www.suse.com/support/ 並選取您的產品。

支援層級的定義如下:

L1

問題判斷,該技術支援層級旨在提供相容性資訊、使用支援、持續維護、資訊收集,以及使用可用文件進行基本疑難排解。

L2

問題隔離,該技術支援層級旨在分析資料、重現客戶問題、隔離問題區域,並針對層級 1 不能解決的問題提供解決方法,或做為層級 3 的準備層級。

L3

問題解決,該技術支援層級旨在借助工程方法解決層級 2 支援所確認的產品缺陷。

對於簽約的客戶與合作夥伴,SUSE Linux Enterprise High Availability Extension 將為除以下套件外的其他所有套件提供 L3 支援:

  • 技術預覽

  • 音效、圖形、字型和作品。

  • 需要額外客戶合約的套件。

  • 模組 Workstation Extension 隨附的某些套件僅可享受 L2 支援。

  • 名稱以 -devel 結尾的套件 (包含標題檔案和類似的開發人員資源) 只能與其主套件一起接受支援。

SUSE 僅支援使用原始套件,即,未發生變更且未重新編譯的套件。

4.2 技術預覽

技術預覽是 SUSE 提供的旨在讓使用者大略體驗未來創新的各種套件、堆疊或功能。隨附這些預覽只是為了提供方便,讓您有機會在自己的環境中測試新的技術。非常希望您能提供回饋!如果您測試了技術預覽,請聯絡 SUSE 代表,將您的體驗和使用案例告知他們。您的回饋對於我們的未來開發非常有幫助。

但是,技術預覽存在以下限制:

  • 技術預覽仍處於開發階段。因此,它們的功能可能不完整、不穩定,或者在其他方面適合實際生產用途。

  • 技術預覽受支援。

  • 技術預覽可能僅適用於特定的硬體架構。

  • 技術預覽的詳細資料和功能可能隨時會發生變化。因此,可能無法升級至技術預覽的後續版本,而需要進行全新安裝。

  • 我們隨時可能會捨棄技術預覽。例如,如果 SUSE 發現某個預覽不符合客戶或市場需求,或者不能證明它符合企業標準,則可能會捨棄該預覽。SUSE 不承諾未來將提供此類技術的受支援版本。

如需產品隨附的技術預覽綜覽,請參閱 https://www.suse.com/releasenotes/ 上的版本說明。

第 I 部分 安裝、設定與升級

  • 1 產品綜覽
  • SUSE® Linux Enterprise High Availability Extension 是開放原始碼叢集技術的整合套件。它可讓您實作高度可用的實體和虛擬 Linux 叢集,避免單一故障點。該套裝軟體可確保資料、應用程式和服務等重要網路資源的高可用性及可管理性。因此,可協助您保持業務持續運作,保護資料完整性,並可降低關鍵任務 Linux 工作負載的意外停機時間。

    它提供了基本的監控、訊息傳送和叢集資源管理功能,支援個別受管理叢集資源的容錯移轉、錯誤回復和移轉 (負載平衡)。

    本章介紹 High Availability Extension 產品的主要功能以及優點。您會看到幾個範例叢集,並瞭解組成叢集的各個元件。最後一節所敘述的是該架構的綜覽,介紹了叢集內的個別架構層和程序。

    High Availability Extension 叢集內容中使用的一些常見詞彙,可以在詞彙表中找到相關說明。

  • 2 系統要求與建議
  • 下面的小節介紹 SUSE® Linux Enterprise High Availability Extension 的系統要求和一些先決條件。此外,還提供了關於叢集設定的建議。

  • 3 安裝 High Availability Extension
  • 如果您是首次使用 SUSE® Linux Enterprise High Availability Extension 來設定高可用性叢集,最簡單的方法就是從基本的雙節點叢集開始。您也可以使用雙節點叢集來執行一些測試。之後,您便可使用 AutoYaST 複製現有的叢集節點來新增更多節點。複製的節點上會安裝相同的套件,並具有與原始節點相同的系統組態。

    如果要升級執行較低版 SUSE Linux Enterprise High Availability Extension 的現有叢集,請參閱第 5 章 「升級叢集和更新軟體套件

  • 4 使用 YaST 叢集模組
  • YaST 叢集模組可讓您手動從頭開始設定叢集,或修改現有叢集的選項。

    不過,如果您希望採用自動方式設定叢集,請參閱Article “安裝與設定快速入門”。該指南介紹了如何安裝所需的套件,並會引導您建立基本的雙節點叢集,該叢集是使用 ha-cluster-bootstrap 程序檔設定的。

    您還可以將這兩種設定方法結合起來使用,例如,使用 YaST 叢集設定一個節點,然後使用其中一個開機程序檔整合更多節點 (或反之)。

  • 5 升級叢集和更新軟體套件
  • 本章介紹兩種不同的方案:將叢集升級到另一個版本的 SUSE Linux Enterprise High Availability Extension (主要版本或 Service Pack),以及更新叢集節點上的個別套件。請參閱第 5.2 節 「將叢集升級到產品的最新版本」第 5.3 節 「更新叢集節點上的軟體套件」

    如果您要升級叢集,請在開始升級之前查閱第 5.2.1 節 「SLE HA 和 SLE HA Geo 支援的升級路徑」第 5.2.2 節 「升級前的必要準備」

1 產品綜覽

SUSE® Linux Enterprise High Availability Extension 是開放原始碼叢集技術的整合套件。它可讓您實作高度可用的實體和虛擬 Linux 叢集,避免單一故障點。該套裝軟體可確保資料、應用程式和服務等重要網路資源的高可用性及可管理性。因此,可協助您保持業務持續運作,保護資料完整性,並可降低關鍵任務 Linux 工作負載的意外停機時間。

它提供了基本的監控、訊息傳送和叢集資源管理功能,支援個別受管理叢集資源的容錯移轉、錯誤回復和移轉 (負載平衡)。

本章介紹 High Availability Extension 產品的主要功能以及優點。您會看到幾個範例叢集,並瞭解組成叢集的各個元件。最後一節所敘述的是該架構的綜覽,介紹了叢集內的個別架構層和程序。

High Availability Extension 叢集內容中使用的一些常見詞彙,可以在詞彙表中找到相關說明。

1.1 以延伸形式提供

High Availability Extension 做為 SUSE Linux Enterprise Server 15 SP2 的延伸提供。安裝 Geo Clustering for SUSE Linux Enterprise High Availability Extension 後,即可不受距離限制使用高可用性叢集。

1.2 主要功能

SUSE® Linux Enterprise High Availability Extension 可協助您確保和管理網路資源的可用性。下面幾節重點介紹了部分主要功能:

1.2.1 眾多叢集情境

High Availability Extension 支援以下情境:

  • 主動/主動組態

  • 主動/被動組態:N+1、N+M、N 到 1、N 到 M

  • 混合式實體和虛擬叢集,允許虛擬伺服器與實體伺服器叢集在一起。這能提高服務的可用性和資源的使用率。

  • 本地叢集

  • 城際叢集 (延伸的本地叢集)

  • Geo 叢集 (地理位置分散的叢集)

叢集最多可以包含 32 個 Linux 伺服器。使用 pacemaker_remote 可擴充叢集使其突破此限制,以包含更多 Linux 伺服器。可以使用叢集內的任一伺服器重新啟動同一叢集中之失敗伺服器中的資源 (應用程式、服務、IP 位址和檔案系統)。

1.2.2 靈活性

High Availability Extension 附帶 Corosync 訊息傳送與成員資格層及 Pacemaker 叢集資源管理員。使用 Pacemaker,管理員可持續監控其資源的健康狀況和狀態,並管理相依性。他們可根據高度可設定的規則,自動停止和啟動服務。High Availability Extension 可讓您對叢集量身打造,以包含滿足貴組織需求的特定應用程式和硬體架構。時間相關組態可讓服務在指定時間自動移轉回已修復節點。

1.2.3 儲存與資料複製

使用 High Availability Extension,您可以視需要動態指定和重新指定伺服器儲存。它支援光纖通道或 iSCSI 儲存區域網路 (SAN)。還支援共享磁碟系統,但這些系統並非必要系統。SUSE Linux Enterprise High Availability Extension 還隨附了叢集感知檔案系統 (OCFS2) 和叢集邏輯磁碟區管理員 (叢集 LVM2)。若要複製您的資料,請使用 DRBD* 將高可用性服務的資料自叢集主動節點鏡像複製到待命節點。此外,SUSE Linux Enterprise High Availability Extension 還支援一種用於 Samba 叢集的技術:CTDB (叢集化簡單資料庫,Clustered Trivial Database)。

1.2.4 支援虛擬化環境

SUSE Linux Enterprise High Availability Extension 支援包含實體與虛擬 Linux 伺服器的混合叢集。SUSE Linux Enterprise Server 15 SP2 隨附有 Xen (一種開放原始碼的虛擬化監管程式) 和 KVM (基於核心的虛擬機器,Kernel-based Virtual Machine)。KVM 是一款適用於 Linux 的虛擬化軟體,基於硬體虛擬化延伸。High Availability Extension 中的叢集資源管理員可辨識、監控和管理虛擬伺服器以及實體伺服器上正在執行的服務。叢集可以將訪客系統做為服務進行管理。

1.2.5 本地叢集、城際叢集與 Geo 叢集支援

SUSE Linux Enterprise High Availability Extension 已經過延伸,可支援多種不同的地理分佈情境。Geo Clustering for SUSE Linux Enterprise High Availability Extension 支援地理位置分散的叢集 (Geo 叢集)。

本地叢集

一個位置中的單一叢集 (例如,所有節點位於一個資料中心)。此叢集在各節點之間使用多點傳播或單點傳播進行通訊,並在內部管理容錯移轉。網路延遲可以忽略。一般而言,所有節點對儲存的存取都是同步的。

城際叢集

覆蓋面延伸到多棟大樓或資料中心,並透過光纖通道將所有站台連接起來的單一叢集。此叢集在各節點之間使用多點傳播或單點傳播進行通訊,並在內部管理容錯移轉。網路延遲通常比較短 (距離約為 20 英里時,小於 5 毫秒)。對儲存的複製很頻繁 (鏡像複製或同步複製)。

Geo 叢集 (多站點叢集)

多個地理位置分散的站台,每個站台都有一個本地叢集。這些站台透過 IP 進行通訊。站台間的容錯移轉由一個更高階的實體來調節控制。Geo 叢集需要克服有限網路頻寬與高延遲的問題。儲存是以非同步模式複製。

各叢集節點之間的地理位置相隔越遠,可能干擾叢集所提供服務的高可用性的因素就越多。網路延遲、有限的頻寬和對儲存的存取是遠距離叢集面臨的主要挑戰。

1.2.6 資源代辦

SUSE Linux Enterprise High Availability Extension 中包含大量資源代辦,用於管理 Apache、IPv4、IPv6 等眾多資源。它還內建有適用於 IBM WebSphere Application Server 等廣受歡迎的協力廠商應用程式的資源代辦。如需產品隨附的 Open Cluster Framework (OCF) 資源代辦綜覽,請依照第 8.1.3 節 「顯示 OCF 資源代辦的相關資訊」所述使用 crm ra 指令。

1.2.7 簡單易用的管理工具

High Availability Extension 隨附有一組強大的工具。您可使用這些工具進行基本的叢集安裝和設定,並能實現高效的組態設定和管理:

YaST

用於一般系統安裝和管理的圖形使用者介面。使用此使用者介面,可依《安裝與設定快速入門》所述在 SUSE Linux Enterprise Server 的基礎上安裝 High Availability Extension。YaST 在 High Availability Extension 類別中還提供了以下模組,可以幫助您設定叢集或個別元件:

Hawk2

您可以在 Linux 或非 Linux 機器上使用方便使用的 Web 介面來監控和管理高可用性叢集。您可使用 (圖形) 網頁瀏覽器從叢集內外的任何機器存取 Hawk2。因此,即便您使用的只是提供精簡圖形使用者介面的系統,也能完美滿足您的需求。如需詳細資料,請參閱第 7 章 「使用 Hawk2 設定和管理叢集資源

crm 外圍程序

一款功能強大的整合式指令行介面,用於設定資源以及執行所有監控或管理任務。如需詳細資訊,請參閱第 8 章 「設定和管理叢集資源 (指令行)

1.3 優點

High Availability Extension 可讓您最多將 32 部 Linux 伺服器設定到一個高可用性叢集 (HA 叢集) 中。資源可在叢集中的任何節點之間動態切換或移動。資源可以設定為在發生節點故障時自動進行移轉,您也可以手動移動資源以對硬體進行疑難排解或平衡工作負載。

High Availability Extension 利用商用元件提供高可用性。透過將應用程式和操作整合到一個叢集可降低成本。High Availability Extension 還可讓您集中管理整個叢集。您可以調整資源以符合不斷變化的工作負載要求 (即對叢集進行手動負載平衡)。允許具有兩個以上節點的叢集還可透過允許幾個節點共享一個熱備用來節省成本。

它還具有另一個同等重要的優點,就是可以潛在地減少計畫外的服務中斷運作時間,以及為了執行軟體和硬體的維護與升級而進行的計畫內中斷運作時間。

您希望實作叢集的理由包括:

  • 增加可用性

  • 改善效能

  • 降低運作成本

  • 可調適性

  • 災害復原

  • 資料保護

  • 伺服器整合

  • 儲存整合

藉由在共享磁碟子系統上建置 RAID ,可以達到磁碟容錯共享。

下面的案例說明了 High Availability Extension 具備的一些優點。

範例叢集案例

假設您已設定一個含有三個節點的叢集,並在該叢集內的每個節點上都安裝了 Web 伺服器。叢集中的每個節點都代管兩個網站。每個網站上的所有資料、圖形以及網頁內容都儲存在與叢集中的每個節點相連接的共享磁碟子系統上。以下的圖解可以描繪這個設定的可能外觀。

由三台伺服器所構成的叢集
圖 1.1︰ 由三台伺服器所構成的叢集

正常的叢集操作期間,每個節點都會與叢集中的其他節點保持通訊,並會定期輪詢所有已註冊的資源以偵測是否有故障發生。

假設 Web 伺服器 1 發生硬體或軟體問題,且利用 Web 伺服器 1 進行網際網路存取、收發電子郵件和資訊的使用者失去連接。下圖說明當 Web 伺服器 1 發生故障時,資源移動的情形。

一台伺服器故障後,由三台伺服器所構成的叢集
圖 1.2︰ 一台伺服器故障後,由三台伺服器所構成的叢集

網站 A 將移至 Web 伺服器 2,而網站 B 將移至 Web 伺服器 3。IP 位址和證書也會移至 Web 伺服器 2 和 Web 伺服器 3。

當您進行叢集設定時,可以決定發生故障時每一台 Web 伺服器上代管之網站的移動目的地。在前面的範例中,將網站 A 設定為移至 Web 伺服器 2,而將網站 B 設定為移至 Web 伺服器 3。這樣一來,之前由 Web 伺服器 1 處理的工作負載仍可用,並將在所有正常運行的叢集成員之間平均分散。

Web 伺服器 1 發生故障時,High Availability Extension 軟體執行了以下操作:

  • 偵測到故障並向 STONITH 確認 Web 伺服器 1 確實已停止運行。STONITH 是Shoot The Other Node In The Head(關閉另一個節點) 的首字母縮略字。它是一種關閉行為異常節點的方式,可防止這些節點在叢集中引發問題。

  • 將先前掛接於 Web 伺服器 1 上的共享資料目錄重新掛接於 Web 伺服器 2 和 Web 伺服器 3。

  • 在 Web 伺服器 2 和 Web 伺服器 3 上重新啟動先前於 Web 伺服器 1 上執行的應用程式。

  • 將 IP 位址傳送至 Web 伺服器 2 和 Web 伺服器 3。

在此範例中,容錯移轉程序會快速完成,而使用者也將在數秒內重新獲得存取網站資訊的能力,並且通常無需再次登入。

現在假設 Web 伺服器 1 所發生的問題已經解決,並且它已恢復到正常的操作狀態。此時,網站 A 和網站 B 可以自動錯誤回復 (移回) 到 Web 伺服器 1,也可以保留在現有伺服器上。這取決於您是如何為他們設定資源的。將服務移轉回 Web 伺服器 1 會造成一段時間停機。因此,High Availability Extension 也可讓您選擇延遲移轉,等到只會產生短暫服務中斷或不會產生服務中斷時再進行移轉。兩種備選方法各有優缺點。

High Availability Extension 還提供了資源移轉功能。您可以根據系統管理需要,將應用程式、網站等移轉至叢集中的其他伺服器。

例如,您可以手動將網站 A 或網站 B 從 Web 伺服器 1 移至叢集中的任一其他伺服器。此操作的使用案例包括,對 Web 伺服器 1 進行升級或執行排程維護,或者提高網站的效能或存取性。

1.4 叢集組態:儲存

具有 High Availability Extension 的叢集組態不一定會包含共享磁碟子系統。共享磁碟子系統可以透過高速光纖通道卡、纜線和交換器進行連接,也可設定為使用 iSCSI。如果有一個節點發生故障,叢集中的另一個指定節點就會自動掛接先前掛接於故障節點上的共享磁碟目錄。這使得網路使用者得以繼續存取共享磁碟子系統上的目錄。

重要
重要:具有 LVM2 的共享磁碟子系統

使用具有 LVM2 的共享磁碟子系統時,必須將該子系統連接至叢集中需要存取它的所有伺服器。

一般資源包括資料、應用程式和服務。下圖顯示典型光纖通道叢集組態的可能構成。綠色線表示與乙太網網路電源開關的連接。如此裝置便可透過網路控制,並可在 ping 申請失敗時將節點重新開機。

一般光纖通道叢集組態
圖 1.3︰ 一般光纖通道叢集組態

雖然光纖通道提供的效能最佳,但您仍可以將叢集設定為使用 iSCSI。iSCSI 是光纖通道的替代方案,可用於建立低成本的儲存區域網路 (SAN)。下圖顯示一般 iSCSI 叢集組態的可能外觀。

一般 iSCSI 叢集組態
圖 1.4︰ 一般 iSCSI 叢集組態

雖然大多數叢集都包含共享磁碟子系統,但您也可以建立不含共享磁碟子系統的叢集。下圖顯示不含共享磁碟子系統之叢集的可能外觀。

不含共享儲存的一般叢集組態
圖 1.5︰ 不含共享儲存的一般叢集組態

1.5 結構

本節將概要介紹 High Availability Extension 的結構。它識別並提供有關結構元件的資訊,並說明這些元件如何相互操作。

1.5.1 結構層

High Availability Extension 採用分層結構。圖形 1.6 「結構」 說明不同的層及其相關的元件。

結構
圖 1.6︰ 結構

1.5.1.1 成員資格和訊息層 (Corosync)

此元件提供可靠的訊息傳送、成員資格,以及關於叢集的仲裁資訊。相應的程序由 Corosync 叢集引擎 (一個群組通訊系統) 進行處理。

1.5.1.2 叢集資源管理員 (Pacemaker)

用作叢集資源管理員的 Pacemaker 是對叢集中所發生事件做出回應的大腦。它是做為 pacemaker-controld 執行的,即,協調所有動作的叢集控制器。例如,節點加入或退出叢集、資源故障,或者維護等排程的活動均為事件。

本地資源管理員

本地資源管理員位於每個節點上的 Pacemaker 層與資源層之間。它實作為 pacemaker-execd 精靈。透過此精靈,Pacemaker 可以啟動、停止和監控資源。

叢集資訊資料庫 (CIB)

Pacemaker 在每個節點上維護叢集資訊資料庫 (CIB)。CIB 是叢集組態的 XML 表示 (包括叢集選項、節點、資源、條件約束及其相互之間的關係)。CIB 也反映目前叢集狀態。每個叢集節點包含一個在整個叢集中同步的 CIB 複本。pacemaker-based 精靈會處理叢集組態和狀態的讀取與寫入。

指定協調者 (DC)

DC 是從叢集中的所有節點選出的。如果目前沒有 DC,或者目前的 DC 出於任何原因退出叢集,則就會依此方式選出 DC。DC 是叢集中可以決定是否需要執行全叢集變更 (例如圍籬區隔節點或移動資源) 的唯一實體。所有其他節點均從目前 DC 取得其組態和資源配置資訊。

規則引擎

規則引擎在每個節點上執行,但 DC 上的引擎是使用中的引擎。該引擎實作為 pacemaker-schedulerd 精靈。需要叢集轉換時,pacemaker-schedulerd 會依據目前的狀態和組態,計算叢集的下一種預期狀態。它會確定需要排程哪些動作來達到下一種狀態。

1.5.1.3 資源和資源代辦

在高可用性叢集中,資源是指需要保持高度可用的服務。資源代辦 (RA) 是用於啟動、停止和監控叢集資源的程序檔。

1.5.2 程序流程

pacemakerd 精靈將會啟動並監控其他所有相關精靈。用於協調所有動作的精靈 pacemaker-controld 在每個叢集節點上都有一個例項。Pacemaker 會選出其中一個例項做為主要例項,以此來集中做出所有叢集決策。如果選出的 pacemaker-controld 精靈發生失敗,則會建立一個新的精靈。

在叢集中執行的許多動作都會導致全叢集發生變更。這些動作包括新增或移除叢集資源,或變更資源條件約束等。執行此類動作時,必須瞭解叢集中會發生什麼狀況。

例如,假設您要新增叢集 IP 位址資源。為此,您可以使用 crm 外圍程序或 Web 介面來修改 CIB。不必在 DC 上執行動作,您可以使用叢集中的任何節點上的其中一種工具,動作即會轉送至 DC。然後,DC 會將 CIB 變更複製到所有叢集節點。

隨後,pacemaker-schedulerd 將根據 CIB 中的資訊,計算叢集的理想狀態以及應如何達到該狀態。它會將指令清單饋送給 DC。DC 透過訊息傳送/基礎架構層送出指令,而這些指令將由其他節點上的 pacemaker-controld 對等體接收。每個對等體使用自身的本地資源代辦執行程式 (實作為 pacemaker-execd) 來執行資源修改。pacemaker-execd 不支援叢集感知,它會直接與資源代辦互動。

所有對等節點都會將其操作結果報告給 DC。DC 確定已在叢集中成功執行了所有必要的操作後,叢集就會轉回閒置狀態,等待以後的事件。如果有任何操作未按計畫執行,則會用 CIB 中記錄的新資訊再次呼叫 pacemaker-schedulerd

在某些情況下,可能需要關閉節點以保護共享資料或完成資源復原。在 Pacemaker 叢集中,節點層級圍籬區隔的實作為 STONITH。為此,Pacemaker 隨附了一個圍籬區隔子系統 pacemaker-fenced。必須將 STONITH 裝置設定為叢集資源 (使用特定的圍籬區隔代辦),如此可以監控圍籬區隔裝置。當用戶端偵測到故障時,會將一個要求傳送至 pacemaker-fenced,後者再執行圍籬區隔代辦來關閉節點。

2 系統要求與建議

下面的小節介紹 SUSE® Linux Enterprise High Availability Extension 的系統要求和一些先決條件。此外,還提供了關於叢集設定的建議。

2.1 硬體要求

下面的清單指定了基於 SUSE® Linux Enterprise High Availability Extension 之叢集的硬體要求。這些要求代表最低硬體組態。依您打算如何使用叢集而定,您可能還需要其他硬體。

伺服器

1 至 32 部安裝了第 2.2 節 「軟體要求」 中所指定之軟體的 Linux 伺服器。

伺服器可以是裸機,也可以是虛擬機器。它們不需要使用相同的硬體 (記憶體、磁碟空間等等),但必須具有相同的架構。系統不支援跨平台叢集。

使用 pacemaker_remote 可擴充叢集使其突破 32 個節點的限制,以包含更多的 Linux 伺服器。

通訊通道

每個叢集節點至少有兩個 TCP/IP 通訊媒體。網路設備必須支援您希望用於叢集通訊的通信方式:多點傳播或單路廣播。通訊媒體應支援 100 Mbit/s 或更高的資料速率。對於受支援的叢集設定,需要兩個或以上的備援通訊路徑。可以透過以下方式來實現:

  • 網路裝置結合 (優先)。

  • Corosync 中的另一個通訊通道。

如需詳細資料,請分別參閱第 13 章 「網路裝置結合程序 4.3 「定義備援通訊通道」

節點圍籬區隔/STONITH

若要避免電腦分裂的情況,叢集需要有節點圍籬區隔機制。在出現電腦分裂的情況下,叢集節點會因硬體或軟體故障或者網路連接斷開而分成兩個或更多互不相識的群組。圍籬區隔機制會隔離存在問題的節點 (通常是透過重設節點或關閉節點的電源)。這也稱為 STONITH (將其他節點爆頭)。節點圍籬區隔機制可以是實體裝置 (電源開關),也可以是 SBD (依磁碟 STONITH) 等機制與監視程式相結合。使用 SBD 需要共享儲存。

除非使用了 SBD,否則高可用性叢集中的每個節點都必須至少有一個 STONITH 裝置。強烈建議每個節點上有多個 STONITH 裝置。

重要
重要:不支援沒有 STONITH 的組態
  • 您必須為叢集設定節點圍籬區隔機制。

  • 全域叢集選項 stonith-enabledstartup-fencing 必須設定為 true。如果您變更這些選項,將會失去支援。

2.2 軟體要求

將加入叢集的所有節點上都至少需安裝以下模組和延伸:

  • Base System Module 15 SP2

  • Server Applications Module 15 SP2

  • SUSE Linux Enterprise High Availability Extension 15 SP2

根據您在安裝期間選取的系統角色,預設會安裝以下軟體模式:

表 2.1︰ 系統角色和所安裝模式

系統角色

軟體模式 (YaST/Zypper)

HA 節點

  • 高可用性 (sles_ha)

  • 增強型基礎系統 (enhanced_base)

HA GEO 節點

  • Geo Clustering for High Availability (ha_geo)

  • 增強型基礎系統 (enhanced_base)

注意
注意:最小安裝

透過這些系統角色安裝只能完成最小安裝。必要時,您可能需要手動新增更多套件。

對於原本指定了另一個系統角色的機器,您需要手動安裝 sles_haha_geo 模式及所需的任何其他套件。

2.3 儲存需求

有些服務需要使用共用儲存。如果使用外部 NFS 共享,必須能夠從所有叢集節點透過備援通訊路徑可靠地存取該共享。

為了確保資料的高可用性,我們建議您為叢集使用共享磁碟系統 (儲存區域網路,即 SAN)。如果使用共享磁碟子系統,請注意下列事項:

  • 已根據製造商的指示正確設定共用磁碟系統,而且可以正常運作。

  • 共享磁碟系統中包含的磁碟應設定為使用鏡像複製或 RAID,以增強共享磁碟系統的容錯能力。

  • 如果使用 iSCSI 存取共用磁碟系統,必須確定已正確設定 iSCSI 啟動程式和目標。

  • 使用 DRBD* 實作在兩台機器間配送資料的鏡像 RAID 系統時,請務必只存取 DRBD 提供的裝置,切勿存取備份裝置。若要利用備援,可以使用叢集剩餘元件中所用的相同 NIC。

如果使用 SBD 做為 STONITH 機制,則共用儲存還需要符合其他要求。如需詳細資料,請參閱第 11.3 節 「要求」

2.4 其他要求與建議

為了實現受支援且有用的高可用性設定,請考慮以下建議:

叢集節點數

對於包含兩個以上節點的叢集,強烈建議使用奇數數量的叢集節點,以便達到最低節點數。如需最低節點數的詳細資訊,請參閱第 6.2 節 「最低節點數判斷」

時間同步

叢集節點必須與叢集外的 NTP 伺服器同步。自 SUSE Linux Enterprise High Availability Extension 15 起,採用 chrony 做為 NTP 的預設實作。如需詳細資訊,請參閱 《SUSE Linux Enterprise Server 15 SP2 管理指南》

若節點未同步,叢集可能無法正常運作。此外,記錄檔案和叢集報告在未同步的情況下很難進行分析。使用開機程序檔時,若尚未設定 NTP,系統會向您發出警告。

網路介面卡 (NIC) 名稱

在所有節點上都必須相同。

主機名稱與 IP 位址
SSH

所有叢集節點必須能透過 SSH 互相存取。諸如 crm report (用於疑難排解) 等工具以及 Hawk2 的歷程總管,要求節點之間透過無密碼的 SSH 方式來存取,否則它們只能從目前節點收集資料。

注意
注意:法規要求

如果無密碼 SSH 存取不符合法規要求,您可以使用附錄 D 「在沒有 root 存取權限的情況下執行叢集報告中所述的解決方式來執行 crm report

對於歷程總管,目前還沒有其他方式可替代無密碼登入。

3 安裝 High Availability Extension

如果您是首次使用 SUSE® Linux Enterprise High Availability Extension 來設定高可用性叢集,最簡單的方法就是從基本的雙節點叢集開始。您也可以使用雙節點叢集來執行一些測試。之後,您便可使用 AutoYaST 複製現有的叢集節點來新增更多節點。複製的節點上會安裝相同的套件,並具有與原始節點相同的系統組態。

如果要升級執行較低版 SUSE Linux Enterprise High Availability Extension 的現有叢集,請參閱第 5 章 「升級叢集和更新軟體套件

3.1 手動安裝

若要手動安裝 High Availability Extension 的套件,請參閱Article “安裝與設定快速入門”。該指南會引導您完成基本雙節點叢集的設定。

3.2 使用 AutoYaST 進行批量安裝和部署

安裝並設定雙節點叢集後,您可以使用 AutoYaST 複製現有節點並將複製品新增至叢集,以便擴充叢集。

AutoYaST 使用包含安裝和組態資料的設定檔。設定檔會告訴 AutoYaST 要安裝什麼,及如何設定安裝的系統,以便最終部署一個即用系統。之後,可以採用多種方式使用此設定檔進行大規模部署 (例如,複製現存叢集節點)。

如需在各種情境下如何使用 AutoYaST 的詳細說明,請參閱 《AutoYaST Guide for SUSE Linux Enterprise Server 15 SP2》(SUSE Linux Enterprise Server 15 SP2 的 AutoYaST 指南)

重要
重要:完全一樣的硬體

程序 3.1 「使用 AutoYaST 複製叢集節點」假設您要將 SUSE Linux Enterprise High Availability Extension 15 SP2 部署到硬體組態完全一樣的一組機器上。

如果您需要在組態不同的硬體上部署叢集節點,請參閱《SUSE Linux Enterprise 15 SP2 部署指南》「自動安裝」一章中的「基於規則的自動安裝」一節。

程序 3.1︰ 使用 AutoYaST 複製叢集節點
  1. 確定已正確安裝並設定要複製的節點。如需詳細資料,請參閱《SUSE Linux Enterprise High Availability Extension 安裝與設定快速入門》或第 4 章 「使用 YaST 叢集模組

  2. 依照《SUSE Linux Enterprise 15 SP2 部署指南》中的概要描述,進行簡單的大規模部署。基本步驟包括以下幾項:

    1. 建立 AutoYaST 設定檔。請使用 AutoYaST GUI 在現存系統組態的基礎上建立一個設定檔並加以修改。在 AutoYaST 中,選擇High Availability模組,然後按一下複製按鈕。如有需要,調整其他模組中的組態,並將產生的控制檔案儲存為 XML 檔案。

      如果您已設定 DRBD,也可以在 AutoYaST GUI 中選取並複製此模組。

    2. 指定 AutoYaST 設定檔的來源,以及要傳遞給其他節點的安裝常式的參數。

    3. 指定 SUSE Linux Enterprise Server 與 SUSE Linux Enterprise High Availability Extension 安裝資料的來源。

    4. 指定及設定自動安裝的開機程序。

    5. 透過手動新增參數或建立 info 檔案的方式,將指令行傳遞給安裝常式。

    6. 啟動和監控自動安裝程序。

成功安裝副本後,請執行以下步驟將複製的節點加入叢集:

程序 3.2︰ 連接複製的節點
  1. 依照第 4.5 節 「將組態傳輸至所有節點」 所述使用 Csync2 將金鑰組態檔案從設定的節點傳輸到複製的節點。

  2. 若要使節點上線,請依照第 4.8 節 「連接叢集」所述在複製的節點上啟動 Pacemaker 服務。

複製的節點現在將加入叢集,因為 /etc/corosync/corosync.conf 檔案已透過 Csync2 套用至複製的節點。CIB 會自動在叢集節點間同步。

4 使用 YaST 叢集模組

YaST 叢集模組可讓您手動從頭開始設定叢集,或修改現有叢集的選項。

不過,如果您希望採用自動方式設定叢集,請參閱Article “安裝與設定快速入門”。該指南介紹了如何安裝所需的套件,並會引導您建立基本的雙節點叢集,該叢集是使用 ha-cluster-bootstrap 程序檔設定的。

您還可以將這兩種設定方法結合起來使用,例如,使用 YaST 叢集設定一個節點,然後使用其中一個開機程序檔整合更多節點 (或反之)。

4.1 術語定義

下面定義了 YaST 叢集模組和本章中使用的多個關鍵術語。

結合網路位址 (bindnetaddr)

Corosync 執行檔應該結合的網路位址。為方便在整個叢集中共享組態檔案,Corosync 使用了網路介面網路遮罩,以便僅遮罩用於路由網路的位址位元。例如,如果本地介面是 192.168.5.92 且網路遮罩是 255.255.255.0,請將 bindnetaddr 設為 192.168.5.0。如果本地介面是 192.168.5.92 且網路遮罩是 255.255.255.192,請將 bindnetaddr 設為 192.168.5.64

注意
注意:適用於所有節點的網路位址

由於所有節點上將使用相同的 Corosync 組態,因此請務必使用 bindnetaddr 這樣的網路位址,而不要使用特定網路介面的位址。

conntrack 工具

使用這些工具可與內核連接追蹤系統互動,以對 iptables 啟用陳述封包檢查。High Availability Extension 使用它來在叢集節點之間同步連接狀態。如需詳細資訊,請參閱 http://conntrack-tools.netfilter.org/

Csync2

可用於在叢集中的所有節點間,甚至在 Geo 叢集間複製組態檔案的同步工具。Csync2 可以處理任意數量、分屬不同同步群組的主機。每個同步群組都有其自己的主機成員清單,以及定義同步群組中應同步之檔案的包含/排除模式。群組、屬於各個群組的主機名稱以及各個群組的包含/排除規則皆在 Csync2 組態檔案 /etc/csync2/csync2.cfg 中指定。

Csync2 使用 IP 位址和預先共用金鑰在同步群組內進行驗證。您需要為每個同步化群組產生一個金鑰檔案,並將其複製到群組中的所有成員。

如需有關 Csync2 的詳細資訊,請參閱 http://oss.linbit.com/csync2/paper.pdf

現存叢集

現存叢集一詞用於指代至少包含一個節點的任一叢集。現存叢集擁有定義了通訊通道的基本 Corosync 組態,但目前不必擁有資源組態。

多點傳播

網路內進行一對多通訊所採用的一種技術,可用於叢集通訊。Corosync 支援多點傳播與單點傳播。

注意
注意:交換器與多點傳播

若要使用多點傳播進行叢集通訊,請確定您的交換器支援多點傳播。

多點傳播位址 (mcastaddr)

Corosync 可執行檔用於多點傳播的 IP 位址。IP 位址可以是 IPv4 或 IPv6。如果使用的是 IPv6 網路,則必須指定節點 ID。您可以使用您私人網路中的任何多點傳播位址。

多點傳播埠 (mcastport)

用於叢集通訊的連接埠。Corosync 使用兩個連接埠:用於接收多點傳播的指定 mcastport,以及用於傳送多點傳播的 mcastport -1

備援環狀通訊協定 (RRP)

允許使用多重備援區域網路,以針對部分或全部網路錯誤提供恢復功能。如此一來,只要有一個網路正常運作,便仍可進行叢集通訊。Corosync 支援 Totem 備援環狀通訊協定。系統會對所有參與節點施加一個邏輯記號傳遞環,以安全穩妥地傳遞訊息。只有持有記號的節點才允許廣播訊息。

如果 Corosync 中已定義備援通訊通道,請使用 RRP 告知叢集如何使用這些介面。RRP 有三種模式 (rrp_mode):

  • 如果設為 active,Corosync 將會主動使用這兩個介面。但是,此模式已廢棄。

  • 如果設為 passive,Corosync 會選擇性地透過可用網路傳送訊息。

  • 如果設為 none,將會停用 RRP。

單點傳播

一種將訊息傳送至單一網路目的地的技術。Corosync 支援多點傳播與單點傳播。在 Corosync 中,單點傳播是以 UDP 單點傳播 (UDPU) 的形式執行。

4.2 YaST 叢集模組

啟動 YaST 並選取高可用性 › 叢集。也可以從指令行啟動模組:

sudo yast2 cluster

下面的清單顯示了 YaST 叢集模組中可用螢幕的綜覽。它還指出了螢幕是否包含成功設定叢集所需的參數,或其參數是否為選擇性

通訊通道 (必需)

允許您定義用於在叢集節點間進行通訊的一或兩個通訊通道。對於傳輸通訊協定,請使用多點傳播 (UDP) 或單點傳播 (UDPU)。如需詳細資料,請參閱第 4.3 節 「定義通訊通道」

重要
重要:備援通訊路徑

對於受支援的叢集設定,需要兩個或以上的備援通訊路徑。最好使用網路裝置結合,如第 13 章 「網路裝置結合所述。

如果不可行,您需要在 Corosync 中定義另一個通訊通道。

安全性 (選擇性但建議使用)

可讓您定義叢集的驗證設定。HMAC/SHA1 驗證需要使用共享密碼來保護和驗證訊息。如需詳細資料,請參閱第 4.4 節 「定義驗證設定」

設定 Csync2 (選擇性但建議使用)

Csync2 會幫助您追蹤組態變更,並在叢集節點之間保持檔案同步。如需詳細資料,請參閱第 4.5 節 「將組態傳輸至所有節點」

設定 conntrackd (選擇性)

可讓您設定使用者空間 conntrackd。使用 conntrack 工具為 iptables 進行狀態封包檢測。如需詳細資料,請參閱第 4.6 節 「同步叢集節點間的連接狀態」

服務 (必需)

可讓您設定服務以使叢集節點變為線上狀態。定義是否在開機時啟動 Pacemaker 服務,以及是否在防火牆中開啟節點間通訊所需的連接埠。如需詳細資料,請參閱第 4.7 節 「設定服務」

如果您是首次啟動叢集模組,它會顯示為精靈並引導您完成進行基本設定所需的所有步驟。如果並非第一次啟動,可以按一下左側面板上的類別,以存取每個步驟的組態選項。

注意
注意:YaST 叢集模組中的設定

YaST 叢集模組中的一些設定僅適用於目前節點。其他設定可以透過 Csync2 自動傳輸到所有節點。如需詳細資訊,請參閱以下各節。

4.3 定義通訊通道

若要讓叢集節點之間順利進行通訊,至少需定義一個通訊通道。對於傳輸通訊協定,請分別依程序 4.1程序 4.2 所述使用多點傳播 (UDP) 或單點傳播 (UDPU)。如果要定義另一個備援通道 (程序 4.3),則這兩個通訊通道必須使用相同的通訊協定。

注意
注意:公用雲端:使用單點傳播

若要在公用雲端平台中部署 SUSE Linux Enterprise High Availability Extension,請使用單點傳播做為傳輸通訊協定。雲端平台本身在一般情況下並不支援多路廣播。

YaST 通訊通道螢幕中定義的所有設定都會寫入到 /etc/corosync/corosync.conf 中。可在 /usr/share/doc/packages/corosync/ 中找到多點傳播和單路廣播設定的範例檔案。

如果您使用的是 IPv4 位址,則節點 ID 可以選填。如果使用的是 IPv6 位址,則必須填寫節點 ID。YaST 叢集模組提供了一個自動為每個叢集節點產生唯一 ID 的選項,使用者無需手動為每個節點指定 ID。

程序 4.1︰ 定義第一個通訊通道 (多點傳播)

使用多點傳播時,將對所有叢集節點使用相同的 bindnetaddrmcastaddrmcastport。叢集中的所有節點透過使用相同的多點傳播位址瞭解彼此的存在。對於不同的叢集,請使用不同的多點傳播位址。

  1. 啟動 YaST 叢集模組,然後切換到通訊通道類別。

  2. 傳輸通訊協定設定為多點傳播

  3. 定義結合網路位址。將此值設定為要用於叢集多點傳播的子網路。

  4. 定義多點傳播位址

  5. 定義連接埠

  6. 若要為每個叢集節點自動產生唯一的 ID,請將自動產生節點 ID 保留為啟用狀態。

  7. 定義叢集名稱

  8. 輸入預期投票數。此值對 Corosync 非常重要,它要使用該值來為分割叢集計算最低節點數。依預設,每個節點的投票數為 1預期投票數必須與叢集中的節點數相符。

  9. 確認您的變更。

  10. 如果需要,請依程序 4.3 「定義備援通訊通道」所述在 Corosync 中定義備援通訊通道。

YaST 叢集 — 多點傳播組態
圖 4.1︰ YaST 叢集 — 多點傳播組態

如果要使用單點傳播而非多點傳播進行叢集通訊,請依如下所述繼續操作。

程序 4.2︰ 定義第一個通訊通道 (單點傳播)
  1. 啟動 YaST 叢集模組,然後切換到通訊通道類別。

  2. 傳輸通訊協定設定為單點傳播

  3. 定義連接埠

  4. 若要進行單點傳播通訊,Corosync 需要知道叢集中所有節點的 IP 位址。請對將成為叢集成員的每個節點按一下新增,然後輸入以下詳細資料:

    • IP 位址

    • 備援 IP 位址 (僅當在 Corosync 中使用了第二個通訊通道時,才需要指定)

    • 節點 ID (僅當停用了自動產生節點 ID 選項時,才需要指定)

    若要修改或移除叢集成員的任何位址,請使用編輯刪除按鈕。

  5. 若要為每個叢集節點自動產生唯一的 ID,請將自動產生節點 ID 保留為啟用狀態。

  6. 定義叢集名稱

  7. 輸入預期投票數。此值對 Corosync 非常重要,它要使用該值來為分割叢集計算最低節點數。依預設,每個節點的投票數為 1預期投票數必須與叢集中的節點數相符。

  8. 確認您的變更。

  9. 如果需要,請依程序 4.3 「定義備援通訊通道」所述在 Corosync 中定義備援通訊通道。

YaST 叢集 — 單點傳播組態
圖 4.2︰ YaST 叢集 — 單點傳播組態

如果網路裝置結合因某種原因而無法使用,次佳選擇就是在 Corosync 中定義備援通訊通道 (另一個環)。如此便可使用實體位置相互分隔的兩個網路進行通訊。如果一個網路發生故障,叢集節點仍可透過另一個網路進行通訊。

Corosync 中的另一個通訊通道將會形成另一個記號傳遞環狀網路。在 /etc/corosync/corosync.conf 中,您設定的第一個通道就是主環,其環編號為 0。第二個環 (備援通道) 的環編號為 1

如果 Corosync 中已定義備援通訊通道,請使用 RRP 告知叢集如何使用這些介面。借助 RRP,可以使用實體位置相互分隔的兩個網路進行通訊。如果一個網路發生故障,叢集節點仍可透過另一個網路進行通訊。

RRP 可以有三種模式:

  • 如果設為 active,Corosync 將會主動使用這兩個介面。但是,此模式已廢棄。

  • 如果設為 passive,Corosync 會選擇性地透過可用網路傳送訊息。

  • 如果設為 none,將會停用 RRP。

程序 4.3︰ 定義備援通訊通道
重要
重要:備援環狀網路與 /etc/hosts

如果 Corosync 中設定了多個環狀網路,則每個節點都可具有多個 IP 位址。這需要反映在所有節點的 /etc/hosts 檔案中。

  1. 啟動 YaST 叢集模組,然後切換到通訊通道類別。

  2. 啟用備援通道。備援通道必須使用您定義的第一個通訊通道所使用的相同通訊協定。

  3. 如果使用多路廣播,請輸入以下參數:要使用的結合網路位址,以及備援通道的多路廣播位址連接埠

    如果使用單點傳播,請定義以下參數:要使用的結合網路位址連接埠。輸入將加入叢集的所有節點的 IP 位址。

  4. 若要指示 Corosync 如何以及何時使用其他通道,請選取要使用的 rrp_mode

    • 如果只定義了一個通訊通道,則會自動停用rrp_mode(設為 none 值)。

    • 如果設為 active,Corosync 將會主動使用這兩個介面。但是,此模式已廢棄。

    • 如果設為 passive,Corosync 會選擇性地透過可用網路傳送訊息。

    使用 RRP 時,High Availability Extension 會監控目前環的狀態,並在發生故障後自動重新啟用備援環。

    或者,使用 corosync-cfgtool 手動檢查環狀網路狀態。請使用 -h 檢視可用選項。

  5. 確認您的變更。

4.4 定義驗證設定

若要定義叢集的驗證設定,您可以使用 HMAC/SHA1 驗證。此方式需要使用共享密碼來保護和驗證訊息。您指定的驗證金鑰 (密碼) 將用於叢集中的所有節點。

程序 4.4︰ 啟用安全驗證
  1. 啟動 YaST 叢集模組,然後切換到安全性類別。

  2. 啟動啟用安全性驗證

  3. 針對新建立的叢集按一下產生驗證金鑰檔案。系統即會建立一個驗證金鑰並將其寫入 /etc/corosync/authkey

    如果要讓目前機器加入現存叢集,請不要產生新的金鑰檔案,而是將現存叢集某個節點中的 /etc/corosync/authkey 複製到目前機器 (以手動方式或使用 Csync2)。

  4. 確認您的變更。YaST 會將此組態寫入 /etc/corosync/corosync.conf

YaST 叢集 — 安全性
圖 4.3︰ YaST 叢集 — 安全性

4.5 將組態傳輸至所有節點

您應當使用 csync2 工具在叢集中的所有節點間複製產生的組態檔案,而不是手動將其複製到所有節點。

若要如此,您需要執行下列基本步驟:

Csync2 會幫助您追蹤組態變更,並在叢集節點之間保持檔案同步。

  • 您可以定義對操作而言非常重要的檔案清單。

  • 您可以顯示這些檔案的變更 (針對其餘叢集節點)。

  • 您可以使用單一指令同步化設定的檔案。

  • 透過 ~/.bash_logout 中的一個簡單外圍程序程序檔,您在從系統登出之前可以收到變更未同步的提醒。

http://oss.linbit.com/csync2/http://oss.linbit.com/csync2/paper.pdf 上提供了關於 Csync2 的詳細資訊。

4.5.1 使用 YaST 設定 Csync2

  1. 啟動 YaST 叢集模組,然後切換到 Csync2 類別。

  2. 若要指定同步群組,請在同步主機群組中按一下新增,然後輸入叢集中所有節點的本地主機名稱。對於每個節點,都必須使用 hostname 指令傳回的字串。

    提示
    提示:主機名稱解析

    如果您的網路中無法正常進行主機名稱解析,您也可以為每個叢集節點指定主機名稱與 IP 位址的組合。要這樣做,請使用字串主機名稱@IP,例如 alice@192.168.2.100。然後,Csync2 將在連接時使用 IP 位址。

  3. 按一下產生預先共用金鑰建立同步化群組的金鑰檔案。建立的金鑰檔案會寫入 /etc/csync2/key_hagroup。建立之後,必須手動將其複製到叢集的所有成員。

  4. 若要在同步化檔案清單中填入所有節點間執行同步化通常所需的檔案,請按一下新增建議的檔案

  5. 若要在待同步檔案的清單中編輯新增刪除檔案,請使用相應的按鈕。您必須輸入各個檔案的絕對路徑名稱。

  6. 按一下開啟 Csync2以啟動 Csync2。如此會執行以下指令,以在開機時自動啟動 Csync2:

    root # systemctl enable csync2.socket
  7. 確認您的變更。YaST 會將 Csync2 組態寫入 /etc/csync2/csync2.cfg

  8. 若現在要啟動同步程序,請繼續第 4.5.2 節 「使用 Csync2 同步變更」

YaST 叢集 — Csync2
圖 4.4︰ YaST 叢集 — Csync2

4.5.2 使用 Csync2 同步變更

若要成功使用 Csync2 來同步檔案,必須符合以下要求:

  • 同一 Csync2 組態在所有叢集節點上均可用。

  • 同一 Csync2 驗證金鑰在所有叢集節點上均可用。

  • 所有叢集節點上都必須正在執行 Csync2。

因此,在首次執行 Csync2 之前,需要做好以下準備:

程序 4.5︰ 使用 Csync2 準備初始同步
  1. 在依照 所述設定檔案 /etc/csync2/csync2.cfg第 4.5.1 節 「使用 YaST 設定 Csync2」 後,手動將其複製到所有節點。

  2. 將您執行第 4.5.1 節步驟 3 時在一個節點上產生的 /etc/csync2/key_hagroup 檔案複製到叢集中的所有節點。Csync2 在進行驗證時需要使用該檔案。但請在其於節點上重新產生此檔案,因為在所有節點上,該檔案都必須相同。

  3. 在所有節點上執行以下指令,以便立即啟動服務:

    root # systemctl start csync2.socket
程序 4.6︰ 使用 Csync2 同步組態檔案
  1. 若要對所有檔案執行一次初始同步,請在要從中複製組態的機器上執行以下指令:

    root # csync2 -xv

    此操作會將所有檔案推送到其餘節點,從而一次即同步所有檔案。如果成功同步了所有檔案,Csync2 完成時不會顯示任何錯誤。

    如果在其他節點 (不僅在目前節點) 上對要同步的一或多個檔案進行了修改,則 Csync2 會報告有衝突。輸出內容與以下類似:

    While syncing file /etc/corosync/corosync.conf:
    ERROR from peer hex-14: File is also marked dirty here!
    Finished with 1 errors.
  2. 如果您確定目前節點上的是檔案的最佳版本,可以透過強制使用此檔案並重新同步來解決衝突:

    root # csync2 -f /etc/corosync/corosync.conf
    root # csync2 -x

如需 Csync2 選項的詳細資訊,請執行

csync2 -help
注意
注意:發生任何變更後推送同步

Csync2 僅會推送變更,而不會持續在機器間同步檔案。

每次對需要同步的檔案進行更新時,都需要將變更推入至其餘機器:在您進行了變更的機器上執行 csync2  -xv。如果在未變更檔案的任何其他機器上執行該指令,系統不會執行任何操作。

4.6 同步叢集節點間的連接狀態

若要對 iptables 啟用可設定狀態的封包檢查,請設定並使用 conntrack 工具。若要如此,您需要執行下列基本步驟:

  1. 使用 YaST 設定 conntrackd

  2. conntrackd 設定資源 (類別:ocf,提供者:heartbeat)。如果使用 Hawk2 新增資源,請使用 Hawk2 建議的預設值。

設定 conntrack 工具之後,可以將其用於 Linux 虛擬伺服器,請參閱負載平衡

程序 4.7︰ 使用 YaST 設定 conntrackd

使用 YaST 叢集模組設定使用者空間 conntrackd。該工具需要一個不會用於其他通訊通道的專屬網路介面。之後,可透過資源代辦啟動該精靈。

  1. 啟動 YaST 叢集模組,然後切換到設定 conntrackd 類別。

  2. 選取一個用於同步連接狀態的專屬介面。系統會自動偵測到所選介面的 IPv4 位址並在 YaST 中顯示。該介面必須已設定並支援多點傳播。

  3. 定義用於同步連接狀態的多點傳播位址

  4. 群組編號中,定義要與之同步連接狀態的群組數字 ID。

  5. 按一下產生 /etc/conntrackd/conntrackd.conf以建立 conntrackd 的組態檔案。

  6. 如果修改了現存叢集的任何選項,請確認您的變更並關閉叢集模組。

  7. 若要進一步設定叢集組態,請按下一步並繼續第 4.7 節 「設定服務」

YaST 叢集 — conntrackd
圖 4.5︰ YaST 叢集 — conntrackd

4.7 設定服務

在 YaST 叢集模組中定義是否要在節點開機時啟動某些服務。您還可以使用該模組手動啟動和停止服務。若要使叢集節點上線並啟動叢集資源管理員,必須以服務形式執行 Pacemaker。

程序 4.8︰ 啟用 Pacemaker
  1. 在 YaST 叢集模組中,切換至服務類別。

  2. 若要在此叢集節點每次開機時都啟動 Pacemaker,請在開機群組中選取相應的選項。如果在開機群組中選取關閉,則每次此節點開機後,您都必須手動啟動 Pacemaker。若要手動啟動 Pacemaker,請使用以下指令:

    root # crm cluster start
  3. 若要立即啟動或停止 Pacemaker,請按一下相應的按鈕。

  4. 若要在防火牆中開啟所需的連接埠,以便叢集能夠在目前機器上通訊,請啟用在防火牆中開啟埠

  5. 確認您的變更。請注意,該組態僅適用於目前機器,而非所有叢集節點。

YaST 叢集 — 服務
圖 4.6︰ YaST 叢集 — 服務

4.8 連接叢集

完成初始叢集組態設定之後,請在每個叢集節點上啟動 Pacemaker 服務,以使堆疊上線:

程序 4.9︰ 啟動 Pacemaker 並檢查狀態
  1. 登入現存節點。

  2. 檢查該服務是否已在執行:

    root # crm cluster status

    如果未在執行,請立即啟動 Pacemaker:

    root # crm cluster start
  3. 對每個叢集節點重複上述步驟。

  4. 在其中一個節點上,使用 crm status 指令檢查叢集狀態。如果所有節點都已上線,則輸出應如下所示:

    root # crm status
    Last updated: Thu Jul  3 11:07:10 2014
    Last change: Thu Jul  3 10:58:43 2014
    Current DC: alice (175704363) - partition with quorum
    2 Nodes configured
    0 Resources configured
    
    Online: [ alice bob ]

    此輸出表示叢集資源管理員已啟動,並可以管理資源。

完成基本組態設定並使節點上線之後,便可開始設定叢集資源。使用其中一種叢集管理工具,例如 crm 外圍程序 (crmsh) 或 Hawk2。如需更多資訊,請參閱第 8 章 「設定和管理叢集資源 (指令行)第 7 章 「使用 Hawk2 設定和管理叢集資源

5 升級叢集和更新軟體套件

本章介紹兩種不同的方案:將叢集升級到另一個版本的 SUSE Linux Enterprise High Availability Extension (主要版本或 Service Pack),以及更新叢集節點上的個別套件。請參閱第 5.2 節 「將叢集升級到產品的最新版本」第 5.3 節 「更新叢集節點上的軟體套件」

如果您要升級叢集,請在開始升級之前查閱第 5.2.1 節 「SLE HA 和 SLE HA Geo 支援的升級路徑」第 5.2.2 節 「升級前的必要準備」

5.1 術語

下面將介紹本章中使用的最重要的術語定義:

主要版本, 廣泛使用 (GA) 版本

主要版本是一個新的產品版本,增加了新功能和工具並停用了先前已取代的元件。其含有不可反向相容的變更。

叢集離線升級

如果新產品版本包含不可回溯相容的重大變更,則需要透過叢集離線升級來升級叢集。需要先將所有節點離線並將叢集做為一個整體進行升級,然後才能將所有節點恢復線上狀態。

叢集滾存升級

執行叢集滾存升級時,每次會升級一個叢集節點,此時,叢集的其他節點仍在執行中。您可以將第一個節點離線,進行升級,然後再將其恢復線上狀態以加入叢集。然後,需要對每個節點重複上述程序,直到所有叢集節點都升級為主要版本。

Service Pack (SP)

將多個修補程式合併為一種易於安裝或部署的形式。Service Pack 都指定了編號,通常包含程式的安全性修正、更新、升級或增強。

更新

安裝某個套件的較新次要版本,其中通常包含安全修復和其他重要修復。

升級

安裝套件或套裝作業系統的較新主要版本,會引入新功能。另請參閱叢集離線升級叢集滾存升級

5.2 將叢集升級到產品的最新版本

支援哪種升級路徑以及如何執行升級,視目前產品版本以及您要移轉到的目標版本而定。

  • 叢集滾存升級只能在同一個主要版本中進行,例如從產品版本 GA 滾存升級至下一個 Service Pack,以及從一個 Service Pack 滾存升級至下一個 Service Pack。

  • 若要從一個主要版本升級至下一個主要版本 (例如,從 SLE HA 12 升級至 SLE HA 15),或者從一個主要版本的 Service Pack 升級至下一個主要版本 (例如,從 SLE HA 12 SP3 升級至 SLE HA 15),需要執行叢集離線升級。

第 5.2.1 節提供了 SLE HA (Geo) 的受支援升級路徑綜覽。如需詳細資料欄列出了您應參考的特定升級文件 (還包括基礎系統和 Geo Clustering for SUSE Linux Enterprise High Availability Extension)。此文件可從以下位置取得:

重要
重要:升級後不支援混合叢集和降級
  • 不支援在 SUSE Linux Enterprise High Availability Extension 12/SUSE Linux Enterprise High Availability Extension 15 上執行混合叢集。

  • 執行了升級到產品版本 15 的程序之後,將支援還原到產品版本 12。

5.2.1 SLE HA 和 SLE HA Geo 支援的升級路徑

升級來源與目標

升級路徑

相關詳細資料

從 SLE HA 11 SP3 到

SLE HA (Geo) 12

叢集離線升級

  • 基礎系統:SLES 12 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:從產品版本 11 升級至 12:叢集離線升級

  • SLE HA Geo:SLE HA 12 的《Geo 叢集快速入門》中的「從 SLE HA (Geo) 11 SP3 升級至 SLE HA Geo 12」一節

從 SLE HA (Geo) 11 SP4 到 SLE HA (Geo) 12 SP1

叢集離線升級

  • 基礎系統:SLES 12 SP1 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:從產品版本 11 升級至 12:叢集離線升級

  • SLE HA Geo:SLE HA 12 SP1 的《Geo 叢集快速入門》中的「升級至最新產品版本」一節

從 SLE HA (Geo) 12 到 SLE HA (Geo) 12 SP1

叢集滾存升級

  • 基礎系統:SLES 12 SP1 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:SLE HA 12 SP1 的《Geo 叢集快速入門》中的「升級至最新產品版本」一節

從 SLE HA (Geo) 12 SP1 到 SLE HA (Geo) 12 SP2

叢集滾存升級

  • 基礎系統:SLES 12 SP2 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:SLE HA 12 SP2 的《Geo 叢集快速入門》中的「升級至最新產品版本」一節

  • DRBD 8 到 DRBD 9:從 DRBD 8 移轉到 DRBD 9

從 SLE HA (Geo) 12 SP2 到 SLE HA (Geo) 12 SP3

叢集滾存升級

  • 基礎系統:SLES 12 SP3 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:SLE HA 12 SP3 的《Geo 叢集指南》中的「升級至最新產品版本」一節

從 SLE HA (Geo) 12 SP3 到 SLE HA (Geo) 12 SP4

叢集滾存升級

  • 基礎系統:SLES 12 SP4 的《部署指南》中的「更新和升級 SUSE Linux Enterprise」部分

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:SLE HA 12 SP4 的《Geo 叢集指南》中的「升級至最新產品版本」一節

從 SLE HA (Geo) 12 SP3 到 SLE HA (Geo) 15

叢集離線升級

從 SLE HA (Geo) 15 SP4 到 SLE HA (Geo) 12 SP1

叢集離線升級

從 SLE HA (Geo) 15 到 SLE HA (Geo) 15 SP1

叢集滾存升級

  • 基礎系統:SLES 15 SP1 的《升級指南

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the Latest Product Version”

從 SLE HA (Geo) 15 SP1 到 SLE HA (Geo) 15 SP2

叢集滾存升級

  • 基礎系統:SLES 15 SP2 的《升級指南

  • SLE HA:執行叢集滾存升級

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the Latest Product Version”

5.2.2 升級前的必要準備

備份

確保您的系統備份是最新版本且可還原。

測試

在線上環境中執行升級程序前,請先在叢集設定的臨時例項上測試該程序。這樣,您便可以預估維護期所需的時間範圍。這也有助於偵測和解決可能會出現的任何非預期問題。

5.2.3 叢集離線升級

本節適用於以下案例:

如果您的叢集仍然以早期的產品版本而不是上面所列版本為基礎,請先將它升級至 SLES 和 SLE HA 的某個版本,而該版本可用做升級至所需目標版本的來源。

程序 5.1︰ 從產品版本 11 升級至 12:叢集離線升級

The High Availability Extension 12 叢集堆疊的各個元件包含重大變更 (例如 /etc/corosync/corosync.conf、OCFS2 的磁碟格式)。因此,不支援從任何 SUSE Linux Enterprise High Availability Extension 11 版本進行叢集滾存升級。所有叢集節點都必須處於離線狀態,並且需要依照所述升級整個叢集。

  1. 登入每個叢集節點,並使用以下指令停止叢集堆疊:

    root # rcopenais stop
  2. 將每個叢集節點都升級至 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 的所需目標版本 — 請參閱第 5.2.1 節 「SLE HA 和 SLE HA Geo 支援的升級路徑」

  3. 完成升級程序後,將裝有 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 升級版本的每個節點重新開機。

  4. 如果在叢集設定中使用了 OCFS2,請執行以下指令更新裝置上的結構:

    root # o2cluster --update PATH_TO_DEVICE

    它會為磁碟新增額外參數。SUSE Linux Enterprise High Availability Extension 12 和 12 SPx 隨附的已更新 OCFS2 版本需要這些參數。

  5. 若要更新 Corosync 版本 2 的 /etc/corosync/corosync.conf

    1. 登入某個節點,然後啟動 YaST 叢集模組。

    2. 切換到通訊通道類別,並輸入以下新參數的值:叢集名稱預期投票數。如需詳細資料,請分別參閱程序 4.1 「定義第一個通訊通道 (多點傳播)」程序 4.2 「定義第一個通訊通道 (單點傳播)」

      如果 YaST 偵測到對 Corosync 版本 2 無效或缺失的任何其他選項,它會提示您變更這些選項。

    3. 確認您在 YaST 中所做的變更。YaST 會將組態寫入 /etc/corosync/corosync.conf

    4. 如果為叢集設定了 Csync2,請使用以下指令將更新的 Corosync 組態推入至其於叢集節點:

      root # csync2 -xv

      如需 Csync2 的詳細資料,請參閱第 4.5 節 「將組態傳輸至所有節點」

      或者,也可以透過將 /etc/corosync/corosync.conf 手動複製到所有叢集節點的方式來同步化更新的 Corosync 組態。

  6. 登入每個節點,並使用以下指令啟動叢集堆疊:

    root # crm cluster start
  7. 使用 crm status 或 Hawk2 檢查叢集狀態。

  8. 將以下服務設定為在開機時啟動:

    root # systemctl enable pacemaker
    root # systemctl enable hawk
    root # systemctl enable sbd
注意
注意:升級 CIB 語法版本

有時,新功能只能在最新的 CIB 語法版本中使用。升級至新的產品版本時,預設不會升級 CIB 語法版本。

  1. 使用以下指令檢查版本:

    cibadmin -Q | grep validate-with
  2. 使用以下指令升級至最新的 CIB 語法版本:

    root # cibadmin --upgrade --force
程序 5.2︰ 從產品版本 12 升級至 15:叢集離線升級
重要
重要:從頭開始安裝

如果您決定從頭開始安裝叢集節點 (而不是升級它們),請參閱第 2.2 節 「軟體要求」以取得 SUSE Linux Enterprise High Availability Extension 15 SP2 所需的模組清單。如需模組、延伸及相關產品的詳細資訊,請參閱 SUSE Linux Enterprise Server 15 的版本說明。您可以從 https://www.suse.com/releasenotes/ 上取得這些文件。

  1. 在開始離線升級至 SUSE Linux Enterprise High Availability Extension 15 之前,請如注意:升級 CIB 語法版本所述手動升級目前叢集中的 CIB 語法。

  2. 登入每個叢集節點,並使用以下指令停止叢集堆疊:

    root # crm cluster stop
  3. 將每個叢集節點都升級至 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 的所需目標版本 — 請參閱第 5.2.1 節 「SLE HA 和 SLE HA Geo 支援的升級路徑」

  4. 完成升級程序後,請登入每個節點,並將安裝了 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 升級版的每個節點開機。

  5. 如果您使用叢集 LVM,則需要從 clvmd 移轉至 lvmlockd。請參閱 lvmlockd 的 man 頁面中的「changing clvm VG to lockd VG」(將 clvm VG 變更為 lockd VG) 部分,另請參閱第 21.4 節 「從鏡像 LV 線上移轉至叢集 MD」

  6. 使用以下指令啟動叢集堆疊:

    root # crm cluster start
  7. 使用 crm status 或 Hawk2 檢查叢集狀態。

5.2.4 叢集滾存升級

本節適用於以下案例:

  • 從 SLE HA 12 升級到 SLE HA 12 SP1

  • 從 SLE HA 12 SP1 升級至 SLE HA 12 SP2

  • 從 SLE HA 12 SP2 升級至 SLE HA 12 SP3

  • 從 SLE HA 12 SP3 升級至 SLE HA 12 SP4

  • 從 SLE HA 15 升級到 SLE HA 15 SP1

  • 從 SLE HA 15 SP1 升級至 SLE HA 15 SP2

警告
警告:使用中的叢集堆疊

在開始升級某個節點之前,請停止該節點上的叢集堆疊。

如果某個節點上的叢集資源管理員在軟體更新期間處於使用中狀態,可能會導致出現不可預知的結果,例如圍籬區隔使用中的節點。

重要
重要:叢集滾存升級的時間限制

只有將所有叢集節點升級至最新產品版本之後,才可使用最新產品版本隨附的新功能。在叢集滾存升級期間,只有一段較短的時間支援混合版本叢集升級。請在一週內完成叢集滾存升級。

程序 5.3︰ 執行叢集滾存升級
  1. root 使用者身分登入要升級的節點,並停止叢集堆疊:

    root # crm cluster stop
  2. 升級至 SUSE Linux Enterprise Server 和 SUSE Linux Enterprise High Availability Extension 的所需目標版本。若要瞭解個別升級程序的詳細資料,請參閱第 5.2.1 節 「SLE HA 和 SLE HA Geo 支援的升級路徑」

  3. 在已升級的節點上啟動叢集堆疊,讓該節點重新加入叢集:

    root # crm cluster start
  4. 讓下一個節點離線,並對其重複執行此程序。

  5. 使用 crm status 或 Hawk2 檢查叢集狀態。

    如果偵測到您的叢集節點有不同的 CRM 版本,Hawk2 狀態螢幕還會顯示一則警告。

5.3 更新叢集節點上的軟體套件

警告
警告:使用中的叢集堆疊

啟動某節點的套件更新之前,請停止該節點上的叢集堆疊,或將該節點置於維護模式,具體視叢集堆疊是否受影響而定。如需詳細資料,請參閱步驟 1

如果某個節點上的叢集資源管理員在軟體更新期間處於使用中狀態,可能會導致出現不可預知的結果,例如圍籬區隔使用中的節點。

  1. 在節點上安裝任何套件更新之前,請檢查以下幾點:

    • 更新是否會影響屬於 SUSE Linux Enterprise High Availability Extension 或 Geo Clustering for SUSE Linux Enterprise High Availability Extension 的任何套件?如果,請在開始軟體更新前先在節點上停止叢集堆疊:

      root # crm cluster stop
    • 更新套件是否需要重新開機?如果,請在開始軟體更新前先在節點上停止叢集堆疊:

      root # crm cluster stop
    • 如果不屬於以上任一種情況,則不需要停止叢集堆疊。在此情況下,請在開始軟體更新前將節點置於維護模式:

      root # crm node maintenance NODE_NAME

      如需維護模式的詳細資料,請參閱第 16.2 節 「用於維護任務的不同選項」

  2. 使用 YaST 或 Zypper 來安裝套件更新。

  3. 在成功安裝更新後:

    • 啟動相應節點上的叢集堆疊 (如果在執行步驟 1 時已將它停止):

      root # crm cluster start
    • 或者移除維護旗標,使節點恢復正常模式:

      root # crm node ready NODE_NAME
  4. 使用 crm status 或 Hawk2 檢查叢集狀態。

5.4 更多資訊

如需所升級產品目標版本的任何變更及新功能的詳細資訊,請參閱其版本說明,這些文件可從 https://www.suse.com/releasenotes/ 取得。

第 II 部分 組態與管理

  • 6 組態與管理基礎
  • HA 叢集的主要目的是管理使用者服務。Apache Web 伺服器或資料庫便是使用者服務的典型範例。從使用者的角度來看,命令這些服務執某些特定操作,它們就會按要求執行。不過,對於叢集而言,它們只是可以啟動或停止的資源 — 服務的性質與叢集無關。

    本章介紹一些設定資源和管理叢集時需瞭解的基本概念。後續章節將介紹如何使用 High Availability Extension 提供的各種管理工具執行主要的組態與管理任務。

  • 7 使用 Hawk2 設定和管理叢集資源
  • 若要設定和管理叢集資源,請使用 Hawk2 或 crm 外圍程序 (crmsh) 指令行公用程式。如果您從安裝了 Hawk 的較低版 SUSE® Linux Enterprise High Availability Extension 升級,該套件將由最新版本 Hawk2 取代。

    Hawk2 的使用者友好 Web 介面可讓您從 Linux 或非 Linux 機器監控和管理您的高可用性叢集。您可使用 (圖形) 網頁瀏覽器從叢集內外的任何機器存取 Hawk2。

  • 8 設定和管理叢集資源 (指令行)
  • 若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令行公用程式或 Hawk2 (Web 使用者介面)。

    本章對指令行工具 crm 做了介紹,並對此工具、範本的使用方式進行了概述,主要敘述了設定和管理叢集資源方面的資訊:建立基本與進階類型的資源 (群組與複製品),設定條件約束,指定容錯移轉節點與錯誤回復節點,設定資源監控,啟動、清理或移除資源,以及手動移轉資源。

  • 9 新增或修改資源代辦
  • 需由叢集管理的所有任務都必須當成資源使用。其中,有兩個主要群組需要注意,即資源代辦和 STONITH 代辦。對於這兩種類別,您都可以新增自己的代辦,以延伸叢集的功能來滿足自己的需要。

  • 10 圍籬區隔與 STONITH
  • 在 HA (High Availability) 的電腦叢集中,圍籬區隔是一個極其重要的概念。叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。可將圍籬區隔定義為讓 HA 叢集處於已知狀態一種方法。

    叢集中的每個資源都有相關的狀態。例如:資源 r1 已在 alice 上啟動。在 HA 叢集中,這樣的狀態隱含資源 r1 已在除節點 alice 之外的所有節點上停止的含義,因為叢集必須確保每個資源只能在一個節點上啟動。每個節點都必須報告資源發生的每一項變更。因此,叢集狀態是資源狀態和節點狀態的集合。

    如果無法確切判斷某個節點或資源的狀態,就會觸發圍籬區隔。即使叢集未注意到指定節點上發生了狀況,圍籬區隔也可以確保該節點不會執行任何重要的資源。

  • 11 儲存保護和 SBD
  • SBD (STONITH 區塊裝置) 透過經由共享塊儲存 (SAN、iSCSI、FCoE 等) 交換訊息來為基於 Pacemaker 的叢集提供節點圍籬區隔機制。此方法可將圍籬區隔機制隔離開,使其不受韌體版本變更的影響,或不依賴於特定韌體控制器。SBD 需要在每個節點上安裝一個監視程式,以確定能真正停止行為異常的節點。在某些情況下,還可以透過無磁碟模式執行 SBD,以便使用不含共享儲存的 SBD。

    每則訊息前的 ha-cluster-bootstrap 程序檔提供了一種自動設定叢集的方式,並可選擇使用 SBD 做為圍籬區隔機制。如需詳細資料,請參閱Article “安裝與設定快速入門”。但是,手動設定 SBD 可為您提供個別設定的更多選項。

    本章介紹 SBD 背後的概念。它將引導您完成 SBD 所需元件的設定,以保護您的叢集避免在發生電腦分裂的情況下出現潛在資料毀損。

    除了節點層級圍籬區隔外,您還可以使用額外的儲存保護機制,例如 LVM2 獨佔啟用或 OCFS2 檔案鎖定支援 (資源層級圍籬區隔)。它們可以保護您的系統,避免出現管理或應用程式故障。

  • 12 存取控制清單
  • Crm 外圍程序 (crmsh) 或 Hawk2 等叢集管理工具可由 root 使用者或 haclient 群組中的任何使用者使用。依預設,這些使用者擁有完整的讀取/寫入存取權。若要限制存取權或指定更精細的存取權限,可以使用存取控制清單 (ACL)。

    存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。

  • 13 網路裝置結合
  • 對於許多系統而言,實作的網路連接除了需要符合一般乙太網路裝置的標準資料安全性或可用性要求之外,還需要符合其他要求。在這些情況下,數個乙太網路裝置可以結集成單個結合裝置。

  • 14 負載平衡
  • 負載平衡的情況下,一個伺服器叢集對於外部用戶端而言就是一台大型的高速伺服器。這種表面上的單個伺服器稱為虛擬伺服器。它包含一或多個用於發送內送要求的負載平衡器,以及數個執行實際服務的真實伺服器。對 High Availability Extension 完成負載平衡設定後,您可以建置擴充性強、可用性高的網路服務,例如 Web、快取、郵件、FTP、媒體和 VoIP 服務。

  • 15 Geo 叢集 (多站點叢集)
  • 除本地叢集和城際叢集外,SUSE® Linux Enterprise High Availability Extension 15 SP2 還支援地理位置分散的叢集 (Geo 叢集,有時稱為多站點叢集)。這意味著您可以有多個地理位置分散的站台,每個站台都有一個本地叢集。這些叢集之間的容錯移轉由一個更高階的實體來調節控制,即投票間。如需如何使用和設定 Geo 叢集的詳細資料,請參閱Article “Geo 叢集快速入門”Book “Geo Clustering Guide”

  • 16 執行維護任務
  • 若要在叢集節點上執行維護任務,您可能需要停止該節點上執行的資源、移動這些資源,或者將該節點關閉或重新開機。此外,可能還需要暫時接管叢集中資源的控制權,甚至需要在資源仍在執行時停止叢集服務。

    本章介紹如何在不產生負面影響的情況下手動關閉叢集節點。此外,本章將會概述叢集堆疊提供的用於執行維護任務的不同選項。

6 組態與管理基礎

HA 叢集的主要目的是管理使用者服務。Apache Web 伺服器或資料庫便是使用者服務的典型範例。從使用者的角度來看,命令這些服務執某些特定操作,它們就會按要求執行。不過,對於叢集而言,它們只是可以啟動或停止的資源 — 服務的性質與叢集無關。

本章介紹一些設定資源和管理叢集時需瞭解的基本概念。後續章節將介紹如何使用 High Availability Extension 提供的各種管理工具執行主要的組態與管理任務。

6.1 使用案例情境

叢集一般分為以下兩種類別:

  • 雙節點叢集

  • 包含兩個以上節點的叢集。這通常表示節點數是奇數。

新增不同的拓撲可以衍生不同的使用案例。下面是最常見的使用案例:

位於一個位置的雙節點叢集

組態:FC SAN 或類似的共用儲存,第 2 層網路。

使用情境:內嵌式叢集,注重服務的高可用性,而不是實現資料備援來進行資料複製。例如,此類設定可用於廣播電台或裝配生產線控制器。

位於兩個位置的雙節點叢集 (使用最為廣泛)

組態:對稱的延伸叢集,FC SAN,以及跨兩個位置的第 2 層網路。

使用情境:經典的延伸叢集,注重服務的高可用性和本地資料備援。用於資料庫和企業資源規劃。過去數年來最熱門的設定之一。

位於三個位置的奇數數量的節點

組態:2×N+1 個節點,FC SAN 跨兩個主要位置第三個輔助站點不部署 FC SAN,而是當成多數仲裁者使用。第 2 層網路至少跨兩個主要位置。

使用情境:經典的延伸叢集,注重服務的高可用性和資料備援。例如資料庫和企業資源規劃。

6.2 最低節點數判斷

當一個或多個節點與叢集其餘節點間的通訊失敗時,就會發生叢集分割。這些節點只能與同一分割區中的其他節點通訊,並不知道被隔開的節點的存在。如果叢集分割區具有多數節點 (或投票),則將其定義為具有最低節點數 (即達到法定數量)。透過最低節點數計算來獲得此結果。若要圍籬區隔,就必須達到最低節點數。

SUSE Linux Enterprise High Availability Extension 11 與 SUSE Linux Enterprise High Availability Extension 15 的最低節點數計算方式有所不同。在 SUSE Linux Enterprise High Availability Extension 11 中,由 Pacemaker 計算最低節點數。從 SUSE Linux Enterprise High Availability Extension 12 開始,Corosync 可以直接處理雙節點叢集的最低節點數,而無需變更 Pacemaker 組態。

最低節點數計算方式受以下因素的影響:

叢集節點數

為使服務保持執行狀態,包含兩個以上節點的叢集依賴最低節點數 (多數投票數) 來解決叢集分割區。根據以下公式,您可以計算叢集正常運作所需的最小可作業節點數:

N ≥ C/2 + 1

N = minimum number of operational nodes
C = number of cluster nodes

例如,五節點叢集至少需要三個可作業節點 (或兩個可以容錯移轉的節點)。

我們強烈建議使用雙節點叢集或奇數數量的叢集節點。雙節點叢集適合跨兩個站點的延伸設定。所含節點數為奇數的叢集可以在單個站點上建構,也可以分散在三個站點之間。

Corosync 組態

Corosync 是一個訊息和成員資格層,具體請參閱第 6.2.4 節 「雙節點叢集的 Corosync 組態」第 6.2.5 節 「N 節點叢集的 Corosync 組態」

6.2.1 全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crm 外圍程序等叢集管理工具來檢視和修改。

一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:

6.2.2 全域選項 no-quorum-policy

此全域選項定義在叢集分割區沒有達到最低節點數 (節點多數不是該分割區的一部分) 時如何運作。

允許的值:

ignore

若將 no-quorum-policy 設定為 ignore,可使叢集的行為如同它具有最低節點數一般。它仍會進行資源管理。

在 SLES 11 中,建議對雙節點叢集使用此設定。此選項從 SLES 12 開始已過時。Corosync 依據組態和條件為叢集節點或單個節點提供最低節點數 — 或者不提供最低節點數。

對於雙節點叢集,唯一有意義的行為就是永遠像失去仲裁一樣來做出回應。第一個步驟永遠應該是嘗試圍籬區隔遺失的節點。

freeze

如果達不到最低節點數,叢集分割區便會凍結。資源管理將繼續:執行中的資源不會停止 (但是可能會重新啟動,以便監控事件),但是受影響的分割區內不會再啟動其他資源。

此設定適合某些資源依賴與其他節點之通訊的叢集 (例如,OCFS2 掛接)。在這種情況下,預設設定 no-quorum-policy=stop 不起作用,因為它會造成既無法停止資源,又無法連接對等節點的狀況。相反,任何停止這些資源的嘗試最終都會逾時,並會造成停止失敗,同時觸發升級復原與圍籬區隔。

stop (預設值)

如果不符合最低節點數規則,受影響的叢集分割區中的所有資源都會依序停止。

suicide

如果達不到最低節點數,受影響叢集分割區中的所有節點都會被圍籬區隔。此選項只能與 SBD 結合使用,具體請參閱第 11 章 「儲存保護和 SBD

6.2.3 全域選項 stonith-enabled

此全域選項定義是否套用圍籬區隔,以允許 STONITH 裝置關閉失敗的節點以及其上資源無法停止的節點。此全域選項預設為 true,因為正常的叢集運作需要使用 STONITH 裝置。依據預設值,如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。

如果出於某種原因需要停用圍籬區隔,請將 stonith-enabled 設定為 false,但請注意,這樣做會影響您產品的支援狀態。此外,使用 stonith-enabled="false" 設定時,分散式鎖定管理員 (DLM) 等資源以及依存於 DLM 的所有服務 (例如 cLVM、GFS2 和 OCFS2) 都將無法啟動。

重要
重要:不支援沒有 STONITH 的組態

系統不支援沒有 STONITH 的叢集。

6.2.4 雙節點叢集的 Corosync 組態

使用開機程序檔時,Corosync 組態包含一個 quorum 區段,其中包含以下選項:

範例 6.1︰ 雙節點叢集的 Corosync 組態摘錄
quorum {
   # Enable and configure quorum subsystem (default: off)
   # see also corosync.conf.5 and votequorum.5
   provider: corosync_votequorum
   expected_votes: 2
   two_node: 1
}

相較於 SUSE Linux Enterprise 11,SUSE Linux Enterprise 12 中的 votequorum 子系統以 Corosync 版本 2.x 為基礎。這表示不可使用 no-quorum-policy=ignore 選項。

當設定了 two_node: 1 時,預設會自動啟用 wait_for_all 選項。如果未啟用 wait_for_all,則叢集應在兩個節點上平行啟動。否則,第一個節點將對缺少的第二個節點執行啟動圍籬區隔。

6.2.5 N 節點叢集的 Corosync 組態

如果不使用雙節點叢集,我們強烈建議使用奇數數量的節點來構成 N 節點叢集。在仲裁組態方面,可以使用以下選項:

  • 使用 ha-cluster-join 指令新增更多的節點,或

  • 手動調整 Corosync 組態。

如果您要手動調整 /etc/corosync/corosync.conf,請使用以下設定:

範例 6.2︰ N 節點叢集的 Corosync 組態摘錄
quorum {
   provider: corosync_votequorum 1
   expected_votes: N 2
   wait_for_all: 1 3
}

1

使用 Corosync 的最低節點數服務

2

預期投票數。可以在 quorum 區段中提供此參數,或者在提供了 nodelist 區段的情況下由系統自動計算此參數。

3

啟用「等待所有節點」(WFA) 功能。如果啟用了 WFA,僅在所有節點可見之後,叢集才會首次達到法定數量。若要避免啟動時出現某些競爭情況,可以將 wait_for_all 設定為 1。例如,在五節點叢集中,每個節點有一個投票,因此,expected_votes 設定為 5。三個或更多個節點彼此可見後,叢集分割區將立即達到法定數量,可以開始運作。

6.3 叢集資源

做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。

6.3.1 資源管理

若想在叢集中使用某項資源,必須先對其進行設定。例如,如果想要使用 Apache 伺服器做為叢集資源,請先設定 Apache 伺服器並完成 Apache 組態設定,然後才能在叢集中啟動各個資源。

如果資源具有特定的環境要求,請確保這些要求在所有叢集節點上均得到滿足並且一致。此類組態並非由 High Availability Extension 管理。您必須自行管理。

注意
注意:不要對叢集管理的服務執行任何操作

當您正透過 High Availability Extension 管理某個資源時,就不能再啟動或停止該資源 (例如,不能在叢集之外手動啟動或停止,或者在開機或重新開機時啟動或停止)。High Availability Extension 軟體負責所有服務的啟動或停止動作。

如果服務已在叢集控制下執行,而您需要執行測試或維護任務,請務必先將資源、節點或整個叢集置於維護模式,然後再對其進行任何手動處理。如需詳細資料,請參閱第 16.2 節 「用於維護任務的不同選項」

在叢集中設定資源之後,可以使用叢集管理工具手動啟動、停止、清理、移除或移轉資源。以下為如何使用偏好的叢集管理工具執行這些操作的詳細資料:

重要
重要:資源 ID 和節點名稱

叢集資源和叢集節點的名稱應該不同。否則 Hawk2 將會失敗。

6.3.2 受支援的資源代辦類別

對於每個新增的叢集資源,都需要定義資源代辦所遵循的標準。資源代辦會提取它們所提供的服務並向叢集提供準確的狀態,這樣叢集便可不理會其所管理的資源。當接收到啟動、停止或監控指令時,叢集會依賴資源代辦來做出恰當的反應。

通常,資源代辦採用的是外圍程序檔的形式。High Availability Extension 支援以下類別的資源代辦:

Open Cluster Framework (OCF) 資源代辦

OCF RA 代辦最適合與高可用性搭配使用,特別是在您需要可升級複製品資源或特殊監控功能的情況下。代辦通常位於 /usr/lib/ocf/resource.d/提供者/ 內。它們的功能類似於 LSB 程序檔。但是,組態始終使用環境變數進行設定,因此它們更容易接受並處理參數。OCF 規格對於動作必須傳回的離開碼有著嚴格的定義,請參閱第 9.3 節 「OCF 傳回代碼與失敗復原」。叢集完全遵循這些規格。

所有 OCF 資源代辦都必須至少含有動作 startstopstatusmonitormeta-datameta-data 動作可取回有關如何設定代辦的資訊。例如,如果您要詳細瞭解提供者 heartbeatIPaddr 代辦,可以使用以下指令:

OCF_ROOT=/usr/lib/ocf /usr/lib/ocf/resource.d/heartbeat/IPaddr meta-data

輸出的是 XML 格式的資訊,分為多個區段,包括代辦的一般描述、可用參數和可用動作。

您也可以使用 crmsh 來檢視關於 OCF 資源代辦的資訊。如需詳細資料,請參閱第 8.1.3 節 「顯示 OCF 資源代辦的相關資訊」

Linux Standards Base (LSB) 程序檔

LSB 資源代辦通常由作業系統/套裝作業系統提供,位於 /etc/init.d。若要與叢集一起使用,它們必須符合 LSB init 程序檔規格。例如,它們必須執行幾個動作,至少包含 startstoprestartreloadforce-reloadstatus。如需詳細資訊,請參閱http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

這些服務的組態尚未標準化。如果要將 LSB 程序檔與 High Availability 搭配使用,請確定您瞭解如何設定相關程序檔。相關資訊通常可以在 /usr/share/doc/packages/套件名稱目錄中相關套件的文件內找到。

Systemd

從 SUSE Linux Enterprise 12 起,systemd 取代了常用的 System V init 精靈。Pacemaker 可以管理 systemd 服務 (如果這些服務存在)。systemd 不使用 init 程序檔,而是使用單位檔案。一般情況下,服務 (或單位檔案) 由作業系統提供。如果您要轉換現有的 init 程序檔,請造訪 http://0pointer.de/blog/projects/systemd-for-admins-3.html 獲取詳細資訊。

服務

目前有許多通用類型的系統服務同時存在:LSB (屬於 System V init)、systemd 和 (在某些套裝作業系統中提供的) upstart。因此,Pacemaker 支援使用特殊別名,這樣可以輕鬆地確定哪個服務適用於指定的叢集節點。當叢集中混合使用了 systemd、upstart 和 LSB 服務時,此功能特別有用。Pacemaker 將嘗試依照以下順序尋找指定服務:LSB (SYS-V) init 程序檔、Systemd 單位檔案或 Upstart 工作。

Nagios

使用監控外掛程式 (以前稱為 Nagios 外掛程式) 可以監控遠端主機上的服務。Pacemaker 可以使用監控外掛程式 (如果有) 來執行遠端監控。如需詳細資訊,請參閱第 6.6.1 節 「使用監控外掛程式監控遠端主機上的服務」

STONITH (圍籬區隔) 資源代辦

此類別專用於圍籬區隔相關資源。如需詳細資訊,請參閱第 10 章 「圍籬區隔與 STONITH

High Availability Extension 隨附的代辦將寫入 OCF 規格。

6.3.3 資源類型

以下是可建立的資源類型:

基本資源

基本資源,是最基本的資源類型。

瞭解如何使用偏好的叢集管理工具建立基本資源:

群組

群組包含一組需放置在一起的資源,這些資源按順序啟動並以相反順序停止。若需更多資訊,請參閱第 6.3.5.1 節 「群組」

複製品

複製品是可在多個主機上處於使用中狀態的資源。任何資源都可複製,只要相應的資源代辦支援複製功能。若需更多資訊,請參閱第 6.3.5.2 節 「複製品」

可升級複製品 (以前稱為主要/從屬資源或多狀態資源) 是一種可以升級的特殊類型的複製品資源。

6.3.4 資源範本

如果您要建立大量具有相似組態的資源,定義資源範本是最輕鬆的方法。定義資源範本後,便可在基本資源或某些類型的條件約束中參考該範本,如第 6.5.3 節 「資源範本和條件約束」所述。

如果某個基本資源中參考了某個範本,該基本資源將會繼承範本中定義的所有操作、例項屬性 (參數)、中繼屬性和使用率屬性。此外,您也可以為基本資源定義特定的操作或屬性。如果在範本和基本資源兩者中都定義了上述其中任何一項,則基本資源中定義的值會優先於範本中定義的值。

瞭解如何使用偏好的叢集組態工具定義資源範本:

6.3.5 進階資源類型

基本資源是最簡單的一種資源,易於設定,不過您的叢集組態可能還需要更進階的資源類型,例如群組、複製品資源或可升級複製品資源。

6.3.5.1 群組

有些叢集資源依存於其他元件或資源,它們要求每個元件或資源以特定順序啟動並與其相依的資源在同一伺服器上執行。若要簡化此組態,您可以使用叢集資源群組。

範例 6.3︰ Web 伺服器的資源群組

需要 IP 位址與檔案系統的 Web 伺服器就是資源群組的一個範例。在此範例中,每個元件都是組合成一個叢集資源群組中的獨立資源。資源群組將在一或多個伺服器上執行。若軟體或硬體出現異常,群組會容錯移轉至叢集中的另一個伺服器,這一點與個別叢集資源類似。

群組資源
圖 6.1︰ 群組資源

群組具有以下內容:

啟動和停止

資源以顯示的順序依次啟動,並以相反順序停止。

相依性

若群組中的某個資源在任何地方都無法執行,則群組中位於該資源之後的所有資源均不允許執行。

內容

群組僅會包含基本叢集資源的集合。群組至少須包含一個資源,否則組態視為無效。若要引用群組資源的子代,請使用子代 ID,而不要使用群組 ID。

條件約束

儘管您可以在條件約束中參考群組的子代,但一般最好使用群組的名稱。

粘性

粘性在群組中屬於加法類內容。群組中每個使用中成員的粘性值都會影響群組的總值。因此,若 resource-stickiness 的預設值為 100,並且群組有七個成員,其中五個處於使用中狀態,則整個群組偏向於其目前位置 (分數為 500)。

資源監控

若要對群組啟用資源監控,您必須為要監控的群組中的每個資源分別設定監控。

瞭解如何使用偏好的叢集管理工具建立群組:

6.3.5.2 複製品

您可能要讓某些資源同時在叢集的多個節點上執行。若要實現此目的,您必須將資源設定為複製品。可以設定為複製品的資源範例包括叢集檔案系統,如 OCFS2。您可以複製所提供的任何資源。相關資源的資源代辦會為此操作提供支援。您甚至可以對複製品資源進行不同的設定,具體視代管它們的節點而定。

資源複製品分為三種類型:

匿名複製品

這是最簡單的一種複製品。無論在何處執行,它們的行為都相同。因此,每部機器上只能有一個匿名複製品例項處於使用中狀態。

全域唯一複製品

這些資源是不同的實體。在一個節點上執行的複製品例項與在另一個節點上執行的另一個例項不同;在相同節點上的任何兩個例項也不相同。

可升級複製品 (多狀態資源)

這些資源的使用中例項分為兩種狀態:主動與被動。這兩種狀態有時也稱為主要與次要,或主要與從屬。可升級複製品可以是匿名的,也可以是全域唯一。並請參閱第 6.3.5.3 節 「可升級複製品 (多狀態資源)」

複製品只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,複製品的要求與簡單資源不同。如需詳細資料,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的《Pacemaker Explained》(Pacemaker 說明)。詳情位於「Clones - Resources That Should be Active on Multiple Hosts」(複製品 - 應在多個主機上啟動的資源) 一節。

瞭解如何使用偏好的叢集管理工具建立複製品:

6.3.5.3 可升級複製品 (多狀態資源)

可升級複製品 (以前稱為多狀態資源) 是一種特殊的複製品。它們允許例項處於兩種中的其中一種操作模式 (稱為主要從屬,不過您也可以依照自己的想法來命名這些模式)。可升級複製品只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,可升級複製品的要求與簡單資源不同。如需詳細資料,請參閱《Pacemaker Explained》(Pacemaker 說明)。Pacemaker 1.1 版本可從 http://www.clusterlabs.org/pacemaker/doc/ 取得。詳情位於「Multi-state - Resources That Have Multiple Modes」(多狀態 - 有多種模式的資源) 一節。

6.3.6 資源選項 (中繼屬性)

對於新增的每個資源,您都可以定義選項。叢集使用選項來決定資源的行為方式 — 它們會告知 CRM 如何處理特定資源。資源選項可透過 crm_resource --meta 指令或者依程序 7.5 「新增基本資源」所述使用 Hawk2 來設定。

表 6.1︰ 基本資源選項

選項

描述

預設值

priority

如果並非所有資源都可處於使用中狀態,叢集將停止優先程度較低的資源,以便讓優先程度較高的資源保持使用中狀態。

0

target-role

叢集應嘗試讓此資源保持什麼狀態?允許的值:stoppedstartedmaster

started

is-managed

叢集是否允許啟動及停止資源?允許的值:truefalse。如果該值設定為 false,則仍會監控資源的狀態,並報告任何故障。這與將資源設定為 maintenance="true" 的情況完全不同。

true

maintenance

是否可以手動處理資源?允許的值:truefalse。如果設定為 true,則所有資源將會變為不受管理狀態:叢集將停止監控這些資源,因此將會忽視這些資源的狀態。您可以視需要停止或重新啟動叢集資源,不必等待叢集嘗試重新啟動它們。

false

resource-stickiness

資源希望留在原處的程度如何?

calculated

migration-threshold

此資源在節點上的失敗次數達到多少次才會取消該節點代管此資源的資格?

INFINITY (已停用)

multiple-active

如果叢集發現資源在多個節點上處於使用中狀態,應如何處理?允許的值:block (將資源標示為不受管理)、stop_onlystop_start

stop_start

failure-timeout

等待多少秒之後才會當做失敗未發生 (潛在含義為允許資源回到其失敗的節點上)?

0 (已停用)

allow-migrate

允許對支援 migrate_to/migrate_from 動作的資源執行資源移轉。

false

remote-node

此資源定義之遠端節點的名稱。這會使資源變成一個遠端節點,並且定義唯一的名稱以用於識別該遠端節點。如果未設定任何其他參數,則此值還將做為要在 remote-port 連接埠上連接到的主機名稱。

警告
警告:使用唯一的 ID

此值不得與任何現有資源 ID 或節點 ID 重複。

none (已停用)

remote-port

訪客與 pacemaker_remote 建立連接時使用的自訂連接埠。

3121

remote-addr

當遠端節點的名稱不是訪客的主機名稱時,要連接到的 IP 位址或主機名稱。

remote-node (用做主機名稱的值)

remote-connect-timeout

等待中訪客連接在逾時之前所要經過的時間。

60s

6.3.7 例項屬性 (參數)

所有資源類別的程序檔均可接收參數,參數決定了資源的行為及其控制的服務例項。如果您的資源代辦支援參數,您可以使用 crm_resource 指令或 Hawk2 (如程序 7.5 「新增基本資源」所述) 新增參數。在 crm 指令行公用程式和 Hawk2 中,例項屬性分別稱為 paramsParameter。您可用 root 身分執行如下指令來獲取受 OCF 程序檔支援的例項屬性清單:

root # crm ra info [class:[provider:]]resource_agent

或 (不含選擇性的部分):

root # crm ra info resource_agent

輸出會列出所有受支援的屬性、其用途與預設值。

例如,指令

root # crm ra info IPaddr

傳回下列輸出:

Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr)
    
This script manages IP alias IP addresses
It can add an IP alias, or remove one.   
    
Parameters (* denotes required, [] the default):
    
ip* (string): IPv4 address
The IPv4 address to be configured in dotted quad notation, for example
"192.168.1.1".                                                        
    
nic (string, [eth0]): Network interface
The base network interface on which the IP address will be brought
online.                                                           
    
If left empty, the script will try and determine this from the    
routing table.                                                    
    
Do NOT specify an alias interface in the form eth0:1 or anything here;
rather, specify the base interface only.                              
    
cidr_netmask (string): Netmask
The netmask for the interface in CIDR format. (ie, 24), or in
dotted quad notation  255.255.255.0).                        
    
If unspecified, the script will also try to determine this from the
routing table.                                                     
    
broadcast (string): Broadcast address
Broadcast address associated with the IP. If left empty, the script will
determine this from the netmask.                                        
    
iflabel (string): Interface label
You can specify an additional label for your IP address here.
    
lvs_support (boolean, [false]): Enable support for LVS DR
Enable support for LVS Direct Routing configurations. In case a IP
address is stopped, only move it to the loopback device to allow the
local node to continue to service requests, but no longer advertise it
on the network.                                                       
    
local_stop_script (string): 
Script called when the IP is released
    
local_start_script (string): 
Script called when the IP is added
    
ARP_INTERVAL_MS (integer, [500]): milliseconds between gratuitous ARPs
milliseconds between ARPs                                         
    
ARP_REPEAT (integer, [10]): repeat count
How many gratuitous ARPs to send out when bringing up a new address
    
ARP_BACKGROUND (boolean, [yes]): run in background
run in background (no longer any reason to do this)
    
ARP_NETMASK (string, [ffffffffffff]): netmask for ARP
netmask for ARP - in nonstandard hexadecimal format.
    
Operations' defaults (advisory minimum):
    
start         timeout=90
stop          timeout=100
monitor_0     interval=5s timeout=20s
注意
注意:群組、複製品或可升級複製品的例項屬性

請注意,群組、複製品和可升級複製品資源沒有例項屬性。但是,群組、複製品或可升級複製品的子代會繼承任何例項屬性集。

6.3.8 資源操作

叢集預設不會確保資源仍正常。若要指示叢集確保資源能正常運作,您需要在資源定義中新增監控操作。可為所有類別或資源代辦新增監控操作。若需更多資訊,請參閱第 6.4 節 「資源監控」

表 6.2︰ 資源操作內容

操作

描述

id

動作執行人名稱。必須唯一。(ID 不顯示)。

name

執行的動作。通用值:monitorstartstop

interval

執行操作的頻率。單位:秒

timeout

宣告動作失敗之前等待多長時間?

requires

需符合什麼條件才會執行此動作。允許的值:nothingquorumfencing。預設值取決於圍籬區隔是否啟用及資源類別是否為 stonith。對於 STONITH 資源,預設值為 nothing

on-fail

此動作失敗時所採取的動作。允許的值:

  • ignore:當做資源未失敗。

  • block:在資源上不執行任何進一步操作。

  • stop:停止資源且不在其他任何地方啟動。

  • restart:停止資源並再次啟動 (可能在其他節點上)。

  • fence:將發生資源故障的節點關閉 (STONITH)。

  • standby:將發生資源失敗之節點上的所有資源移出。

enabled

如果為 false,則會將操作視做不存在。允許的值:truefalse

role

只有在資源具有此角色時,才執行操作。

record-pending

可以全域設定,也可以針對個別資源設定。讓 CIB 反映對資源執行之 in-flight 操作的狀態。

description

操作的描述。

6.3.9 逾時值

以下參數可能會影響資源的逾時值:

  • op_defaults (操作的全域逾時)

  • 資源範本中定義的特定逾時值

  • 為資源定義的特定逾時值

注意
注意:值的優先程度

如果為資源定義了特定值,則該值將優先於全域預設值。資源的特定值也優先於資源範本中定義的值。

設定合適的逾時值非常重要。將逾時值設定得太小,會因以下緣故產生許多 (不必要的) 圍籬區隔操作:

  1. 如果某個資源發生逾時,該資源將會失敗,並且叢集會嘗試將其停止。

  2. 如果停止資源操作同樣失敗 (例如,因為停止操作的逾時值設定得太小),叢集將會圍籬區隔該節點。叢集認為發生此問題的節點失去控制。

您可以使用 crmsh 和 Hawk2 調整操作的全域預設值並設定任何特定的逾時值。確定及設定逾時值的最佳實務如下:

程序 6.1︰ 確定逾時值
  1. 檢查啟動和停止資源所需的時間 (負載狀態下)。

  2. 如果需要,請新增 op_defaults 參數並相應地設定 (預設) 逾時值:

    1. 例如,將 op_defaults 設定為 60 秒:

      crm(live)configure#  op_defaults timeout=60
    2. 對於需要較長時間的資源,請單獨定義每個逾時值。

  3. 為資源設定操作時,請新增獨立的 startstop 操作。使用 Hawk2 設定操作時,它將為這些操作提供有用的逾時建議。

6.4 資源監控

若要確定資源是否正在執行,必須設定針對該資源的資源監控。

若資源監控偵測到失敗,系統將執行以下動作:

  • 根據 /etc/corosync/corosync.conflogging 區段中指定的組態產生記錄檔案訊息。

  • 失敗狀況會反映在叢集管理工具 (Hawk2、crm status) 及 CIB 狀態區段中。

  • 叢集會啟動重要的復原動作,其中可能包括停止資源以修複失敗狀態,以及在本地或在其他節點上重新啟動資源。也可能不重新啟動資源,具體視組態及叢集狀態而定。

若不設定資源監控,則不會向您通知資源成功啟動後發生的失敗,並且叢集會始終將資源顯示為處於正常狀態。

監控已停止的資源

通常,叢集只會在資源執行時對其進行監控。但是,若要偵測並行存取違規,還需針對停止的資源設定監控。例如:

primitive dummy1 ocf:heartbeat:Dummy \
    op monitor interval="300s" role="Stopped" timeout="10s" \
    op monitor interval="30s" timeout="10s"

當資源 dummy1 狀態為 role="Stopped" 時,此組態就會每隔 300 秒觸發一次對該資源的監控操作。當該資源執行時,將每隔 30 秒對其監控一次。

查探

CRM 會針對每個節點上的每個資源執行初始監控,即所謂的查探。在清理資源後也會執行查探。如果為某個資源定義了多個監控操作,CRM 將會選取間隔最短的監控操作,並使用它的逾時值做為查探的預設逾時。如果沒有設定任何監控操作,則會套用針對整個叢集的預設值。預設值為 20 秒 (如果未透過設定 op_defaults 參數指定)。如果您不想依賴自動計算結果或 op_defaults 值,請為此資源的查探定義特定的監控操作。為此,可以新增一個監控操作並將 interval 設定為 0,例如:

crm(live)configure# primitive rsc1 ocf:pacemaker:Dummy \
    op monitor interval="0" timeout="60"

rsc1 查探將在 60 秒後逾時,而不論 op_defaults 中定義的全域逾時或設定的任何其他操作逾時為何。如果在指定相應資源的查探時未設定 interval="0",CRM 會自動檢查是否為該資源定義了其他任何監控操作,並依如上所述計算查探的逾時值。

瞭解如何使用偏好的叢集管理工具為資源新增監控操作:

6.5 資源條件約束

設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。資源條件約束可讓您指定資源可在哪些叢集節點上執行,載入資源的順序以及特定資源所依賴的其他資源。

6.5.1 條件約束類型

系統中的條件約束分為三種類型:

資源位置

位置條件約束,定義資源可在、不可在或偏好在哪些節點上執行。

資源並存

並存條件約束,告訴叢集哪些資源可以或不可以同時在節點上執行。

資源順序

順序條件約束,定義動作執行的順序。

重要
重要:條件約束與特定資源類型的限制
  • 不要為資源群組的成員建立並存條件約束。應該建立指向整個資源群組的並存條件約束。其他所有類型的條件約束可安全地用於資源群組的成員。

  • 不要對包含複製品資源或者已套用可升級複製品資源的資源使用任何條件約束。條件約束必須套用於複製品或可升級複製品資源,而不能套用於子資源。

6.5.1.1 資源組

6.5.1.1.1 使用資源集定義條件約束

您可以使用另一種形式來定義位置、並存或順序條件約束,即資源集,使用此方式,基本資源會全部歸到一個集中。以前,為了實現此目的,需要定義一個資源群組 (並不總是能準確反映出設計目的),或者將每種關係定義為個別的條件約束。隨著資源和組合數量的增長,後一種方法會導致條件約束劇增。透過資源集進行設定不一定會降低繁瑣性,但更易於理解和維護,如以下範例中所示。

範例 6.4︰ 用於位置條件約束的資源集

例如,可以在 crmsh 中使用資源集 (loc-alice) 的以下組態,將兩個虛擬 IP (vip1vip2) 置於同一個節點 alice 上:

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } Mandatory: alice

如果想要使用資源集來取代並存條件約束的組態,請參考以下兩個範例:

範例 6.5︰ 並存資源鏈結
<constraints>
     <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/>
     <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/>
     <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/>
</constraints>

資源集表達的相同組態:

<constraints>
    <rsc_colocation id="coloc-1" score="INFINITY" >
     <resource_set id="colocated-set-example" sequential="true">
      <resource_ref id="A"/>
      <resource_ref id="B"/>
      <resource_ref id="C"/>
      <resource_ref id="D"/>
     </resource_set>
    </rsc_colocation>
</constraints>

如果您要使用資源集來取代順序條件約束的組態,請參考以下兩個範例:

範例 6.6︰ 排序資源鏈結
<constraints>
     <rsc_order id="order-1" first="A" then="B" />
     <rsc_order id="order-2" first="B" then="C" />
     <rsc_order id="order-3" first="C" then="D" />
</constraints>

可以使用包含排序資源的資源集來實現相同目的:

範例 6.7︰ 表達為資源集的排序資源鏈結
<constraints>
     <rsc_order id="order-1">
     <resource_set id="ordered-set-example" sequential="true">
     <resource_ref id="A"/>
     <resource_ref id="B"/>
     <resource_ref id="C"/>
     <resource_ref id="D"/>
     </resource_set>
     </rsc_order>
</constraints>

資源集可以是排序的 (sequential=true),也可以是未排序的 (sequential=false)。此外,您可以使用 require-all 屬性在 ANDOR 邏輯之間切換。

6.5.1.1.2 用於無相依性之並存條件約束的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。例如,您要在同一個節點上放置兩個資源,但希望叢集在其中一個資源失敗時重新啟動另一個資源。可以在 crm 外圍程序中使用 weak bond 指令來實現此目的。

瞭解如何使用偏好的叢集管理工具設定這些弱鍵

6.5.1.2 更多資訊

瞭解如何使用偏好的叢集管理工具建立各種條件約束。

如需設定條件約束的詳細資訊,以及有關順序與並存基本概念的詳細背景資訊,請參閱以下文件。您可以從 http://www.clusterlabs.org/pacemaker/doc/ 上取得這些文件:

  • Pacemaker Explained》(Pacemaker 說明) 的「Resource Constraints」(資源條件約束) 一章

  • Colocation Explained》(並存說明)

  • Ordering Explained》(順序說明)

6.5.2 分數與 Infinity

定義條件約束時,還需要處理分數。所有類型的分數對於叢集的工作方式而言都是不可或缺的。實際上,從移轉資源到決定要將降級叢集中哪個資源停止的所有操作,都是透過某種方式對分數進行操作來實現。系統會對每個資源都計算分數,針對某個資源分數為負數的所有節點都不能執行該資源。計算完針對資源的分數之後,叢集會選擇分數最高的節點。

INFINITY 目前定義為 1,000,000。與其相關的加法或減法計算遵循以下三項基本規則:

  • 任何值 + INFINITY = INFINITY

  • 任何值 - INFINITY = -INFINITY

  • INFINITY - INFINITY = -INFINITY

定義資源條件約束時,您還要指定每個條件約束的分數。分數表示您要指定給此資源條件約束的值。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。透過為指定資源建立不同分數的其他位置條件約束,即可指定資源將容錯移轉至之目標節點的順序。

6.5.3 資源範本和條件約束

如果您定義了一個資源範本 (請參閱第 6.3.4 節 「資源範本」),則可以在以下類型的條件約束中參考該範本:

  • 順序條件約束

  • 並存條件約束

  • rsc_ticket 條件約束 (適用於 Geo 叢集)

不過,並存條件約束不得包含對同個範本的多個參考。資源集不得包含對範本的參考。

條件約束中參考的資源範本代表由該範本衍生的所有基本資源。也就是說,這些條件約束將適用於所有參考了資源範本的基本資源。在條件約束中參考資源範本是另外一種使用資源集的方式,這種方式能夠大大簡化叢集設定。如需有關資源集的詳細資料,請參閱程序 7.17 「對條件約束使用資源集」

6.5.4 容錯移轉節點

若資源失敗,系統會自動將其重新啟動。若無法在目前節點上重新啟動,或資源已在目前節點上失敗 N 次,則會嘗試容錯移轉至其他節點。每次資源失敗,其 failcount 值都會增加。您可以定義一個失敗計數,讓資源在失敗該次數 (migration-threshold) 之後移轉至新節點。若叢集中有兩個以上的節點,則特定資源容錯移轉所至的節點由 High Availability 軟體來選擇。

但是,您可以透過為該資源設定一或多個位置條件約束以及一個 migration-threshold,指定資源容錯移轉所至的節點。

瞭解如何使用偏好的叢集管理工具指定容錯移轉節點:

範例 6.8︰ 移轉限定值 — 程序流程

例如,假設您已為資源 rsc1 設定位置條件約束,讓其偏向於在 alice 上執行。若資源在該節點上失敗,系統會檢查 migration-threshold,並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。

達到限定值後,便不再允許該節點執行失敗的資源,除非資源的 failcount 被重設。此操作可由叢集管理員手動執行,也可透過設定資源的 failure-timeout 選項來完成。

例如,設定 migration-threshold=2failure-timeout=60s 會在資源失敗兩次後將其移轉至新節點。一分鐘過後,允許該資源移回原節點 (視粘性與條件約束的分數而定)。

移轉限定值概念有兩種例外情況,發生於資源無法啟動或無法停止之時:

  • 啟動失敗會將 failcount 設定為 INFINITY,因此一旦發生便會立即移轉資源。

  • 停止失敗會導致圍籬區隔 (當 stonith-enabled 設定為預設值 true 時)。

    若未定義任何 STONITH 資源 (或 stonith-enabled 設定為 false),則資源將不會移轉。

以下章節詳細介紹了如何使用移轉限定值以及如何使用偏好的叢集管理工具重設失敗計數的信息:

6.5.5 錯誤回復節點

當原始節點恢復連接且位於叢集中時,資源可以錯誤回復至該節點。為防止資源錯誤回復到之前執行它的節點,或者要指定讓該資源錯誤回復到其他節點,請變更其資源粘性值。您可以在建立資源時或建立之後指定資源粘性。

指定資源粘性的值時,請考慮以下事項:

值為 0

此為預設值。資源處於系統中的最佳位置。這表示當有更佳的或負載更低的節點可用時,則移動資源。此選項幾乎等同於自動錯誤回復,除了資源可能會移至原先節點 (資源之前於其上處於使用中狀態) 之外的節點這種情況。

值大於 0

資源偏向於保留在其目前的位置,但當有更合適的節點時,則可能會移動。值越高表示越偏向於將資源保留在目前的位置。

值小於 0

資源偏向於從其目前位置移開。絕對值越高表示越偏向於移動資源。

值為 INFINITY

資源始終保留在其目前的位置,除非由於此節點不再符合執行該資源的條件 (節點關機、節點待命、達到 migration-threshold,或組態變更) 而強制關閉此選項。此選項幾乎等同於完全停用自動錯誤回復。

值為 -INFINITY

資源始終從其目前位置移開。

6.5.6 依據負載影響放置資源

並非所有資源都相同。有些資源 (例如 Xen 客體作業系統) 要求代管它們的節點符合其容量要求。如果放置資源後其所需的容量之和超過了提供的容量,資源效能便會下降 (甚至無法執行)。

鑒於此,High Availability Extension 允許您指定以下參數:

  1. 特定節點提供的容量。

  2. 特定資源要求的容量。

  3. 配置資源的整體策略。

瞭解如何使用偏好的叢集管理工具設定這些設定:

如果一個節點有足夠的可用容量來滿足資源的要求,則認為該節點符合資源要求。容量實際上與 High Availability Extension 完全無關,這只是為了確定在將資源移至某個節點前,該節點滿足此資源的全部容量要求。

若要手動設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。但是,屬性的值必須是整數。

如果具有使用率屬性的多個資源已分組或具有並存條件約束,High Availability Extension 會將這種情況考慮在內。可能的話,系統會將資源放置在可以滿足全部容量要求的節點上。

注意
注意:群組的使用率屬性

使用者無法直接為資源群組設定使用率屬性。不過,若要簡化群組的組態設定,您可以新增具有群組中所有資源所需總容量的使用率屬性。

High Availability Extension 現在還提供了用於自動偵測和設定節點容量及資源要求的方法:

NodeUtilization 資源代辦可檢查節點的容量 (與 CPU 和 RAM 相關)。若要設定自動偵測,請建立類別、提供者和類型如下的複製品資源:ocf:pacemaker:NodeUtilization。每個節點上都應該執行一個該複製品例項。該例項啟動後,一個使用率區段會新增至 CIB 中的節點組態。

為了自動偵測資源的最低要求 (與 RAM 和 CPU 相關),我們改進了 Xen 資源代辦。Xen 資源啟動後會反映 RAM 和 CPU 的使用情況。使用率屬性將會自動新增至資源組態。

注意
注意:適用於 Xen 和 libvirt 的不同資源代辦

ocf:heartbeat:Xen 資源代辦不應與 libvirt 配合使用,因為 libvirt 需要能夠修改機器描述檔案。

對於 libvirt,請使用 ocf:heartbeat:VirtualDomain 資源代辦。

除了偵測最低要求外,High Availability Extension 還允許透過 VirtualDomain 資源代辦監控目前使用率。它可以偵測虛擬機器的 CPU 和 RAM 使用情況。若要使用此功能,請設定類別、提供者和類型如下的資源:ocf:heartbeat:VirtualDomain。可以使用以下例項屬性: autoset_utilization_cpuautoset_utilization_hv_memory。兩者都預設為 true。如此,每個監控週期都會更新 CIB 中的使用率值。

無論是手動還是自動設定容量與要求,都必須使用 placement-strategy 內容 (在全域叢集選項中) 指定配置策略。可用的值如下:

default (預設值)

不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。

utilization

判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。

minimal

判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。

balanced

判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。

注意
注意:設定資源優先程度

提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。

範例 6.9︰ 負載平衡放置的範例組態

以下範例中說明了一個含四台虛擬機器的三節點叢集 (每個節點相同)。

node alice utilization memory="4000"
node bob utilization memory="4000"
node  charlie utilization memory="4000"
primitive xenA ocf:heartbeat:Xen utilization hv_memory="3500" \
     params xmfile="/etc/xen/shared-vm/vm1"
     meta priority="10" 
primitive xenB ocf:heartbeat:Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm2"
     meta priority="1"
primitive xenC ocf:heartbeat:Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm3"
     meta priority="1"
primitive xenD ocf:heartbeat:Xen utilization hv_memory="1000" \
     params xmfile="/etc/xen/shared-vm/vm4"
     meta priority="5"
property placement-strategy="minimal"

三個節點都開啟時,資源 xenA 將首先放置到一個節點上,然後是 xenDxenBxenC 會同時隨 xenD 一起配置,或是其中一項隨 xenD 一起配置。

如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。xenAxenD 會保證得到配置。但剩餘的兩個資源 xenBxenC 中僅有一個會予以放置。由於他們的優先程度相同,因此結果會有多種。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

6.5.7 使用標記對資源分組

標記是最近新增至 Pacemaker 中的功能。使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases 的標記,並將與該資料庫相關的所有資源新增至此標記。這樣,只需使用一個指令就能停止或啟動所有這些資源。

在條件約束中也可以使用標記。例如,以下位置條件約束 loc-db-prefer 會套用至標記為 databases 的資源集:

location loc-db-prefer databases 100: alice

瞭解如何使用偏好的叢集管理工具建立標記:

6.6 管理遠端主機上的服務

在過去幾年中,監控和管理遠端主機上的服務已變得日益重要。SUSE Linux Enterprise High Availability Extension 11 SP3 透過監控外掛程式提供了細緻的監控遠端主機上之服務的功能。最近新增的 pacemaker_remote 服務現在允許 SUSE Linux Enterprise High Availability Extension 15 SP2 全面管理和監控遠端主機上的資源,就如同這些資源是真實的叢集節點一般,並且無需在遠端機器上安裝叢集堆疊。

6.6.1 使用監控外掛程式監控遠端主機上的服務

監控虛擬機器的操作可以借助 VM 代辦來執行 (該代辦僅檢查客體作業系統是否出現在 hypervisor 中),也可以透過從 VirtualDomain 或 Xen 代辦中呼叫的外部程序檔執行。到目前為止,較精細的監控只能透過在虛擬機器中安裝整個 High Availability 堆疊來實現。

透過提供對監控外掛程式 (以前稱為 Nagios 外掛程式) 的支援,High Availability Extension 現在還允許您監控遠端主機上的服務。您可以收集關於客體作業系統的外部狀態,而不必修改客體作業系統影像。例如,VM 客體作業系統可以執行 Web 服務或簡單網路資源,不過這些服務或資源必須位於可以存取的位置。借助 Nagios 資源代辦,您現在可以監控客體作業系統上的 Web 服務或網路資源。如果這些服務不再可存取,High Availability Extension 便會觸發對相應客體作業系統的重新啟動或移轉操作。

如果客體依存於某項服務 (例如,客體要使用的 NFS 伺服器) 運作,則該服務可能是由叢集管理的一般資源,也可能是使用 Nagios 資源監控的外部服務。

若要設定 Nagios 資源,必須在主機上安裝下列套件:

  • monitoring-plugins

  • monitoring-plugins-metadata

必要時,YaST 或 Zypper 將會解析對其他套件的任何相依性。

將監控外掛程式設定為屬於資源容器 (一般是 VM) 的資源,就是一個典型的使用案例。如果容器的任何資源發生故障,容器將會重新啟動。如需組態設定範例,請參閱範例 6.10 「設定監控外掛程式的資源」。或者,若要使用 Nagios 資源代辦來透過網路監控主機或服務,也可以將其設定為一般資源。

範例 6.10︰ 設定監控外掛程式的資源
primitive vm1 ocf:heartbeat:VirtualDomain \
    params hypervisor="qemu:///system" config="/etc/libvirt/qemu/vm1.xml" \
    op start interval="0" timeout="90" \
    op stop interval="0" timeout="90" \
    op monitor interval="10" timeout="30"
primitive vm1-sshd nagios:check_tcp \
    params hostname="vm1" port="22" \ 1
    op start interval="0" timeout="120" \ 2
    op monitor interval="10"
group g-vm1-and-services vm1 vm1-sshd \
    meta container="vm1" 3

1

受支援的參數與監控外掛程式的長選項相同。監控外掛程式使用參數 hostname 連接至服務。因此,屬性的值必須是可解析的主機名稱或 IP 位址。

2

因為要啟動客體作業系統並執行其服務需要一段時間,所以監控資源的啟動逾時必須足夠長。

3

類型為 ocf:heartbeat:Xenocf:heartbeat:VirtualDomainocf:heartbeat:lxc 的叢集資源容器。它可以是一個 VM,也可以是一個 Linux 容器。

上方範例中,check_tcp 外掛程式僅有一個 資源,但您可為不同的外掛程式類型 (例如,check_httpcheck_udp) 設定多個資源。

如果各服務的主機名稱相同,也可為群組指定 hostname 參數,而不必將它新增至各個基本資源。例如:

group g-vm1-and-services vm1 vm1-sshd vm1-httpd \ 
     meta container="vm1" \ 
     params hostname="vm1"

如有任一受監控外掛程式監控的服務在 VM 中執行失敗,叢集將會偵測到該情況,並重新啟動容器資源 (VM)。發生這種情況所需執行的動作可透過指定服務監控操作的 on-fail 屬性來設定。該屬性預設為 restart-container

系統考慮 VM 的移轉限定值時,會將服務的失敗計數考慮在內。

6.6.2 使用 pacemaker_remote 管理遠端節點上的服務

使用 pacemaker_remote 服務可將高可用性叢集延伸到虛擬節點或遠端裸機。這些虛擬節點或遠端裸機無需執行叢集堆疊就能成為叢集的成員。

High Availability Extension 現在可以啟動虛擬環境 (KVM 和 LXC) 以及這些虛擬環境中存在的資源,而無需虛擬環境執行 Pacemaker 或 Corosync。

對於同時要管理做為叢集資源的虛擬機器以及這些虛擬機器中存在之資源的使用案例,您現在可以使用以下設定:

  • 正常(裸機) 叢集節點執行 High Availability Extension。

  • 虛擬機器執行 pacemaker_remote 服務 (幾乎不需要在 VM 端進行任何組態設定)。

  • 正常叢集節點上的叢集堆疊啟動 VM,並連接至 VM 上執行的 pacemaker_remote 服務,以將 VM 做為遠端節點整合到叢集中。

由於遠端節點上未安裝叢集堆疊,這意味著:

  • 遠端節點不計入最低節點數。

  • 遠端節點無法成為 DC。

  • 遠端節點不受延展性限制的約束 (Corosync 存在 32 個節點的成員數量限制)。

Article “Pacemaker Remote Quick Start”中介紹了關於 remote_pacemaker 服務的詳細資訊,包括多個使用案例和詳細的設定說明。

6.7 監控系統狀態

為了避免發生節點因用完磁碟空間而無法管理指定給它的任何資源的情況,High Availability Extension 提供了資源代辦 ocf:pacemaker:SysInfo。使用該代辦可以監控節點的磁碟分割區狀態。SysInfo 資源代辦會建立節點屬性 #health_disk;如果受監控磁碟的可用空間低於指定限制,代辦會將該屬性設為 red

若要定義當節點狀態達到嚴重狀況時 CRM 應如何應對,可使用全域叢集選項 node-health-strategy

程序 6.2︰ 設定系統狀態監控

若要在節點用完磁碟空間時將資源從該節點中移走,請執行以下步驟:

  1. 設定 ocf:pacemaker:SysInfo 資源:

    primitive sysinfo ocf:pacemaker:SysInfo \ 
         params disks="/tmp /var"1 min_disk_free="100M"2 disk_unit="M"3 \ 
         op monitor interval="15s"

    1

    要監控的磁碟分割區。例如,/tmp/usr/var/dev。若要指定多個分割區做為屬性值,請用空格分隔這些分割區。

    注意
    注意:/ 檔案系統總是會受到監控

    不需要在 disks 中指定根分割區 (/)。預設總是會對其進行監控。

    2

    這些分割區需要的最小可用磁碟空間。(選擇性) 您可以指定用於度量的單位 (在上方的範例中使用的是 M,表示百萬位元組)。如果未指定,min_disk_free 預設採用 disk_unit 參數中定義的單位。

    3

    用於報告磁碟空間的單位。

  2. 為完成資源組態設定,建立一個 ocf:pacemaker:SysInfo 複製品並在叢集的每個節點上將其啟動。

  3. node-health-strategy 設為 migrate-on-red

    property node-health-strategy="migrate-on-red"

    #health_disk 屬性設為 red 時,pacemaker-schedulerd 會將 -INF 新增至該節點的資源分數。如此,所有資源都將從此節點中移走。STONITH 資源將是最後一個停止的資源,不過,即使 STONITH 資源不再執行,節點仍可處於圍籬區隔模式。圍籬區隔的節點可以直接存取 CIB 並將繼續工作。

在節點的系統狀態變成 red 之後,解決導致問題發生的根源。然後清除 red 狀態,讓節點再次具備執行資源的資格。登入叢集節點,並使用下列其中一種方法:

  • 執行下列指令:

    root # crm node status-attr NODE delete #health_disk
  • 在該節點上重新啟動 Pacemaker。

  • 將節點重新開機。

節點將恢復正常狀態,並且可以重新執行資源。

6.8 更多資訊

http://crmsh.github.io/

用於高可用性叢集管理的進階指令行介面 crm 外圍程序 (crmsh) 的主頁。

http://crmsh.github.io/documentation

提供關於 crm 外圍程序的多個文件,包括使用 crmsh 完成基本叢集設定的入門教學課程,以及 crm 外圍程序的綜合手冊。後者的網址為 http://crmsh.github.io/man-2.0/http://crmsh.github.io/start-guide/ 上提供了教學課程。

http://clusterlabs.org/

Pacemaker 首頁,High Availability Extension 隨附的叢集資源管理員。

http://www.clusterlabs.org/pacemaker/doc/

提供一些綜合手冊,以及一些解釋一般概念的簡短文件。例如:

  • Pacemaker Explained (Pacemaker 說明):包含全面詳盡的資訊,以供參考。

  • Colocation Explained》(並存說明)

  • Ordering Explained》(順序說明)

7 使用 Hawk2 設定和管理叢集資源

若要設定和管理叢集資源,請使用 Hawk2 或 crm 外圍程序 (crmsh) 指令行公用程式。如果您從安裝了 Hawk 的較低版 SUSE® Linux Enterprise High Availability Extension 升級,該套件將由最新版本 Hawk2 取代。

Hawk2 的使用者友好 Web 介面可讓您從 Linux 或非 Linux 機器監控和管理您的高可用性叢集。您可使用 (圖形) 網頁瀏覽器從叢集內外的任何機器存取 Hawk2。

7.1 Hawk2 要求

僅當系統符合以下要求後,使用者才能登入 Hawk2:

hawk2 套件

每則訊息前的 hawk2 套件必須安裝在您要使用 Hawk2 連接的所有叢集節點上。

網頁瀏覽器

在要使用 Hawk2 存取叢集節點的機器上,需要安裝啟用了 JavaScript 和 Cookie 的 (圖形) 網頁瀏覽器才能建立連接。

Hawk2 服務

若要使用 Hawk2,您要透過 Web 介面連接的節點上必須啟動相應的 Web 服務。請參閱程序 7.1 「啟動 Hawk2 服務」

如果您已使用 ha-cluster-bootstrap 套件中的程序檔設定了叢集,則 Hawk2 服務現已啟動。

每個叢集節點上的使用者名稱、群組和密碼

Hawk2 使用者必須是 haclient 群組的成員。安裝程序會建立名為 hacluster 的 Linux 使用者,該使用者已新增至 haclient 群組中。

使用 ha-cluster-init 程序檔進行設定時,會為 hacluster 使用者設定預設密碼。在啟動 Hawk2 之前,請將它變更為安全密碼。如果您不使用 ha-cluster-init 程序檔,請先為 hacluster 設定密碼,或者建立屬於 haclient 群組成員的新使用者。請在您要使用 Hawk2 與之連接的所有節點上執行此操作。

程序 7.1︰ 啟動 Hawk2 服務
  1. 在您要與之連接的節點上,開啟外圍程序並以 root 身分登入。

  2. 輸入以下指令檢查服務的狀態

    root # systemctl status hawk
  3. 如果服務沒有執行,則使用以下指令將其啟動

    root # systemctl start hawk

    如果希望 Hawk2 在開機時自動啟動,請執行以下指令:

    root # systemctl enable hawk

7.2 登入

Hawk2 Web 介面使用 HTTPS 通訊協定和連接埠 7630

您無需使用 Hawk2 登入個別叢集節點,而是可以將一個浮動的虛擬 IP 位址 (IPaddrIPaddr2) 設定為叢集資源。該位址無需任何特殊組態設定。如此,無論 Hawk 服務在哪個實體節點上執行,用戶端都可以連接到該服務。

在使用 ha-cluster-bootstrap 程序檔設定叢集時,系統會詢問您是否設定虛擬 IP 以用於叢集管理。

程序 7.2︰ 登入 Hawk2 Web 介面
  1. 在任一部機器上,啟動網頁瀏覽器並輸入以下 URL:

    https://HAWKSERVER:7630/

    使用執行 Hawk Web 服務的任何叢集節點的 IP 位址或主機名稱取代 HAWKSERVER。如果已設定虛擬 IP 位址以供您使用 Hawk2 進行叢集管理,請使用該虛擬 IP 位址取代 HAWKSERVER

    注意
    注意:證書警告

    當您首次嘗試存取該 URL 時,如果系統顯示證書警告,則表示使用了自行簽署的證書。依預設,自行簽署的證書不被視為可信證書。

    若要驗證證書,請聯絡叢集操作人員獲取證書詳細資料。

    若仍要繼續,您可以在瀏覽器中新增一個例外以略過此警告。

    如需關於如何將自行簽署的證書取代為官方證書管理中心所簽署證書的資訊,請參閱取代自行簽署的證書

  2. 在 Hawk2 登入螢幕中,輸入 hacluster 使用者 (或任何屬於群組 haclient 的其他使用者) 的使用者名稱密碼

  3. 按一下登入

7.3 Hawk2 綜覽:主要元素

登入 Hawk2 後,左側會顯示一個導覽列,右側會顯示一個頂層列,其中包含若干連結。

注意
注意:Hawk2 的可用功能

依預設,以 roothacluster 身分登入的使用者對於所有叢集組態任務都擁有完整的讀-寫存取權限。不過,您可以使用存取控制清單 (ACL) 來定義精細的存取權限。

如果 CRM 中啟用了 ACL,則 Hawk2 的可用功能取決於指定給您的使用者角色及其所指定的存取權限。Hawk2 中的歷程總管只能由使用者 hacluster 來執行。

7.3.1 左側導覽列

監測
  • 狀態:扼要顯示當前的叢集狀態 (與 crmsh 上的 crm status 類似)。如需詳細資料,請參閱第 7.8.1 節 「監控單個叢集」。如果叢集包含訪客節點 (執行 pacemaker_remote 精靈的節點),則也會顯示這些節點。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

  • 儀表板:可讓您監控多個叢集 (如果您設定了 Geo 叢集,則這些叢集還可以位於不同站點)。如需詳細資料,請參閱第 7.8.2 節 「監控多個叢集」。如果叢集包含訪客節點 (執行 pacemaker_remote 精靈的節點),則也會顯示這些節點。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

疑難排解
  • 歷程:開啟可以用來產生叢集報告的歷程總管。如需詳細資料,請參閱第 7.10 節 「檢視叢集歷程」

  • 指令記錄:可列出近期由 Hawk2 執行的 crmsh 指令。

組態

7.3.2 頂層列

Hawk2 的頂層列顯示以下項目:

  • 批次:按一下可切換到批次模式。可用於模擬和分階段進行變更並透過單次交易套用這些變更。如需詳細資料,請參閱第 7.9 節 「使用批次模式」

  • 使用者名稱:可用於設定 Hawk2 的優先設定 (例如,Web 介面的語言,或者是否在 STONITH 處於停用狀態時顯示警告)。

  • 說明:存取 SUSE Linux Enterprise High Availability Extension 文件、閱讀版本說明或報告錯誤。

  • 登出:按一下可登出。

7.4 設定全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crmsh 等叢集管理工具來檢視和修改。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:

程序 7.3︰ 修改全域叢集選項
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態

    叢集組態螢幕隨即開啟。它會顯示全域叢集選項及其當前的值。

    若要在螢幕右側顯示參數的簡短描述,請將滑鼠懸停在參數上方。

    Hawk2 - 叢集組態
    圖 7.1︰ Hawk2 - 叢集組態
  3. 檢查 no-quorum-policystonith-enabled 的值,必要時予以調整:

    1. no-quorum-policy 設為適當的值。請參閱第 6.2.2 節 「全域選項 no-quorum-policy,以取得詳細資料。

    2. 如果出於某種原因需要停用圍籬區隔,請將 stonith-enabled 設定為 no。依預設,該參數設定為 true,因為執行常規的叢集操作必須要使用 STONITH 裝置。依據預設值,如果未設定 STONITH 資源,叢集將拒絕啟動任何資源。

      重要
      重要:不支援沒有 STONITH 的組態
      • 您必須為叢集設定節點圍籬區隔機制。

      • 全域叢集選項 stonith-enabledstartup-fencing 必須設定為 true。如果您變更這些選項,將會失去支援。

    3. 若要從叢集組態中移除某個參數,請按一下該參數旁邊的減號圖示。如果某個參數被刪除,叢集會將該參數視為具有預設值。

    4. 若要將新參數新增至叢集組態,請從下拉式方塊中選擇一個參數。

  4. 如果您需要變更資源預設值操作預設值,請執行下列步驟:

    1. 若要調整值,請在下拉式方塊中選取其他值,或直接編輯該值。

    2. 若要新增新的資源預設值或操作預設值,請從空下拉式方塊中選擇一項,然後輸入值。如果已定義預設值,Hawk2 會自動提供這些預設值。

    3. 若要移除某個參數,請按一下該參數旁邊的減號圖示。如果沒有為資源預設值操作預設值指定值,叢集會使用第 6.3.6 節 「資源選項 (中繼屬性)」第 6.3.8 節 「資源操作」 中所述的預設值。

  5. 確認您的變更。

7.5 設定叢集資源

叢集管理員需要為您叢集中的伺服器上所執行的每個資源或應用程式建立叢集資源。叢集資源可以是網站、郵件伺服器、資料庫、檔案系統、虛擬機器,以及您希望使用者隨時都可以存取的其他伺服器型應用程式或服務。

有關您可以建立之資源類型的綜覽,請參閱第 6.3.3 節 「資源類型」。當您指定資源基本資訊 (ID、類別、提供者和類型) 後,Hawk2 會顯示以下類別:

參數 (例項屬性)

確定資源控制服務的哪個例項。若需更多資訊,請參閱第 6.3.7 節 「例項屬性 (參數)」

建立資源時,Hawk2 會自動顯示所有需要的參數。請編輯這些參數以獲得有效的資源組態。

作業

用於監控資源。若需更多資訊,請參閱第 6.3.8 節 「資源操作」

建立資源時,Hawk2 會顯示最重要的資源操作 (monitorstartstop)。

中繼屬性

告訴 CRM 如何處理特定資源。若需更多資訊,請參閱第 6.3.6 節 「資源選項 (中繼屬性)」

建立資源時,Hawk2 會自動列出該資源的重要中繼屬性,例如,用於定義資源初始狀態的 target-role 屬性。預設設為 Stopped,這樣資源便不會立即啟動)。

使用效益

告知 CRM 某個資源需從節點獲取的容量。若需更多資訊,請參閱第 7.6.8 節 「根據負載影響設定資源的配置」

您可以在建立資源的時候調整這些類別中的項目和值,也可以稍後調整。

7.5.1 顯示目前叢集組態 (CIB)

叢集管理員有時需要知道叢集組態。Hawk2 可以 crm 外圍程序語法、XML 和圖形形式顯示目前組態。若要檢視 crm 外圍程序語法形式的叢集組態,請從左側導覽列中選取組態 › 編輯組態,並按一下顯示。若要改為以原始 XML 顯示組態,請按一下 XML。按一下圖形會以圖形顯示 CIB 中設定的節點和資源。它還會顯示各資源之間的關係。

7.5.2 透過精靈新增資源

Hawk2 精靈是設定簡單資源 (如虛擬 IP 位址或 SBD STONITH 資源) 的便捷方式。對於包含多個資源的複雜組態 (例如 DRBD 區塊裝置或 Apache Web 伺服器的資源組態) 而言,這種方法也十分有用。精靈會引導您完成所有組態步驟,並提供您需要輸入的參數的相關資訊。

程序 7.4︰ 使用資源精靈
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 精靈

  3. 按一下具體類別旁邊的向下箭頭圖示,藉以擴大該類別,然後選取所需精靈。

  4. 按照螢幕上的指示執行操作。在最後一個設定步驟之後,驗證所輸入的值。

    Hawk2 會顯示它將執行的動作以及設定成果。根據組態,系統可能會提示您要先輸入 root 密碼,才能套用組態。

Hawk2—Apache Web 伺服器精靈
圖 7.2︰ Hawk2—Apache Web 伺服器精靈

7.5.3 新增簡單資源

若要建立最基本的資源類型,請執行下列步驟:

程序 7.5︰ 新增基本資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 基本資源

  3. 輸入唯一的資源 ID

  4. 如果存在資源組態所要依據的資源範本,請選取範本。如需設定範本的詳細資料,請參閱程序 7.6 「新增資源範本」

  5. 若要選取資源代辦類別,您需要使用:lsbocfservicestonithsystemd。如需詳細資訊,請參閱第 6.3.2 節 「受支援的資源代辦類別」

  6. 如果選取了「ocf」類別,請指定 OCF 資源代辦的提供者。OCF 規格允許多個廠商提供相同的資源代辦。

  7. 類型清單中,選取要使用的資源代辦 (例如IPaddrFilesystem)。此資源代辦的簡要描述即會顯示。

    然後,資源基本情況設定完畢。

    注意
    注意

    類型清單中顯示的選項取決於您所選的類別(對於 OCF 資源,還取決於提供者)。

    Hawk2—基本資源
    圖 7.3︰ Hawk2—基本資源
  8. 若要保留 Hawk2 建議的參數操作中繼屬性,請按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

    若要調整參數、操作或中繼屬性,請參閱第 7.5.5 節 「修改資源」。若要設定資源的使用率屬性,請參閱程序 7.21 「設定資源所需的容量」

7.5.4 新增資源範本

若要建立大量具有相似組態的資源,定義資源範本是最輕鬆的方式。定義資源範本後,您可以在基本資源或某些類型的條件約束中參考該範本。如需有關資源範本功能和用法的詳細資訊,請參閱第 6.5.3 節 「資源範本和條件約束」

程序 7.6︰ 新增資源範本

資源範本的設定方式與基本資源類似:

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 範本

  3. 輸入唯一的資源 ID

  4. 請遵照程序 7.5 「新增基本資源」中從步驟 5 開始的指示。

7.5.5 修改資源

建立資源後,您隨時都可以視需要修改其組態,也就是調整其參數、操作或中繼屬性。

程序 7.7︰ 修改資源的參數、操作或中繼屬性
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在 Hawk2 的狀態螢幕中,轉到資源清單。

  3. 操作欄中,按一下要修改的資源或群組旁邊的向下箭頭圖示,然後選取編輯

    資源組態螢幕隨即開啟。

    Hawk2—編輯基本資源
    圖 7.4︰ Hawk2—編輯基本資源
  4. 若要新增新參數、操作或中繼屬性,請從空下拉式方塊中選取一項。

  5. 若要編輯操作類別中的任意值,請按一下相應項目的編輯圖示,為該操作輸入其他值,然後按一下套用

  6. 完成之後,按一下資源組態螢幕中的套用按鈕,確認您對參數、操作或中繼資源所做的變更。

    螢幕頂部的訊息會顯示動作是否成功。

7.5.6 新增 STONITH 資源

重要
重要:不支援沒有 STONITH 的組態
  • 您必須為叢集設定節點圍籬區隔機制。

  • 全域叢集選項 stonith-enabledstartup-fencing 必須設定為 true。如果您變更這些選項,將會失去支援。

依預設,全域叢集選項 stonith-enabled 設為 true。如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。設定一或多個 STONITH 資源以完成 STONITH 設定。若要為 SBD、libvirt (KVM/Xen) 或 vCenter/ESX 伺服器新增 STONITH 資源,最簡單的方式就是使用 Hawk2 精靈 (請參閱第 7.5.2 節 「透過精靈新增資源」)。您也可以按照類似的方式為其他資源設定 STONITH 資源,但其行為在某些方面存在差異。如需詳細資料,請參閱第 10.3 節 「STONITH 資源和組態」

程序 7.8︰ 新增 STONITH 資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 基本資源

  3. 輸入唯一的資源 ID

  4. 類別清單中,選取資源代辦類別stonith

  5. 類型清單中,選取用於控制 STONITH 裝置的 STONITH 外掛程式。此外掛程式的簡要描述即會顯示。

  6. Hawk2 會自動顯示該資源必需的參數。請輸入每個參數的值。

  7. Hawk2 會顯示最重要的資源操作並建議預設值。如果此時不修改任何設定,Hawk2 會在您確認後立即新增建議的操作及其預設值。

  8. 如無變更必要,請保留預設的中繼屬性設定。

    Hawk2—STONITH 資源
    圖 7.5︰ Hawk2—STONITH 資源
  9. 確認變更以建立 STONITH 資源。

    螢幕頂部的訊息會顯示動作是否成功。

要完成圍籬區隔組態,請新增條件約束。如需詳細資訊,請參閱第 10 章 「圍籬區隔與 STONITH

7.5.7 新增叢集資源群組

有些叢集資源依存於其他元件或資源,這些資源要求每個元件或資源依特定順序啟動,並在同一部伺服器上執行。為簡化此組態,SUSE Linux Enterprise High Availability Extension 支援使用群組。

資源群組包含一組需放置在一起的資源,這些資源按順序啟動並以相反順序停止。如需資源群組的範例和群組及其內容的詳細資訊,請參閱第 6.3.5.1 節 「群組」

注意
注意:空群組

群組至少須包含一個資源,否則組態視為無效。建立群組時,Hawk2 允許您建立多個基本資源並將它們新增至群組。如需詳細資料,請參閱第 7.7.1 節 「編輯資源和群組」

程序 7.9︰ 新增資源群組
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 群組

  3. 輸入唯一的群組 ID

  4. 若要定義群組成員,請選取子項清單中的一個或多個項目。使用右側的把手圖示將群組成員拖放為需要的順序,以對群組成員重新排序。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—資源群組
圖 7.6︰ Hawk2—資源群組

7.5.8 新增複製品資源

如果希望某些資源同時在叢集中的多個節點上執行,請將這些資源設定為複製品。舉例而言,對於 OCFS2 之類您想要用做複製品的叢集檔案系統,資源 ocf:pacemaker:controld 任何一般性資源或資源群組均可以複製。複製之資源的例項可以有相同的行為方式,但是其設定方式可能有所不同,具體視其所在的節點而定。

如需可用資源複製品類型的綜覽,請參閱第 6.3.5.2 節 「複製品」

注意
注意:複製品的子資源

複製品可以將基本資源或群組做為子資源。在 Hawk2 中,建立複製品時不能建立或修改子資源。請在新增複製品之前建立子資源並視需要對其進行設定。如需詳細資訊,請參閱第 7.5.3 節 「新增簡單資源」第 7.5.7 節 「新增叢集資源群組」

程序 7.10︰ 新增複製品資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 複製品

  3. 輸入唯一的複製品 ID

  4. 子資源清單中,選取要做為複製品子資源的基本資源或群組。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—複製資源
圖 7.7︰ Hawk2—複製資源

7.5.9 新增多狀態資源

多狀態資源是一種特殊的複製品,可讓例項在兩種操作模式 (稱為主動/被動主要/次要主要/從屬) 之一下執行。多狀態資源只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,多狀態資源的要求與簡單資源不同。如需詳細資料,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的《Pacemaker Explained》(Pacemaker 說明)。詳情位於「Multi-state - Resources That Have Multiple Modes」(多狀態 - 有多種模式的資源) 一節。

注意
注意:多狀態資源的子資源

多狀態資源可以將基本資源或群組做為子資源。在 Hawk2 中,建立多狀態資源時不能建立或修改子資源。請在新增多狀態資源之前建立子資源,並視需要對其進行設定。如需詳細資訊,請參閱第 7.5.3 節 「新增簡單資源」第 7.5.7 節 「新增叢集資源群組」

程序 7.11︰ 新增多狀態資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 多狀態

  3. 輸入唯一的多狀態 ID

  4. 子資源清單中,選取要做為多狀態資源之子資源的基本資源或群組。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—多狀態資源
圖 7.8︰ Hawk2—多狀態資源

7.5.10 使用標記對資源分組

使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。您可以使用標記對概念相關的資源進行分組。例如,如果您有若干個資源與同一個資料庫相關,可以為所有相關資源新增名為資料庫的標記。

標記名下的所有資源都可以透過一則簡單的指令啟動或停止。

程序 7.12︰ 新增標記
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 標記

  3. 輸入唯一的標記 ID

  4. 物件清單中選取要與標記關聯的資源。

  5. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—標記
圖 7.9︰ Hawk2—標記

7.5.11 設定資源監控

High Availability Extension 不僅能夠偵測節點故障,還能偵測到節點上個別資源發生的故障。若要確定某個資源是否正在執行,請對其設定資源監控。通常,叢集只會在資源執行時對其進行監控。但是,若要偵測並行存取違規,還需針對停止的資源設定監控。設定資源監控需指定逾時和/或啟動延遲值以及間隔。該間隔會告知 CRM 應檢查資源狀態的頻率。您還可以設定特定參數,例如為 startstop 操作設定 timeout

程序 7.13︰ 新增和修改操作
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 7.5 「新增基本資源」所述新增資源,或選取現有的基本資源進行編輯。

    Hawk2 會自動顯示最重要的操作 (startstopmonitor) 並建議預設值。

    若要查看每個所建議的值名下的屬性,請將滑鼠指標懸停在相應的值上方。

    Image
  3. 若要變更針對 startstop 操作所建議的 timeout 值:

    1. 按一下該操作旁邊的筆型圖示。

    2. 在開啟的對話方塊中為 timeout 參數輸入其他值,例如 10,然後確認變更。

  4. 若要為 monitor 操作變更建議的間隔值:

    1. 按一下該操作旁邊的筆型圖示。

    2. 在開啟的對話方塊中,為監控 interval 輸入其他值。

    3. 在資源停止的情況下設定資源監控:

      1. 從下面的空下拉式方塊中選取 role 這一項。

      2. 角色下拉式方塊中選取已停止

      3. 按一下套用確認所做的變更,並關閉操作的對話方塊。

  5. 確認您在資源組態螢幕中所做的變更。螢幕頂部的訊息會顯示動作是否成功。

有關資源監控偵測到失敗時應執行的程序,請參閱第 6.4 節 「資源監控」

若要檢視發生的資源故障,請在 Hawk2 中切換至狀態螢幕,然後選取關注的資源。在操作欄中按一下向下箭頭圖示,然後選取最近的事件。隨後開啟的對話方塊會列出對資源執行的最近動作。其中故障顯示為紅色。若要檢視資源詳細資料,請按一下操作欄中的放大鏡圖示。

Hawk2 - 資源詳細資料
圖 7.10︰ Hawk2 - 資源詳細資料

7.6 設定條件約束

設定所有資源後,需要指定叢集應如何正確處理這些資源。使用資源約束條件可指定資源可以在哪些叢集節點上執行、以何順序載入資源,以及特定資源依賴於其他哪些資源。

如需可用條件約束類型的綜覽,請參閱第 6.5.1 節 「條件約束類型」。定義條件約束時,還需要指定分數。如需叢集中分數及其含義的詳細資訊,請參閱第 6.5.2 節 「分數與 Infinity」

7.6.1 新增位置條件約束

位置條件約束決定了資源在哪些節點上可以執行、優先執行或禁止執行。舉例而言,位置條件約束可以設為與特定資料庫相關的所有資源都在同一個節點上執行。

程序 7.14︰ 新增位置條件約束

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 位置

  3. 輸入唯一的條件約束 ID

  4. 資源清單中選取要為之定義條件約束的一個或多個資源。

  5. 輸入分數。分數表示您要指定給此資源條件約束的值。正值表示資源可以在您下一步中指定的節點上執行。負值表示資源不應在該節點上執行。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在該節點上執行,請按一下箭頭圖示並選取永遠。這會將分數設為 INFINITY

    • 若要杜絕資源在節點上執行,按一下箭頭圖示並選取永不。這會將分數設為 -INFINITY,表示禁止資源在節點上執行。

    • 若要將分數設為 0,按一下箭頭圖示並選取建議。這樣便會停用條件約束。如果您想設定資源發現,又不想對資源進行條件約束,即可採用這個辦法。

  6. 選取一個節點

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—位置條件約束
圖 7.11︰ Hawk2—位置條件約束

7.6.2 新增並存條件約束

並存條件約束會告訴叢集哪些資源可以或不可以同時在節點上執行。由於並存條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立並存條件約束。

程序 7.15︰ 新增並存條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 並存

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。分數決定了資源之間的位置關係。正值表示資源應該在同一個節點上執行。負值表示資源不應該在同一個節點上執行。該分數會結合其他因素來決定將資源配置於何處。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在同一個節點上執行,請按一下箭頭圖示並選取永遠。這會將分數設為 INFINITY

    • 若要杜絕資源在同一個節點上執行,按一下箭頭圖示並選取永不。這會將分數設為 -INFINITY,表示禁止資源在同一個節點上執行。

  5. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      由於最頂端的資源依賴於下一個資源 (下面的資源依此類推),叢集首先會決定向哪個位置放置最後一個資源,然後根據該決定放置依賴資源。如果無法符合條件約束要求,叢集可能不允許執行相依資源。

    3. 若要交換共存條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  6. 需要時可以為每個資源指定更多參數 (例如 StartedStoppedMasterSlavePromoteDemote):按一下資源旁邊的空白下拉式方塊並選取所要的項目。

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—並存條件約束
圖 7.12︰ Hawk2—並存條件約束

7.6.3 新增順序條件約束

順序條件約束定義了啟動和停止資源的順序。由於順序條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立順序條件約束。

程序 7.16︰ 新增順序條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取組態 › 新增條件約束 › 順序

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。若分數大於零,則強制執行順序條件約束,否則只是選擇性執行。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要設為強制執行順序條件約束,按一下箭頭圖示並選取強制

    • 若要只是選擇性執行順序條件約束,按一下箭頭圖示並選取選擇性

    • 序列化:要確保對資源杜絕兩對停止/啟動動作同時發生的情況,按一下箭頭圖示並選取序列化。這樣可以確保只有在一個資源完全啟動後,系統才能啟動其他資源。特別是對於在啟動期間會對主機產生大量負載的資源,通常會使用此方法。

  5. 對於順序條件約束通常可以啟用對稱選項。這會指定資源停止時使用相反順序。

  6. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      排在最前面的資源最先啟動,然後是排在第二的資源,依此類推。通常,資源停止時會使用相反順序。

    3. 若要交換順序條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  7. 需要時可以為每個資源指定更多參數 (例如 StartedStoppedMasterSlavePromoteDemote):按一下資源旁邊的空白下拉式方塊並選取所要的項目。

  8. 確認變更以完成組態設定。螢幕頂部的訊息會顯示動作是否成功。

Hawk2—順序條件約束
圖 7.13︰ Hawk2—順序條件約束

7.6.4 在條件約束中使用資源集

若要用另一種方式來定義條件約束,您可以使用資源組,其順序語意與群組相同。

程序 7.17︰ 對條件約束使用資源集
  1. 若要在位置條件約束中使用資源集:

    1. 遵照程序 7.14 「新增位置條件約束」中的指示,但步驟 4 除外:透過按 Ctrl (或 Shift) 及滑鼠選取多個資源,而不是選取單個資源。如此就會在位置條件約束中建立一個資源集。

    2. 若要從位置條件約束中移除某個資源,請在按住 Ctrl 的同時再次按一下該資源即可將其取消選取。

  2. 若要在並存或順序條件約束中使用資源集:

    1. 遵照程序 7.15 「新增並存條件約束」程序 7.16 「新增順序條件約束」中的指示,但用於為條件約束定義資源的步驟除外 (步驟 5.a步驟 6.a):

    2. 新增多個資源。

    3. 若要建立資源集,按一下資源旁邊的鏈結圖示,將其鏈結到上方的資源。屬於資源集的資源四周以框架圍起,以此標示資源集。

    4. 您也可以將多個資源併入某個資源集,或建立多個資源集。

      Hawk2—一個並存條件約束中的兩個資源集
      圖 7.14︰ Hawk2—一個並存條件約束中的兩個資源集
    5. 若要解除資源與其上方資源之間的鏈結,按一下該資源旁邊的剪刀圖示。

  3. 確認變更以完成條件約束組態。

7.6.5 更多資訊

如需設定條件約束的詳細資訊,以及關於順序與並存基本概念的詳細背景資訊,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上提供的文件:

  • Pacemaker Explained》(Pacemaker 說明) 的「Resource Constraints」(資源條件約束) 一章

  • Colocation Explained》(並存說明)

  • Ordering Explained》(順序說明)

7.6.6 指定資源容錯移轉節點

若資源失敗,系統會自動將其重新啟動。若無法在目前節點上重新啟動,或資源已在目前節點上失敗 N 次,則會嘗試容錯移轉至其他節點。您可以定義一個失敗計數,讓資源在失敗該次數 (migration-threshold) 之後移轉至新節點。如果叢集中有兩個以上的節點,則某個資源應容錯移轉至哪個節點由 High Availability 軟體來選擇。

您可以執行以下步驟指定資源容錯移轉至某個特定節點:

程序 7.18︰ 指定容錯移轉節點
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 7.14 「新增位置條件約束」 所述為該資源設定位置條件約束。

  3. 程序 7.7: 修改資源的參數、操作或中繼屬性中的步驟 4 所述將 migration-threshold 中繼屬性新增至該資源,並為該 migration-threshold 輸入一個值。該值應該為小於 INFINITY 的正數。

  4. 若要讓資源的 failcount 自動過期,請依程序 7.5: 新增基本資源中的步驟 4 所述將 failure-timeout 中繼屬性新增至該資源,並為該 failure-timeout 輸入一個

    Image
  5. 若要指定具有資源優先設定的其他容錯移轉節點,請建立其他位置條件約束。

範例 6.8 「移轉限定值 — 程序流程」 中演示了關於 migration-threshold 和 failcount 的程序流程。

您也可以隨時手動清理資源的 failcount,而不是等待資源的 failcount 自動過期。如需詳細資訊,請參閱第 7.7.3 節 「清理資源」

7.6.7 指定資源錯誤回復節點 (資源粘性)

當原始節點重新回到線上和叢集中時,資源可能會回復至該節點。若要防止此狀況,或要為資源指定不同的錯誤回復節點,請變更資源的粘性值。您可以在建立資源時或建立之後指定資源粘性。

有關不同資源粘性值的含義,請閱第 6.5.5 節 「錯誤回復節點」

程序 7.19︰ 指定資源粘性
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 7.7: 修改資源的參數、操作或中繼屬性 中的步驟 4 所述將 resource-stickiness 中繼屬性新增至資源。

  3. resource-stickiness 指定介於 -INFINITYINFINITY 之間的值。

    Image

7.6.8 根據負載影響設定資源的配置

並非所有資源都相同。有些資源 (例如 Xen 客體作業系統) 要求代管它們的節點滿足其容量要求。如果投放資源後,所需的容量總和超出了提供的容量,則資源效能將會下降,或者資源將會失敗。

鑒於此,High Availability Extension 允許您指定以下參數:

  1. 特定節點提供的容量。

  2. 特定資源要求的容量。

  3. 配置資源的整體策略。

如需詳細資料及組態範例,請參閱第 6.5.6 節 「依據負載影響放置資源」

使用率屬性用於設定資源的要求以及節點提供的容量。您需要先設定節點的容量,然後才能設定資源所需的容量。

程序 7.20︰ 設定節點提供的容量
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態

  3. 節點索引標籤上,選取要設定其容量的節點。

  4. 操作欄中按一下向下箭頭圖示,然後選取編輯

    編輯節點螢幕即會開啟。

  5. 使用率下,將使用率屬性的名稱輸入到空下拉方塊中。

    該名稱可以是任意的 (例如 RAM_in_GB)。

  6. 按一下新增圖示以新增屬性。

  7. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

    Image
  8. 新增所需數量的使用率屬性,並為其新增相應的值。

  9. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

程序 7.21︰ 設定資源所需的容量

請在建立基本資源或編輯現有基本資源時,設定特定資源需從節點中獲取的容量。

您需要先依程序 7.20 所述設定叢集節點的使用率屬性,之後才能將使用率屬性新增至資源。

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要將使用率屬性新增至現有資源:依第 7.7.1 節 「編輯資源和群組」所述轉到管理 › 狀態並開啟資源組態對話方塊。

    如果要建立新資源:轉到組態 › 新增資源,然後依第 7.5.3 節 「新增簡單資源」所述繼續操作。

  3. 在資料組態對話方塊中,轉到使用率類別。

  4. 從空下拉方塊中,選取您在程序 7.20 中已為節點設定的其中一個使用率屬性。

  5. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

  6. 新增所需數量的使用率屬性,並為其新增相應的值。

  7. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

設定節點提供的容量以及資源所需的容量之後,請在全域叢集選項中設定位置策略。否則,容量組態不會生效。可以使用幾個策略來排程負載:例如,您可將負載集中於最少的節點上,或在所有可用的節點上平均分攤。若需更多資訊,請參閱第 6.5.6 節 「依據負載影響放置資源」

程序 7.22︰ 設定配置策略
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態以開啟相應的螢幕。該螢幕會顯示全域叢集選項和資源,以及操作預設值。

  3. 從螢幕上部的空下拉式方塊中選取 placement-strategy

    依預設,其值會設定為預設,表示不考慮使用率屬性和值。

  4. 根據要求將配置策略設定為適當的值。

  5. 確認您的變更。

7.7 管理叢集資源

除了設定叢集資源以外,Hawk2 還可用於從狀態螢幕管理現有資源。若要瞭解螢幕概觀,請參見第 7.8.1 節 「監控單個叢集」

7.7.1 編輯資源和群組

如果您需要編輯現有資源,請轉到狀態螢幕。在操作欄中,按一下要修改的資源或群組旁邊的向下箭頭圖示,然後選取編輯

編輯螢幕即會顯示。如果要編輯基本資源,則以下操作可用:

針對基本資源的操作
  • 複製資源。

  • 重新命名資源 (變更其 ID)。

  • 刪除資源。

如果要編輯群組,則以下操作可用:

針對群組的操作
  • 建立將新增至此群組的新基本資源。

  • 重新命名群組 (變更其 ID)。

  • 使用右側的把手圖示按目標順序拖放群組成員,即可為其重新排序。

7.7.2 啟動資源

啟動叢集資源之前,請先確定該資源已正確設定。例如,如果使用 Apache 伺服器做為叢集資源,請先設定 Apache 伺服器。完成 Apache 組態後再在叢集中啟動相應資源。

注意
注意:不要對叢集管理的服務執行任何操作

當您正透過 High Availability Extension 管理某個資源時,就不能再啟動或停止該資源 (例如,不能在叢集之外手動啟動或停止,或者在開機或重新開機時啟動或停止)。High Availability Extension 軟體負責所有服務的啟動或停止動作。

不過,如果您要檢查服務是否正確設定,請手動將其啟動,但務必在 High Availability Extension 接管之前將它再次停止。

若要對目前由叢集管理的資源進行干預,請先將資源設定為維護模式。如需詳細資料,請參閱程序 16.5 「使用 Hawk2 將資源置於維護模式」

透過 Hawk2 建立資源時,您可以使用 target-role 中繼屬性設定該資源的初始狀態。如果將其值設定為 stopped,則資源建立後不會自動啟動。

程序 7.23︰ 啟動新資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 選取要啟動的資源。在其操作欄中,按一下啟動圖示。若要繼續,請確認顯示的訊息。

    資源啟動後,Hawk2 會將資源的狀態變為綠色,並顯示目前執行該資源的節點。

7.7.3 清理資源

如果資源失敗,系統會自動將其重新啟動,但每次失敗都會增加該資源的 failcount。

如果為資源設定了 migration-threshold,則當失敗次數達到移轉限定值時,節點將不再執行該資源。

資源的 failcount 可自動重設 (若為資源設定 failure-timeout 選項),也可按如下方式手動重設。

程序 7.24︰ 清理資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取狀態資源清單還會顯示狀態

  3. 轉到資源,進行清理。在操作欄中按一下向下箭頭按鈕,然後選取清理。若要繼續,請確認顯示的訊息。

    系統會執行指令 crm resource cleanup 並清理所有節點上的資源。

7.7.4 移除叢集資源

如果需要從叢集移除資源,請按照下面的程序操作,以免出現組態錯誤:

程序 7.25︰ 移除叢集資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 依照程序 7.24 「清理資源」 中的說明在所有節點上清理該資源。

  3. 停止資源:

    1. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

    2. 操作欄中按一下資源旁邊的停止按鈕。

    3. 若要繼續,請確認顯示的訊息。

      資源停止後,狀態欄將會反映此變化。

  4. 刪除資源:

    1. 從左側導覽列中,選取組態 › 編輯組態

    2. 資源清單中前往相應的資源。在操作欄中按一下資源旁邊的刪除按鈕。

    3. 若要繼續,請確認顯示的訊息。

7.7.5 移轉叢集資源

第 7.6.6 節 「指定資源容錯移轉節點」 所述,當軟體或硬體發生故障時,叢集會自動對資源進行容錯移轉 (移轉),具體情況視您可以定義的特定參數 (例如移轉限定值或資源粘性) 而定。除此之外,您也可以手動將資源移轉至叢集中的其他節點。或者,您決定將資源移出目前節點,然後讓叢集決定移入的目標位置。

程序 7.26︰ 手動移轉資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 資源清單中選取相應的資源。

  4. 操作欄中按一下向下箭頭按鈕,然後選取移轉

  5. 隨後開啟的視窗中會提供以下選項:

    • 從目前節點移開:此選項會為目前節點建立一個分數為 -INFINITY 的位置條件約束。

    • 或者,您也可以將資源移到另一節點上。如此會建立一個位置條件約束,其目的節點的分數為 INFINITY

  6. 確認您的選擇。

若要讓資源回到原來的狀態,請執行下列步驟:

程序 7.27︰ 取消移轉資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 資源清單中前往相應的資源。

  4. 操作欄中,按一下向下箭頭按鈕,然後選取清除。若要繼續,請確認顯示的訊息。

    Hawk2 會使用 crm_resource  --clear 指令。資源可以移回其原始位置,也可以保留在目前的位置 (具體取決於資源粘性)。

如需詳細資訊,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的《Pacemaker Explained》(Pacemaker 說明)。可參閱其中的「Resource Migration」(資源移轉) 一節。

7.8 監控叢集

Hawk2 提供不同的螢幕來監控單個叢集和多個叢集:狀態儀表板螢幕。

7.8.1 監控單個叢集

若要監控單個叢集,請使用狀態螢幕。當您登入 Hawk2 後,預設會顯示狀態螢幕。右上角的圖示會一目了然地顯示叢集狀態。如需其他詳細資料,請參閱下列類別。

錯誤

如果發生了錯誤,會顯示在頁面頂部。

資源

顯示設定的資源,包括它們的狀態名稱 (ID)、位置 (執行資源的節點) 和資源代辦類型。在操作欄中,您可以啟動或停止資源,觸發多個動作或檢視詳細資料。可以觸發的動作包括:將資源設定為維護模式 (或移除維護模式)、將其移轉到其他節點、清理資源、顯示任何最近的事件,或編輯資源。

節點

顯示您所登入的叢集站點名下的節點,包括節點狀態名稱。在維護待命欄中,您可以設定或移除節點的維護待命旗標。操作列可用於檢視節點的最近事件或更多詳細資料:例如,檢視是否為相應節點設定了 utilizationstandbymaintenance 屬性。

票證

僅當已設定了票證的情況下才顯示 (用於與 Geo 叢集配合使用)。

Hawk2—叢集狀態
圖 7.15︰ Hawk2—叢集狀態

7.8.2 監控多個叢集

若要監控多個叢集,請使用 Hawk2 儀表板儀表板螢幕中顯示的叢集資訊儲存在伺服器一端。叢集節點之間會同步這些資訊 (如果已設定叢集節點之間的無密碼 SSH 存取權限)。如需詳細資料,請參閱第 D.2 節 「設定無密碼 SSH 帳戶」。不過,執行 Hawk2 的機器甚至不需要屬於任何叢集也可實現該目的,它可以是不相關的獨立系統。

除了一般的 Hawk2 要求之外,還需要符合以下先決條件才能使用 Hawk2 監控多個叢集:

先決條件
  • 要透過 Hawk2 儀表板監控的所有叢集都必須執行 SUSE Linux Enterprise High Availability Extension 15 SP2

  • 如果您之前未在每個叢集節點上以自己的證書 (或官方證書管理中心簽署的證書) 取代 Hawk2 的自行簽署證書,請執行以下操作:在每個叢集的每個節點上至少登入 Hawk2 一次。驗證證書 (或在瀏覽器中新增一個例外以使警告不再顯示)。否則,Hawk2 將無法連接到叢集。

程序 7.28︰ 使用 儀表板監控多個叢集
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 儀表板

    Hawk2 會顯示目前叢集站點的資源和節點綜覽。此外,它還會顯示已設定為與 Geo 叢集配合使用的所有票證。如需有關此檢視中所用圖示的資訊,請按一下圖例。若要搜尋資源 ID,請在搜尋文字方塊中輸入名稱 (ID)。若只想顯示特定節點,請按一下過濾器圖示,並選取一個過濾選項。

    包含一個叢集站點 (amsterdam) 的 Hawk2 儀表板
    圖 7.16︰ 包含一個叢集站點 (amsterdam) 的 Hawk2 儀表板
  3. 若要為多個叢集新增儀表板:

    1. 按一下新增叢集

    2. 輸入用於在儀表板中識別該叢集的叢集名稱。例如,berlin

    3. 輸入第二個叢集中某個節點的完全合格的主機名稱。例如,charlie

      Image
    4. 按一下新增。Hawk2 會為新增的叢集站點顯示另一個索引標籤,其中會列出該叢集站點的節點和資源綜覽。

      注意
      注意:連接錯誤

      如果系統提示您輸入密碼來登入此節點,則表明您可能未連接到該節點且未取代自行簽署的證書。在此情況下,即使在輸入密碼之後,連接也將失敗,並顯示以下訊息:連接至伺服器時發生錯誤。將在 5 秒後重試...

      若要繼續,請參閱取代自行簽署的證書

  4. 若要檢視叢集站點的更多詳細資料或管理叢集站點,請切換到站點的索引標籤並按一下鎖鏈圖示。

    Hawk2 會在新的瀏覽器視窗或索引標籤中開啟此站點的狀態檢視。在此檢視中,您可以管理 Geo 叢集的這部分內容。

  5. 若要從儀表板中移除某個叢集,請按一下該叢集詳細資料右側的 x 圖示。

7.9 使用批次模式

Hawk2 提供批次模式,包括叢集模擬器。該模式可用於以下操作:

  • 對叢集進行分階段變更並透過單次交易套用這些變更,而不是讓每項變更立即生效。

  • 模擬變更和叢集事件,例如,瞭解可能失敗的情況。

例如,在建立相互依賴的資源群組時,可以使用批次模式。透過使用批次模式,您可以避免將中繼或不完整的組態套用到叢集。

啟用批次模式後,您可以新增或編輯資源和條件約束,或變更叢集組態。此外,還可以模擬叢集中的事件,包括變為線上或離線的節點、資源操作,以及要授予或撤銷的票證。如需詳細資料,請參閱程序 7.30 「插入節點、資源或票證事件」

叢集模擬器會在每次變更後自動執行,並在使用者介面上顯示預期效果。舉例而言,這還意味著當您在批次模式下停止某資源時,使用者介面上會將該資源顯示為已停止,但實際上,該資源仍在執行中。

重要
重要:線上系統的精靈和變更

某些精靈包含除純叢集組態以外的其他動作。在批次模式下使用這些精靈時,叢集組態以外的任何其他變更都將立即套用到線上系統。

因此,需要 root 許可權的精靈無法在批次模式下執行。

程序 7.29︰ 使用批次模式
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要啟動批次模式,請從頂層列選取批次

    頂層列下方即會另外顯示一列,指出批次模式處於使用中狀態,並會包含指向您可在批次模式下執行的動作的連結。

    Hawk2 批次模式已啟動
    圖 7.17︰ Hawk2 批次模式已啟動
  3. 當批次模式處於使用中狀態時,對叢集執行任意變更,例如新增或編輯資源和條件約束,或編輯叢集組態。

    系統將會模擬變更,並將其顯示在所有螢幕上。

  4. 若要檢視所做變更的詳細資料,請從批次模式列中選取顯示批次模式視窗即會開啟。

    對於任何組態變更,該模式會以 crmsh 語法顯示線上狀態與模擬變更之間的差異:以 - 字元開頭的行表示目前狀態,而以 + 開頭的行則顯示預期狀態。

  5. 若要插入事件或檢視更多詳細資料,請參閱程序 7.30。否則請關閉視窗。

  6. 選擇是丟棄還是套用模擬的變更,然後確認您的選擇。此操作還會停用批次模式,使您回到正常模式。

在批次模式下執行時,Hawk2 還允許您插入節點事件資源事件

節點事件

可讓您變更節點的狀態。可用的狀態有線上離線不正常

資源事件

可讓您變更資源的一些內容。例如,您可以設定操作 (如 startstopmonitor)、其要套用到的節點,以及要模擬的預期結果。

票證事件

可讓您測試授予和撤銷票證 (用於 Geo 叢集) 的影響。

程序 7.30︰ 插入節點、資源或票證事件
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 如果批次模式尚未啟動,請按一下頂層列上的批次以切換到批次模式。

  3. 在批次模式列中,按一下顯示以開啟批次模式視窗。

  4. 若要模擬節點的狀態變更:

    1. 按一下插入 › 節點事件

    2. 選取您要操作的節點,並選取其目標狀態

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  5. 若要模擬某個資源作業:

    1. 按一下插入 › 資源事件

    2. 選取要操作的資源和要模擬的操作

    3. 如有必要,請定義一個間隔

    4. 選取要在其上執行該操作的節點以及預期的結果。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

    5. 確認您的變更。

  6. 若要模擬票證動作:

    1. 按一下插入 › 票證事件

    2. 依次選取要操作的票證和要模擬的動作

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  7. 批次模式對話方塊 (圖形 7.18) 會為每個插入的事件顯示新的一行。此處列出的所有事件都會立即被模擬並反映到狀態螢幕上。

    如果您還進行了任何組態變更,線上狀態和模擬變更之間的差異會顯示在所插入事件的下方。

    Hawk2 批次模式 - 插入的事件和組態變更
    圖 7.18︰ Hawk2 批次模式 - 插入的事件和組態變更
  8. 若要移除插入的事件,請按一下該事件旁邊的移除圖示。Hawk2 會相應地更新狀態螢幕。

  9. 若要檢視模擬執行的更多詳細資料,請按一下模擬器並選擇以下選項之一:

    摘要

    顯示詳細的摘要。

    CIB (入)/CIB (出)

    CIB (入) 會顯示初始的 CIB 狀態。CIB (出) 會顯示轉換後 CIB 的情況。

    轉換圖形

    顯示轉換的圖形表示。

    移交

    顯示轉換的 XML 表示。

  10. 如果您已複查模擬的變更,請關閉批次模式視窗。

  11. 若要離開批次模式,請套用丟棄模擬的變更。

7.10 檢視叢集歷程

Hawk2 提供了以下用於檢視叢集過往事件 (依不同的層級和不同的詳細程度) 的功能:

7.10.1 檢視節點或資源的最近事件

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態。它會列出資源節點

  3. 若要檢視資源的最近事件:

    1. 按一下資源並選取相應的資源。

    2. 在資源的操作欄中按一下向下箭頭按鈕,然後選取最近的事件

      Hawk2 會開啟一個新視窗,並顯示最近事件的表格檢視窗。

  4. 若要檢視節點的最近事件:

    1. 按一下節點並選取相應的節點。

    2. 在節點的操作欄中,選取最近的事件

      Hawk2 會開啟一個新視窗,並顯示最近事件的表格檢視窗。

      Image

7.10.2 使用歷程總管獲得叢集報告

從左側導覽列中,選取疑難排解 › 歷程,以存取歷程總管歷程總管可讓您建立詳細的叢集報告並檢視轉換資訊。它提供以下選項:

產生

建立特定時間內的叢集報告。Hawk2 會呼叫 crm report 指令來產生報告。

上傳

可讓您上傳直接使用 crm 外圍程序建立的或位於不同叢集上的 crm report 歸檔。

產生或上傳報告後,它們會顯示在報告下方。在報告清單中,您可以顯示報告的詳細資料,下載或刪除報告。

Hawk2 - 歷程總管主檢視窗
圖 7.19︰ Hawk2 - 歷程總管主檢視窗
程序 7.31︰ 產生或上傳叢集報告
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取疑難排解 › 歷程

    歷程總管螢幕會在產生檢視窗中開啟。依預設,報告的建議時間範圍為過去 1 小時。

  3. 若要建立叢集報告:

    1. 若要立即啟動報告,請按一下產生

    2. 若要修改報告的時間範圍,請按一下建議時間範圍的任意位置並從下拉方塊中選取另一個選項。您還可以分別輸入自訂的開始日期、結束日期及小時。若要啟動報告,請按一下產生

      報告產生後會顯示在報告下方。

  4. 若要上傳叢集報告,crm report 歸檔必須位於您可透過 Hawk2 存取的檔案系統中。請執行下列步驟:

    1. 切換到上傳索引標籤。

    2. 瀏覽叢集報告歸檔並按一下上傳

      報告上傳後會顯示在報告下方。

  5. 若要下載或刪除報告,請在操作欄中按一下報告旁邊的相應圖示。

  6. 若要檢視歷程總管中的報告詳細資料,請按一下報告的名稱,或從操作欄中選取顯示

    Image
  7. 按一下報告按鈕返回到報告清單。

歷程總管中的報告詳細資料
  • 報告的名稱。

  • 報告的開始時間。

  • 報告的結束時間。

  • 報告所涵蓋的叢集中的轉換次數以及所有轉換的時間線。若要瞭解如何檢視轉換的更多詳細資料,請參閱第 7.10.3 節

  • 節點事件。

  • 資源事件。

7.10.3 在歷程總管中檢視轉換詳細資料

對於每個轉換,叢集都會儲存其所提供的狀態副本,做為對 pacemaker-schedulerd 的輸入。系統會記錄此歸檔的路徑。所有 pe-* 檔案都會在指定協調器 (DC) 上產生。由於叢集中的 DC 可能會更換,因此可能存在來自多個節點的 pe-* 檔案。所有 pe-* 檔案都是儲存的 CIB 快照,pacemaker-schedulerd 在執行計算時會將其用做輸入。

在 Hawk2 中,您可以顯示每個 pe-* 檔案的名稱、建立時間以及建立各檔案所在的節點。此外,歷程總管可以依據相應的 pe-* 檔案以視覺化形式顯示以下詳細資料:

歷程總管中的轉換詳細資料
詳細資料

顯示屬於轉換的記錄資料片段。顯示以下指令的輸出 (包括資源代辦的記錄訊息):

crm history transition peinput
組態

顯示建立 pe-* 檔案時的叢集組態。

差異

顯示所選 pe-* 檔案與下一個檔案之間的組態和狀態差異。

記錄

顯示屬於轉換的記錄資料片段。顯示以下指令的輸出:

crm history transition log peinput

這包括來自以下精靈的詳細資料:pacemaker-schedulerd pacemaker-controldpacemaker-execd

圖形

顯示轉換的圖形表示。如果您按一下圖形,則會模擬計算 (與 pacemaker-schedulerd 執行的計算完全一樣),並產生圖形視覺效果。

程序 7.32︰ 檢視轉換詳細資料
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取疑難排解 › 歷程

    如果報告已產生或上傳,它們會顯示在報告清單中。否則,請依程序 7.31 所述產生或上傳報告。

  3. 按一下報告的名稱或從操作欄中選取顯示以開啟歷程總管中的報告詳細資料

  4. 若要存取轉換詳細資料,您需要在下面顯示的轉換時間線中選取一個轉換點。使用上一個下一個以及放大縮小圖示尋找您感興趣的轉換。

  5. 若要顯示 pe-input* 檔案的名稱、建立時間和建立該檔案所在的節點,請將滑鼠指標懸停在時間線中的轉換點上。

  6. 若要檢視歷程總管中的轉換詳細資料,請按一下要瞭解其詳細資訊的轉換點。

  7. 若要顯示詳細資料組態差異記錄圖形,請按一下相應的按鈕以顯示歷程總管中的轉換詳細資料中所述的內容。

  8. 若要返回報告清單,請按一下報告按鈕。

7.11 驗證叢集狀態

Hawk2 提供了可檢查和偵測叢集所存在問題的精靈。分析完成後,Hawk2 會建立包含更多詳細資料的叢集報告。若要驗證叢集狀態並產生報告,Hawk2 需要具有在節點之間進行無密碼 SSH 存取的權限。否則,它只能從目前的節點收集資料。如果您已使用 ha-cluster-bootstrap 套件提供的開機程序檔設定叢集,則無密碼 SSH 存取權限已設定好。如果您需要手動設定,請參閱第 D.2 節 「設定無密碼 SSH 帳戶」

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 精靈

  3. 展開基本類別。

  4. 選取驗證狀態和組態精靈。

  5. 按一下驗證進行確認。

  6. 輸入叢集的 root 密碼,然後按一下套用。Hawk2 將產生報告。

8 設定和管理叢集資源 (指令行)

若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令行公用程式或 Hawk2 (Web 使用者介面)。

本章對指令行工具 crm 做了介紹,並對此工具、範本的使用方式進行了概述,主要敘述了設定和管理叢集資源方面的資訊:建立基本與進階類型的資源 (群組與複製品),設定條件約束,指定容錯移轉節點與錯誤回復節點,設定資源監控,啟動、清理或移除資源,以及手動移轉資源。

注意
注意:使用者權限

您需要有足夠的權限方可管理叢集。執行 crm 指令及其子指令的使用者需為 root 使用者或 CRM 擁有者使用者 (通常是使用者 hacluster)。

不過,user 選項可讓您以一般 (非特權) 使用者的身分執行 crm 指令及其子指令,並在需要時使用 sudo 指令變更使用者 ID。例如,在下面的指令中,crm 將使用 hacluster 做為授權使用者 ID:

root # crm options user hacluster

請注意,您需要採用一種 sudo 不會要求提供密碼的方式設定 /etc/sudoers

8.1 crmsh — 綜覽

crm 指令有多個子指令,用於管理資源、CIB、節點、資源代辦及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。

提示
提示:互動式 crm 提示符

使用不含引數 (或只含一個 sublevel 引數) 的 crm,crm 外圍程序將進入互動式模式。此模式由以下提示符指示:

crm(live/HOSTNAME)

為了容易閱讀,我們的文件在互動式 crm 提示符中省略了主機名稱。只有當您需要在特定節點 (如 alice) 上執行互動式外圍程序時,我們才會包含主機名稱,例如:

crm(live/alice)

8.1.1 使用說明

可以使用以下幾種方法來存取說明:

  • 若要輸出 crm 及其指令行選項的用法:

    root # crm --help
  • 若要列出所有可用指令的清單:

    root # crm help
  • 若要存取其他說明區段,而不僅僅是指令參考:

    root # crm help topics
  • 若要檢視 configure 子指令的延伸說明文字:

    root # crm configure help
  • 若要列印 configuregroup 子指令的語法、用法和範例:

    root # crm configure help group

    以下指令的作用相同:

    root # crm help configure group

幾乎 help 子指令 (不要與 --help 選項混淆) 的所有輸出都會開啟一個文字檢視器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。

提示
提示:在 Bash 和互動式外圍程序中使用 Tab 鍵補齊

crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config→|,該字即會補齊,就像在互動式外圍程序中一樣。

8.1.2 執行 crmsh 的子指令

crm 指令本身的使用方式如下:

  • 直接:: 將所有子指令與 crm 結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm help ra 可獲取 ra 子指令 (資源代辦) 的相關資訊。

    可以縮寫子指令,只要縮寫後的子指令唯一即可。例如,可以將 status 縮寫為 st,crmsh 可以識別這種縮寫。

    另一項功能是縮寫參數。通常,您會透過 params 關鍵字新增參數。如果 params 區段是第一個且是唯一存在的區段,則您可以省略它。例如,以下行:

    root # crm primitive ipaddr ocf:heartbeat:IPaddr2 params ip=192.168.0.55

    相當於以下行:

    root # crm primitive ipaddr ocf:heartbeat:IPaddr2 ip=192.168.0.55
  • 做為 crm 外圍程序檔: Crm 外圍程序程序檔包含 crm 的子指令。如需詳細資訊,請參閱第 8.1.4 節 「使用 crmsh 的外圍程序程序檔」

  • 做為 crmsh 叢集程序檔:這是中繼資料、對 RPM 套件的參照、組態檔案及使用單一描述性名稱同捆之 crmsh 子指令的集合。可以透過 crm script 指令管理這些內容。

    請不要將它們與 crmsh 外圍程序程序檔相混淆:雖然兩者具有一些共同的目標,但 crm 外圍程序程序檔只包含子指令,而叢集程序檔所包含的遠遠不只是簡單的指令列舉。如需詳細資訊,請參閱第 8.1.5 節 「使用 crmsh 的叢集程序檔」

  • 做為內部外圍程序進行互動: 輸入 crm 可進入內部外圍程序。提示變更為 crm(live)。執行 help 可獲取可用子指令的綜覽。由於內部外圍程序有幾種不同層級的子指令,您可以輸入一個子指令並按 Enter進入此層級。

    例如,如果輸入 resource,便會進入資源管理層級。提示變更為 crm(live)resource#。若要離開內部外圍程序,請使用指令 quitbyeexit。若需要回到上一個層級,請使用 backupendcd

    輸入 crm 和不帶任何選項的相應子指令並按 Enter,即可直接進入該層。

    內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|crm 便會補齊相應的物件。

除了前面所述的方法之外,crmsh 還支援同步指令執行。使用 -w 選項可以啟動該功能。如果您啟動 crm 時未使用 -w,以後可以將使用者首選的 wait 設定為 yes (options wait yes) 以啟用該功能。如果啟用了此選項,crm 會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource start 這樣的指令。

注意
注意:區分管理子指令與組態子指令

crm 工具具有管理功能 (子指令為 resourcenode),可用於進行組態設定 (cibconfigure)。

以下小節概述了 crm 工具的一些重要方面。

8.1.3 顯示 OCF 資源代辦的相關資訊

由於您始終都需要在叢集組態中處理資源代辦,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代辦的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 6.3.2 節 「受支援的資源代辦類別」):

root # crm ra
crm(live)ra# 

指令 classes 可列出所有類別和提供者:

crm(live)ra# classes
 lsb
 ocf / heartbeat linbit lvm2 ocfs2 pacemaker
 service
 stonith
 systemd

若要取得某個類別 (和提供者) 的所有可用資源代辦的綜覽,請使用 list 指令:

crm(live)ra# list ocf
AoEtarget           AudibleAlarm        CTDB                ClusterMon
Delay               Dummy               EvmsSCC             Evmsd
Filesystem          HealthCPU           HealthSMART         ICP
IPaddr              IPaddr2             IPsrcaddr           IPv6addr
LVM                 LinuxSCSI           MailTo              ManageRAID
ManageVE            Pure-FTPd           Raid1               Route
SAPDatabase         SAPInstance         SendArp             ServeRAID
...

若要檢視資源代辦的綜覽,請使用 info

crm(live)ra# info ocf:linbit:drbd
This resource agent manages a DRBD* resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)

Master/Slave OCF Resource Agent for DRBD

Parameters (* denotes required, [] the default):

drbd_resource* (string): drbd resource name
    The name of the drbd resource from the drbd.conf file.

drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
    Full path to the drbd.conf file.

Operations' defaults (advisory minimum):

    start         timeout=240
    promote       timeout=90 
    demote        timeout=90 
    notify        timeout=90 
    stop          timeout=100
    monitor_Slave_0 interval=20 timeout=20 start-delay=1m
    monitor_Master_0 interval=10 timeout=20 start-delay=1m

Q 鍵可離開檢視器。

提示
提示:直接使用 crm

前面的範例中使用了 crm 指令的內部外圍程序。但是,您不一定要使用該外圍程序。如果將相應的子指令新增至 crm,也可獲得同樣的結果。例如,在外圍程序中輸入 crm ra list ocf 可列出所有 OCF 資源代辦。

8.1.4 使用 crmsh 的外圍程序程序檔

Crmsh 外圍程序程序檔提供了將 crmsh 子指令列舉到檔案中的便捷方式。如此,您便可輕鬆註解特定行或稍後重新執行這些行。請注意,crmsh 外圍程序程序檔只能包含 crmsh 子指令,不允許包含任何其他指令。

您需要先建立包含特定指令的檔案,然後才能使用 crmsh 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單:

範例 8.1︰ 簡單 crmsh 外圍程序程序檔
# A small example file with some crm subcommands
status
node list

以井字號 (#) 開頭的任何行都是註解,系統會將其忽略。如果某行過長,則在結尾插入反斜線 (\),然後換到下一行。建議縮排屬於特定子指令的行以便於閱讀。

若要使用此程序檔,請使用以下其中一種方法:

root # crm -f example.cli
root # crm < example.cli

8.1.5 使用 crmsh 的叢集程序檔

從所有叢集節點收集資訊和部署任何變更是一項關鍵的叢集管理任務。您無需在不同的節點上手動執行相同的程序 (這很容易出錯),而可以使用 crmsh 叢集程序檔。

請不要將它們與 crmsh 外圍程序程序檔相混淆,第 8.1.4 節 「使用 crmsh 的外圍程序程序檔」中對後者進行了介紹。

對比 crmsh 外圍程序程序檔,叢集程序檔另外會執行如下任務:

  • 安裝特定任務所需的軟體。

  • 建立或修改任何組態檔案。

  • 收集資訊並報告叢集的潛在問題。

  • 將變更部署到所有節點。

crmsh 叢集程序檔不會取代其他叢集管理工具,而是提供整合的方式用於在叢集中執行上述任務。如需詳細資訊,請參閱http://crmsh.github.io/scripts/

8.1.5.1 使用率

若要取得所有可用叢集程序檔的清單,請執行:

root # crm script list

若要檢視程序檔的組成部份,請使用 show 指令和叢集程序檔的名稱,例如:

root # crm script show mailto
mailto (Basic)
MailTo

 This is a resource agent for MailTo. It sends email to a sysadmin
whenever  a takeover occurs.

1. Notifies recipients by email in the event of resource takeover

  id (required)  (unique)
      Identifier for the cluster resource
  email (required)
      Email address
  subject
      Subject

show 的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。

每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。

每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔:

表 8.1︰ 通用參數
參數引數描述
actionINDEX如果設定此參數,則只會執行單一動作 (verify 傳回索引)
dry_runBOOL如果設定此參數,則只會模擬執行 (預設值:no)
nodesLIST列出要對其執行程序檔的節點
portNUMBER要連接到的埠
statefileFILE在以單一步進方式執行時,狀態將會儲存在指定的檔案中
sudoBOOL如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值:no)
timeoutNUMBER以秒為單位的執行逾時 (預設值:600)
userUSER以指定使用者的身分執行程序檔

8.1.5.2 驗證和執行叢集程序檔

在執行某個叢集程序檔之前,請檢查該程序檔將要執行的動作並驗證其參數,以避免出現問題。叢集程序檔可能會執行一系列動作,並且可能會出於各種原因而失敗。因此,在執行程序檔之前驗證參數可幫助避免出現問題。

例如,mailto 資源代辦需要唯一的識別碼和一個電子郵件地址。若要驗證這些參數,請執行:

root # crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed

        mailx

2. Configure cluster resources

        primitive sysadmin ocf:heartbeat:MailTo
                email="tux@example.org"
                op start timeout="10"
                op stop timeout="10"
                op monitor interval="10" timeout="10"

        clone c-sysadmin sysadmin

verify 將會輸出步驟,並用您的指定參數取代所有預留位置。如果 verify 發現任何問題,會予以報告。如果一切正常,請用 run 指令取代 verify 指令:

root # crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo
INFO: Nodes: alice, bob
OK: Ensure mail package is installed
OK: Configure cluster resources

使用 crm status 檢查您的資源是否已整合到叢集:

root # crm status
[...]
 Clone Set: c-sysadmin [sysadmin]
     Started: [ alice bob ]

8.1.6 使用組態範本

注意
注意:廢棄通知

組態範本已棄用,日後會被移除。組態範本將由叢集程序檔取代,相關資訊請參閱第 8.1.5 節 「使用 crmsh 的叢集程序檔」

組態範本是可供 crmsh 使用的現成叢集組態。不要將它們與資源範本 (如第 8.3.3 節 「建立資源範本」 所述) 混淆。資源範本適用於叢集而非 crm 外圍程序。

組態範本只需略做調整就能符合特定使用者的需求。當某範本建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自訂時編輯該提示。

以下程序說明如何建立一個簡單但功能齊備的 Apache 組態:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 藉由組態範本建立新的組態:

    1. 切換至 template 子指令:

      crm(live)configure# template
    2. 列出可用的組態範本:

      crm(live)configure template# list templates
      gfs2-base   filesystem  virtual-ip  apache   clvm     ocfs2    gfs2
    3. 指定所需的組態範本。由於現在需要 Apache 組態,因此請選取 apache 範本並將其命名為 g-intranet

      crm(live)configure template# new g-intranet apache
      INFO: pulling in template apache
      INFO: pulling in template virtual-ip
  3. 定義參數:

    1. 列出您建立的組態:

      crm(live)configure template# list
      g-intranet
    2. 顯示需要由您填寫的必要變更:

      crm(live)configure template# show
      ERROR: 23: required parameter ip not set
      ERROR: 61: required parameter id not set
      ERROR: 65: required parameter configfile not set
    3. 啟用偏好的文字編輯器,填寫步驟 3.b 中顯示為錯誤的所有行:

      crm(live)configure template# edit
  4. 顯示組態並檢查其是否有效 (視步驟 3.c 中輸入的組態而定,可能會顯示粗體文字):

    crm(live)configure template# show
    primitive virtual-ip ocf:heartbeat:IPaddr \
        params ip="192.168.1.101"
    primitive apache ocf:heartbeat:apache \
        params configfile="/etc/apache2/httpd.conf"
        monitor apache 120s:60s
    group g-intranet \
        apache virtual-ip
  5. 套用組態:

    crm(live)configure template# apply
    crm(live)configure# cd ..
    crm(live)configure# show
  6. 將變更提交至 CIB:

    crm(live)configure# commit

如果您瞭解詳細資料,還可以使指令更簡單。您可以在外圍程序中使用以下指令來彙總上述程序:

root # crm configure template \
   new g-intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

如果您在內部 crm 外圍程序中,請使用以下指令:

crm(live)configure template# new intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

但是,之前的指令只是藉由組態範本建立其組態,而不會套用或提交至 CIB。

8.1.7 使用非正式組態進行測試

非正式組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。

一般程序如下:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 建立新的非正式組態:

    crm(live)configure# cib new myNewConfig
    INFO: myNewConfig shadow CIB created

    如果省略陰影 CIB 的名稱,則系統會建立暫時名稱 @tmp@

  3. 若要將目前的即時組態複製至您的陰影組態,請使用以下指令,否則請跳過此步驟:

    crm(myNewConfig)# cib reset myNewConfig

    之前的指令可讓您以後修改任何現有資源時更為方便。

  4. 和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令:

    crm(myNewConfig)# commit
  5. 如果重新需要使用即時叢集組態,請使用以下指令切換回來:

    crm(myNewConfig)configure# cib use live
    crm(live)# 

8.1.8 組態變更除錯

在將組態變更載入回叢集之前,建議您先使用 ptest 檢閱變更。ptest 指令可顯示提交變更後將發生之動作的圖表。您需要擁有 graphviz 套件才能顯示該圖表。以下範例是一份記錄,新增了監控操作:

root # crm configure
crm(live)configure# show fence-bob 
primitive fence-bob stonith:apcsmart \
        params hostlist="bob"
crm(live)configure# monitor fence-bob 120m:60s
crm(live)configure# show changed
primitive fence-bob stonith:apcsmart \
        params hostlist="bob" \
        op monitor interval="120m" timeout="60s"
crm(live)configure# ptest
crm(live)configure# commit

8.1.9 叢集圖表

若要輸出叢集圖表,請使用指令 crm configure graph。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。

如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令:

root # crm configure graph dot config.svg svg

8.2 管理 Corosync 組態

Corosync 是大多數 HA 叢集的基礎訊息傳送層。Corosync 子指令提供用於編輯和管理 Corosync 組態的指令。

例如,若要列出叢集的狀態,可以使用 status

root # crm corosync status
Printing ring status.
Local node ID 175704363
RING ID 0
        id      = 10.121.9.43
        status  = ring 0 active with no faults
Quorum information
------------------
Date:             Thu May  8 16:41:56 2014
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          175704363
Ring ID:          4032
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
 175704363          1 alice.example.com (local)
 175704619          1 bob.example.com

diff 指令非常有用:它可以比較所有節點上的 Corosync 組態 (如果未另行指定),並印各自的差異:

root # crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
-       expected_votes: 2
-       two_node: 1
+       expected_votes: 1
+       two_node: 0

如需詳細資訊,請參閱 http://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync

8.3 設定叢集資源

做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。

有關您可以建立之資源類型的綜覽,請參閱第 6.3.3 節 「資源類型」

8.3.1 從檔案載入叢集資源

可從本地檔案或網路 URL 載入部分或全部組態。可定義三種不同方法:

replace

此選項會以新的來源組態取代目前的組態。

update

此選項會嘗試輸入來源組態。它會將新項目新增至目前的組態或更新其現有項目。

push

此選項會將內容從來源輸入到目前組態中 (與 update 相同)。不過,它會移除在新組態中不可用的物件。

若要從檔案 mycluster-config.txt 載入新組態,請使用以下語法:

root # crm configure load push mycluster-config.txt

8.3.2 建立叢集資源

系統提供了三種適用於叢集的 RA (資源代辦),如需背景資訊,請參閱第 6.3.2 節 「受支援的資源代辦類別」。若要將新資源新增至叢集,請執行以下步驟:

  1. root 身分登入並啟動 crm 工具:

    root # crm configure
  2. 設定基本資源的 IP 位址:

    crm(live)configure# primitive myIP ocf:heartbeat:IPaddr \
         params ip=127.0.0.99 op monitor interval=60s

    以上指令設定名為 myIP基本資源IP 位址。您需要選擇類別 (此處為 ocf)、提供者 (heartbeat) 和類型 (IPaddr)。此外,此基本資源還需要其他參數,例如 IP 位址。將位址變更為您的設定。

  3. 顯示並檢閱已進行的變更:

    crm(live)configure# show
  4. 提交變更,使之生效:

    crm(live)configure# commit

8.3.3 建立資源範本

如果您要建立多個具有相似組態的資源,資源範本可以簡化此任務。另請參閱第 6.5.3 節 「資源範本和條件約束」 以瞭解一些基本的背景資訊。請勿將它們與第 8.1.6 節 「使用組態範本」 中所述的normal範本相混淆。請使用 rsc_template 指令熟悉相應語法:

root # crm configure rsc_template
usage: rsc_template <name> [<class>:[<provider>:]]<type>
        [params <param>=<value> [<param>=<value>...]]
        [meta <attribute>=<value> [<attribute>=<value>...]]
        [utilization <attribute>=<value> [<attribute>=<value>...]]
        [operations id_spec
            [op op_type [<attribute>=<value>...] ...]]

例如,以下指令會建立一個名為 BigVM 的新資源範本,該範本由 ocf:heartbeat:Xen 資源及一些預設值與操作衍生而來:

crm(live)configure# rsc_template BigVM ocf:heartbeat:Xen \
   params allow_mem_management="true" \
   op monitor timeout=60s interval=15s \
   op stop timeout=10m \
   op start timeout=10m

定義新的資源範本後,您可以在基本資源中使用該範本,或者在順序、並存或 rsc_ticket 條件約束中參考該範本。若要參考資源範本,請使用 @ 符號:

crm(live)configure# primitive MyVM1 @BigVM \
   params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"

新基本資源 MyVM1 將繼承 BigVM 資源範本的一切。例如,與上面兩個指令具有同等效果的指令為:

crm(live)configure# primitive MyVM1 ocf:heartbeat:Xen \
   params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1" \
   params allow_mem_management="true" \
   op monitor timeout=60s interval=15s \
   op stop timeout=10m \
   op start timeout=10m

如果您想覆寫某些選項或操作,只需將它們新增到您的 (基本資源) 定義即可。例如,下面的新基本資源 MyVM2 會使監控操作的逾時加倍,而其他內容則保留不變:

crm(live)configure# primitive MyVM2 @BigVM \
   params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \
   op monitor timeout=120s interval=30s

在條件約束中可以參考資源範本,來代表所有由該範本衍生的基本資源。這有助於產生更加簡明、清晰的叢集組態。除了位置條件約束以外,其他所有條件約束中均允許參考資源範本。並存條件約束不可包含一個以上的範本參考。

8.3.4 建立 STONITH 資源

crm 角度看,STONITH 裝置只是另一個資源。若要建立 STONITH 資源,請執行下列步驟:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 使用如下指令取得所有 STONITH 類型清單:

    crm(live)# ra list stonith
    apcmaster                  apcmastersnmp              apcsmart
    baytech                    bladehpi                   cyclades
    drac3                      external/drac5             external/dracmc-telnet
    external/hetzner           external/hmchttp           external/ibmrsa
    external/ibmrsa-telnet     external/ipmi              external/ippower9258
    external/kdumpcheck        external/libvirt           external/nut
    external/rackpdu           external/riloe             external/sbd
    external/vcenter           external/vmware            external/xen0
    external/xen0-ha           fence_legacy               ibmhmc
    ipmilan                    meatware                   nw_rpc100s
    rcd_serial                 rps10                      suicide
    wti_mpc                    wti_nps
  3. 從上面的清單中選擇一種 STONITH 類型並檢視可能的選項清單。使用以下指令:

    crm(live)# ra info stonith:external/ipmi
    IPMI STONITH external device (stonith:external/ipmi)
    
    ipmitool based power management. Apparently, the power off
    method of ipmitool is intercepted by ACPI which then makes
    a regular shutdown. If case of a split brain on a two-node
    it may happen that no node survives. For two-node clusters
    use only the reset method.
    
    Parameters (* denotes required, [] the default):
    
    hostname (string): Hostname
        The name of the host to be managed by this STONITH device.
    ...
  4. 使用 stonith 類別、您在步驟 3 中所選的類型,以及所需的相應參數來建立 STONITH 資源,例如:

    crm(live)# configure
    crm(live)configure# primitive my-stonith stonith:external/ipmi \
        params hostname="alice" \
        ipaddr="192.168.1.221" \
        userid="admin" passwd="secret" \
        op monitor interval=60m timeout=120s

8.3.5 設定資源條件約束

設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。例如,儘量不要在 DRBD 的從屬節點上掛接檔案系統 (實際上,對 DRBD 執行此操作將會失敗)。定義相關條件約束,讓此類資訊適用於叢集。

如需條件約束的詳細資訊,請參閱第 6.5 節 「資源條件約束」

8.3.5.1 位置條件約束

location 指令定義資源可在、不可在或偏好在哪些節點上執行。

可以為每個資源多次新增此類條件約束。系統會對指定的資源評估所有位置條件約束。下面的簡單範例中,將在名為 alice 的節點上執行資源 fs1 的優先設定設為 100:

crm(live)configure# location loc-fs1 fs1 100: alice

另外一個範例為包含 pingd 的位置:

crm(live)configure# primitive pingd pingd \
    params name=pingd dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule pingd: defined pingd

位置條件約束的另一個使用案例是將基本資源分組為一個資源集。例如,如果多個資源依存於某個 ping 屬性來獲得網路連接,則此功能會十分有用。以前,需要在組態中複製 -inf/ping 規則數次,因而不必要地增加了複雜性。

以下範例將建立一個資源集 loc-alice,該資源集參考虛擬 IP 位址 vip1vip2

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } Mandatory: alice

在某些情況下,為 location 指令使用資源模式會有效且方便得多。資源模式是兩個斜線之間的規則運算式。例如,使用以下指令可使上述的虛擬 IP 位址全部都相符:

crm(live)configure# location  loc-alice /vip.*/ Mandatory: alice

8.3.5.2 並存條件約束

colocation 指令用於定義應在相同或不同主機上執行的資源。

您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。

例如,若要永遠都在同一個主機上執行 ID 分別為 filesystem_resourcenfs_group 的資源,請使用下面的條件約束:

crm(live)configure# colocation nfs_on_filesystem Mandatory: nfs_group filesystem_resource

對於主要從屬組態,除本地執行資源之外,還必須瞭解目前節點是否為主要節點。

8.3.5.3 並存無相依性的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。

如果您要將多個資源放置在同一個節點上,但不希望在其中一個資源失敗時執行任何動作,則可以使用指令 weak-bond

root # crm configure assist weak-bond RES1 RES2

實作 weak-bond 會使用指定的資源自動建立一個虛構資源和並存條件約束。

8.3.5.4 順序條件約束

Order 指令定義動作順序。

有時需要提供資源動作或操作的順序。例如,在裝置可用於系統之前,不能掛接檔案系統。順序條件約束可用於在另一個資源符合特定條件 (例如啟動、停止或升級為主要資源) 的前後啟動或停止服務。

crm 外圍程序中使用以下指令可設定一個順序條件約束:

crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group

8.3.5.5 範例組態的條件約束

如果沒有其他條件約束,本節中所用的範例可能不會起作用。所有資源皆必須與 DRBD 資源的主要資源在同一機器上執行,這是基本要求。在任何其他資源啟動之前,DRBD 資源必須成為主要資源。若 DRBD 裝置不是主要資源,嘗試掛接該裝置時必定失敗。以下條件約束必須滿足:

  • 檔案系統必須始終與 DRBD 資源的主要資源位於同一個節點上。

    crm(live)configure# colocation filesystem_on_master Mandatory: \
        filesystem_resource drbd_resource:Master
  • NFS 伺服器和 IP 位址必須與檔案系統位於同一個節點上。

    crm(live)configure# colocation nfs_with_fs Mandatory: \
       nfs_group filesystem_resource
  • NFS 伺服器和 IP 位址將在檔案系統掛接後啟動:

    crm(live)configure# order nfs_second mandatory: \
       filesystem_resource:start nfs_group
  • 在將 DRBD 資源升級為節點上的主要資源之後,才能在此節點上掛接檔案系統。

    crm(live)configure# order drbd_first Mandatory: \
        drbd_resource:promote filesystem_resource:start

8.3.6 指定資源容錯移轉節點

若要判斷資源容錯移轉,請使用 meta 屬性 migration-threshold。如果所有節點上的 failcount 都超出了 migration-threshold,資源將一直處於停止狀態。例如:

crm(live)configure# location rsc1-alice rsc1 100: alice

通常情況下,rsc1 偏好在 alice 上執行。如果失敗,則會檢查 migration-threshold 並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。

根據 start-failure-is-fatal 選項的值,啟動失敗會將 failcount 設定為 inf。停止失敗將導致圍籬區隔。如果未定義 STONITH,資源將不會移轉。

如需綜覽,請參閱第 6.5.4 節 「容錯移轉節點」

8.3.7 指定資源錯誤回復節點 (資源粘性)

當原始節點恢復連接且位於叢集中時,資源可以錯誤回復至該節點。為防止資源錯誤回復到之前執行它的節點,或者要指定讓該資源錯誤回復到其他節點,請變更其資源粘性值。您可以在建立資源時或建立之後指定資源粘性。

如需綜覽,請參閱第 6.5.5 節 「錯誤回復節點」

8.3.8 根據負載影響設定資源的配置

某些資源可能有特定的容量要求,例如最低記憶體容量。如果不符合其要求,這些資源可能無法完全啟動,或者執行時效能會降低。

鑒於此,High Availability Extension 允許您指定以下參數:

  1. 特定節點提供的容量。

  2. 特定資源要求的容量。

  3. 配置資源的整體策略。

如需參數的詳細背景資訊及組態範例,請參閱第 6.5.6 節 「依據負載影響放置資源」

若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代辦 (例如 VirtualDomain) 會自行更新使用率。

在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。

程序 8.1︰ 使用 crm 新增或修改使用率屬性
  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代佔位符 NODE_1

    crm(live)configure# node NODE_1 utilization memory=16384 cpu=8

    透過設定以上的值,我們假設 NODE_1 為資源提供 16GB 的記憶體和 8 個 CPU 核心。

  3. 若要指定資源需要的容量,請使用:

    crm(live)configure# primitive xen1 ocf:heartbeat:Xen ... \
         utilization memory=4096 cpu=4

    如此,資源會佔用 NODE_1 的 4096 個記憶體單元和 4 個 CPU 單元。

  4. 使用 property 指令設定配置策略:

    crm(live)configure# property ...

    可用的值如下:

    default (預設值)

    不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。

    utilization

    判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。

    minimal

    判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。

    balanced

    判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。

    注意
    注意:設定資源優先程度

    提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。

  5. 在離開 crmsh 之前,提交您的變更:

    crm(live)configure# commit

以下範例描述一個由三個同級別節點組成的叢集和 4 台虛擬機器:

crm(live)configure# node alice utilization memory="4000"
crm(live)configure# node bob utilization memory="4000"
crm(live)configure# node charlie utilization memory="4000"
crm(live)configure# primitive xenA ocf:heartbeat:Xen \
    utilization hv_memory="3500" meta priority="10" \
    params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure# primitive xenB ocf:heartbeat:Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure# primitive xenC ocf:heartbeat:Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure# primitive xenD ocf:heartbeat:Xen \
    utilization hv_memory="1000" meta priority="5" \
    params xmfile="/etc/xen/shared-vm/vm4"
crm(live)configure# property placement-strategy="minimal"

這三個節點啟動後,會先將 xenA 配置於一個節點上,接著是 xenD。xenB 和 xenC 會配置在一起,或其中一個與 xenD 配置在一起。

如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。如此會確保 xenA 及 xenD 都會予以配置。但 xenB 與 xenC 只有其中一個會予以配置,因為它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

8.3.9 設定資源監控

若要監控資源,可以使用兩種方法:使用 op 關鍵字定義監控操作或使用 monitor 指令。下面的範例設定了一個 Apache 資源,並使用 op 關鍵字每隔 60 秒鐘對其執行一次監控操作:

crm(live)configure# primitive apache apache \
  params ... \
  op monitor interval=60s timeout=30s

下列指令可達到相同目的:

crm(live)configure# primitive apache apache \
   params ...
crm(live)configure# monitor apache 60s:30s

如需綜覽,請參閱第 6.4 節 「資源監控」

8.3.10 設定叢集資源群組

叢集其中一個最常見的元素是需要存放在一起的一組資源。請按照順序啟動它們,停止時採用相反順序。若要簡化此組態,您可以使用群組。以下範例將建立兩個基本資源 (一個 IP 位址和一個電子郵件資源):

  1. 以系統管理員身分執行 crm 指令。提示變更為 crm(live)

  2. 設定基本資源:

    crm(live)# configure
    crm(live)configure# primitive Public-IP ocf:heartbeat:IPaddr \
       params ip=1.2.3.4 id= Public-IP
    crm(live)configure# primitive Email systemd:postfix \
       params id=Email
  3. 以正確的順序按照相應的識別碼對基本資源分組:

    crm(live)configure# group g-mailsvc Public-IP Email

若要變更群組成員的順序,請在 configure 子指令中使用 modgroup 指令。使用以下指令可將基本資源 Email 移至 Public-IP 前面。(這只用於示範該功能):

crm(live)configure# modgroup g-mailsvc add Email before Public-IP

如果您想從群組中移除某個資源 (例如,Email),請使用以下指令:

crm(live)configure# modgroup g-mailsvc remove Email

如需綜覽,請參閱第 6.3.5.1 節 「群組」

8.3.11 設定複製品資源

複製品最初被認為是啟動 IP 資源的 N 個例項並在整個叢集進行分配以達到負載平衡的一種便利方法。結果表明,它們可用於多種用途,包括與 DLM 整合、圍籬區隔子系統和 OCFS2。只要資源代辦支援,就可以複製任何資源。

如需所複製之資源的詳細資訊,請參閱第 6.3.5.2 節 「複製品」

8.3.11.1 建立匿名複製品資源

若要建立匿名複製品資源,首先要建立一個基本資源,然後使用 clone 指令參考該資源。執行下列操作:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 設定基本資源,例如:

    crm(live)configure# primitive Apache ocf:heartbeat:apache
  3. 複製基本資源:

    crm(live)configure# clone cl-apache Apache

8.3.11.2 建立可升級複製品資源

可升級複製品資源 (以前稱為多狀態資源) 是一種特殊的複製品。此類型允許例項處於兩種執行模式中的其中一種,可以是主動/被動、主要/次要或主要/從屬。

若要建立可升級複製品資源,首先要建立一個基本資源,然後再建立可升級複製品資源。可升級複製品資源必須至少支援升級和降級操作。

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 設定基本資源。視需要變更間隔:

    crm(live)configure# primitive my-rsc ocf:myCorp:myAppl \
        op monitor interval=60 \
        op monitor interval=61 role=Master
  3. 建立可升級複製品資源:

    crm(live)configure# ms ms-rsc my-rsc

8.4 管理叢集資源

除了能夠設定叢集資源外,crm 工具還可讓您管理現有資源。以下小節對此進行了概述。

8.4.1 顯示叢集資源

當管理叢集時,crm configure show 指令會列出叢集組態、全域選項、基本資源等目前 CIB 物件:

root # crm configure show
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
        params pcmk_delay_max=30
property cib-bootstrap-options: \
        have-watchdog=true \
        dc-version=1.1.15-17.1-e174ec8 \
        cluster-infrastructure=corosync \
        cluster-name=hacluster \
        stonith-enabled=true \
        placement-strategy=balanced \
        standby-mode=true
rsc_defaults rsc-options: \
        resource-stickiness=1 \
        migration-threshold=3
op_defaults op-options: \
        timeout=600 \
        record-pending=true

如果您有許多資源,show 的輸出會十分冗長。為限制輸出,請使用資源名稱。例如,如果只想列出基本資源 admin_addr 的屬性,請將資源名稱附加到 show 後:

root # crm configure show admin_addr
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20

但在某些情況下,您可能希望更精確地限制特定資源的輸出。那麼,您可以使用過濾器。過濾器可將輸出限定到特定元件。例如,若要僅列出節點,可使用 type:node

root # crm configure show type:node
node 178326192: alice
node 178326448: bob

如果您還對基本資源感興趣,請使用 or 運算子:

root # crm configure show type:node or type:primitive
node 178326192: alice
node 178326448: bob
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20
primitive stonith-sbd stonith:external/sbd \
        params pcmk_delay_max=30

此外,若要搜尋以特定字串開頭的物件,請使用以下表示法:

root # crm configure show type:primitive and and 'admin*'
primitive admin_addr IPaddr2 \
        params ip=192.168.2.1 \
        op monitor interval=10 timeout=20

若要列出所有可用類型,請輸入 crm configure show type: 並按 →| 鍵。Bash 補齊功能會為您提供所有類型的清單。

8.4.2 啟動新的叢集資源

若要啟動新的叢集資源,您需要相應的識別碼。請執行下列步驟:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm
  2. 切換至資源層級:

    crm(live)# resource
  3. 使用 start 啟動資源,然後按 →| 鍵顯示所有已知資源:

    crm(live)resource# start ID

8.4.3 停止叢集資源

若要停止一個或多個現有叢集資源,需要提供相應的識別碼。請執行下列步驟:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm
  2. 切換至資源層級:

    crm(live)# resource
  3. 使用 stop 停止資源,然後按 →| 鍵顯示所有已知資源:

    crm(live)resource# stop ID

    可以一次性停止多個資源:

    crm(live)resource# stop ID1 ID2 ...

8.4.4 清理資源

若資源失敗,系統會自動將其重新啟動,但每次失敗都會增加資源的 failcount。如果為資源設定了 migration-threshold,則當故障次數達到該移轉限定值時,將不再允許節點執行該資源。

  1. 開啟外圍程序並以 root 使用者身分登入。

  2. 取得所有資源的清單:

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf:pacemaker:controld) Started
             clvm:1 (ocf:heartbeat:clvm) Started
  3. 例如,若要清理資源 dlm

    root # crm resource cleanup dlm

8.4.5 移除叢集資源

執行下列步驟可以移除叢集資源:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    root # crm configure
  2. 執行下列指令以取得資源清單:

    crm(live)# resource status

    例如,輸出可能如下所示 (myIP 為資源的相應識別碼):

    myIP    (ocf:IPaddr:heartbeat) ...
  3. 刪除具有相應識別碼的資源 (此操作還隱含 commit 動作):

    crm(live)# configure delete YOUR_ID
  4. 提交變更:

    crm(live)# configure commit

8.4.6 移轉叢集資源

雖然資源設定為在發生硬體或軟體失敗事件時自動容錯移轉 (或移轉) 至叢集的其他節點,您也可以使用 Hawk2 或指令行將資源手動移至另一個節點。

請使用 migrate 指令來完成這項任務。例如,若要將資源 ipaddress1 移轉至名為 bob 的叢集節點,請使用以下指令:

root # crm resource
crm(live)resource# migrate ipaddress1 bob

8.4.7 分組/標記資源

使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases 的標記,並將與該資料庫相關的所有資源新增至此標記:

root # crm configure tag databases: db1 db2 db3

這樣,只需使用一個指令就能啟動所有這些資源:

root # crm resource start databases

同樣,您也可以一次性停止所有這些資源:

root # crm resource stop databases

8.4.8 取得健康狀態

您可以使用所謂的程序檔顯示叢集或節點的健康狀態。程序檔可以執行各種不同的任務,並不局限於顯示狀態。不過,本小節將重點介紹如何獲得健康狀態資訊。

若要獲得 health 指令的所有詳細資料,請使用 describe

root # crm script describe health

該指令會顯示一則描述和所有參數及其預設值的清單。若要執行程序檔,請使用 run

root # crm script run health

如果您希望只執行整套指令中的一個步驟,可以使用 describe 指令列出步驟類別中的所有可用步驟。

例如,以下指令會執行 health 指令的第一個步驟。輸出會儲存在 health.json 檔案中以供進一步調查:

root # crm script run health
    statefile='health.json'

您也可以使用 crm cluster health 執行以上指令。

如需程序檔的其他資訊,請參閱 http://crmsh.github.io/scripts/

8.5 設定獨立於 cib.xml 的密碼

如果您的叢集組態包含敏感性資訊 (例如密碼),應該將這些資訊儲存在本地檔案中。這樣,支援報告中就絕對不會記錄或洩漏這些參數。

在使用 secret 之前,最好先執行 show 指令取得所有資源的綜覽:

root # crm configure show
primitive mydb ocf:heartbeat:mysql \
   params replication_user=admin ...

若要為上文的 mydb 資源設定密碼,請使用以下指令:

root # crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

您可以使用以下指令取得儲存的密碼:

root # crm resource secret mydb show passwd
linux

請注意,各節點之間需要同步參數;crm resource secret 指令將會負責該任務。強烈建議您只使用此指令來管理機密參數。

8.6 擷取歷程資訊

調查叢集歷程是一項複雜的任務。為了簡化此項任務,crmsh 提供了 history 指令及其子指令。假設 SSH 已正確設定。

每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history 子指令擷取。

依預設,所有 history 指令顯示的都是最近一小時內發生的事件。若要變更此時間範圍,請使用 limit 子指令。語法是:

root # crm history
crm(live)history# limit FROM_TIME [TO_TIME]

以下是一些有效的範例:

limit4:00pm , limit16:00

這兩個指令的含意相同,都是指當天下午 4:00。

limit2012/01/12 6pm

2012 年 1 月 12 日下午 6:00

limit"Sun 5 20:46"

本年本月第 5 個週日下午 8:46

如需更多範例以及如何建立時間範圍的資訊,請參閱 http://labix.org/python-dateutil

Info 子指令可顯示 crm report 涉及的所有參數:

crm(live)history# info
Source: live
Period: 2012-01-12 14:10:56 - end
Nodes: alice
Groups: 
Resources:

若要只對 crm report 使用特定參數,請執行 help 子指令檢視可用的選項。

若要限定詳細程度,請使用 detail 子指令,同時指定一個層級:

crm(live)history# detail 1

數字越大,報告就越詳細。預設值為 0 (零)。

設定上述參數後,請使用 log 顯示記錄訊息。

若要顯示上次轉換,請使用以下指令:

crm(live)history# transition -1
INFO: fetching new logs, please wait ...

此指令會擷取記錄並執行 dotty (從 graphviz 套件),以顯示轉換圖形。該外圍程序會開啟您使用 游標鍵瀏覽的記錄檔案。

如果您不想要開啟轉換圖表,請使用 nograph 選項:

crm(live)history# transition -1 nograph

8.7 更多資訊

  • crm man 頁面。

  • http://crmsh.github.io/documentation 中瀏覽上游專案文件。

  • 參閱Article “Highly Available NFS Storage with DRBD and Pacemaker” 中的完整範例。

9 新增或修改資源代辦

需由叢集管理的所有任務都必須當成資源使用。其中,有兩個主要群組需要注意,即資源代辦和 STONITH 代辦。對於這兩種類別,您都可以新增自己的代辦,以延伸叢集的功能來滿足自己的需要。

9.1 STONITH 代辦

叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。

警告
警告:不支援外部 SSH/STONITH

我們無法得知 SSH 對其他系統問題會做出什麼反應。因此,線上環境不支援外部 SSH/STONITH 代辦 (例如 stonith:external/ssh)。如果您仍要使用此類代辦進行測試,請安裝 libglue-devel 套件中可用。

若要取得目前所有可用 STONITH 裝置 (從軟體角度) 的清單,請使用 crm ra list stonith 指令。如果您找不到偏好的代辦,請安裝 -devel package. 如需 STONITH 裝置與資源代辦的詳細資訊,請參閱第 10 章 「圍籬區隔與 STONITH

到目前為止,尚沒有關於如何撰寫 STONITH 代辦的文件。如果要撰寫新的 STONITH 代辦,請參閱以下套件的原始碼中提供的範例: cluster-glue 套件中可用。

9.2 撰寫 OCF 資源代辦

所有 OCF 資源代辦 (RA) 皆存放於 /usr/lib/ocf/resource.d/ 中;如需詳細資訊,請參閱第 6.3.2 節 「受支援的資源代辦類別」。每個資源代辦必須支援以下操作以便您對其進行控制:

start

啟動或啟用資源

stop

停止或停用資源

status

傳回資源的狀態

monitor

status 指令類似,但它還會檢查未預期狀態

validate

驗證資源的組態

meta-data

以 XML 格式傳回資源代辦的相關資訊

建立 OCF RA 的一般程序如下所示:

  1. /usr/lib/ocf/resource.d/pacemaker/Dummy 檔案做為範本載入。

  2. 為每個新的資源代辦新建子目錄,以避免命名衝突。例如,若您擁有資源群組 kitchen (內含資源 coffee_machine),請將此資源新增至 /usr/lib/ocf/resource.d/kitchen/ 目錄。若要存取此資源代辦,請執行 crm 指令:

    root # crm configure primitive coffee_1 ocf:coffee_machine:kitchen ...
  3. 執行不同的外圍程序函數,並以不同的名稱儲存檔案。

如需關於撰寫 OCF 資源代辦的更多詳細資料,請造訪 http://www.linux-ha.org/wiki/Resource_Agents。有關幾個概念的特殊資訊,請參閱第 1 章 「產品綜覽

9.3 OCF 傳回代碼與失敗復原

根據 OCF 規格,對於動作必須返回的離開碼有著嚴格的定義。叢集會始終根據預期結果檢查傳回代碼。如果結果不符合預期值,則該操作將被視為失敗,並啟動復原動作。失敗復原有三種類型:

表 9.1︰ 失敗復原類型

復原類型

描述

叢集採取的動作

軟式

發生暫時錯誤。

重新啟動資源或將其移到新的位置。

硬式

發生非暫時錯誤。該錯誤可能與目前節點有關。

將資源移到別處並阻止其在目前節點上被重試。

嚴重錯誤

發生對於所有叢集節點均相同的非暫時錯誤。這表示指定了錯誤的組態。

停止資源並阻止其在任何叢集節點上啟動。

下表列出了假設一個動作被視為已失敗時的不同 OCF 傳回代碼,另外還顯示了叢集在接收到相應錯誤碼時將啟始的復原類型。

表 9.2︰ OCF 傳回代碼

OCF 傳回代碼

OCF 別名

描述

復原類型

0

OCF_SUCCESS

成功。指令成功完成。這是所有 start、stop、promote 和 demote 指令的預期結果。

軟式

1

OCF_ERR_­GENERIC

一般發生問題錯誤碼。

軟式

2

OCF_ERR_ARGS

此機器上的資源組態無效 (例如,它參考節點上找不到的位置/工具)。

硬式

3

OCF_­ERR_­UN­IMPLEMENTED

未執行所需動作。

硬式

4

OCF_ERR_PERM

資源代辦沒有足夠的權限來完成任務。

硬式

5

OCF_ERR_­INSTALLED

此機器上未安裝資源所需的工具。

硬式

6

OCF_ERR_­CONFIGURED

資源的組態無效 (例如,缺少必需的參數)。

嚴重錯誤

7

OCF_NOT_­RUNNING

資源未執行。叢集不會嘗試停止對任何動作返回此代碼的資源。

此 OCF 傳回代碼可能需要也可能不需要資源復原,具體取決於預期的資源狀態。如果不是預期情況,則進行軟式復原。

8

OCF_RUNNING_­MASTER

資源正以主要模式執行。

軟式

9

OCF_FAILED_­MASTER

資源在主要模式下執行,但已失敗。資源將被降級、停止,然後再次啟動 (還可能升級)。

軟式

其他

自訂錯誤碼。

軟式

10 圍籬區隔與 STONITH

在 HA (High Availability) 的電腦叢集中,圍籬區隔是一個極其重要的概念。叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。可將圍籬區隔定義為讓 HA 叢集處於已知狀態一種方法。

叢集中的每個資源都有相關的狀態。例如:資源 r1 已在 alice 上啟動。在 HA 叢集中,這樣的狀態隱含資源 r1 已在除節點 alice 之外的所有節點上停止的含義,因為叢集必須確保每個資源只能在一個節點上啟動。每個節點都必須報告資源發生的每一項變更。因此,叢集狀態是資源狀態和節點狀態的集合。

如果無法確切判斷某個節點或資源的狀態,就會觸發圍籬區隔。即使叢集未注意到指定節點上發生了狀況,圍籬區隔也可以確保該節點不會執行任何重要的資源。

10.1 圍籬區隔的類別

有兩類圍籬區隔:資源層級圍籬區隔和節點層級圍籬區隔。後者為本章的主要主題。

資源層級圍籬區隔

資源層級圍籬區隔可確保對給定資源的獨佔存取。此情況的常見範例就是透過 SAN 光纖通道開關 (用於鎖定節點禁止存取其磁碟) 或 SCSI Reserve 之類的方法變更節點的區域。如需範例,請參閱第 11.10 節 「儲存保護的其他機制」

節點層級圍籬區隔

節點層級圍籬區隔可完全防止故障節點存取共享資源。這通常可以透過一種簡單但稍嫌粗暴的方法來實現,即重設或關閉節點。

10.2 節點層級圍籬區隔

在 Pacemaker 叢集中,節點層級圍籬區隔的實作方式是 STONITH (關閉另一個節點)。High Availability Extension 提供了 stonith 指令行工具,此為一個可擴充介面,用於從遠端關閉叢集中的節點。如需可用選項的綜覽,請執行 stonith --help,如需詳細資訊,請參閱 stonith 的 man 頁面。

10.2.1 STONITH 裝置

若要使用節點層級圍籬區隔,首先需要擁有一個圍籬區隔裝置。若要取得 High Availability Extension 支援的 STONITH 裝置清單,請在任何節點上執行下列其中一個指令:

root # stonith -L

root # crm ra list stonith

STONITH 裝置可分為以下類別:

配電裝置 (PDU)

在管理重要網路、伺服器和資料中心裝置的電源容量和功能方面,配電設備扮演著至關重要的角色。它們可以提供已連接設備的遠端負載監控功能,並可進行個別插座電源控制以實現遠端電能回收。

不斷電供電系統 (UPS)

市電電源中斷時,透過其他來源供電的穩定供電系統可為連接的裝置提供應急電能。

刀鋒電源控制裝置

如果您在一組刀鋒上執行叢集,則刀鋒機箱中的電源控制裝置是圍籬區隔唯一的候選裝置。當然,此裝置必須能夠管理單一刀鋒電腦。

無人職守裝置

無人職守裝置 (IBM RSA、HP iLO、Dell DRAC) 越來越受歡迎,甚至可能會成為現貨電腦的標準裝置。不過,它們略遜於 UPS 裝置,因為它們與其主機 (叢集節點) 共享電源。如果節點斷電,則應該控制該節點的裝置就失去作用。此時,CRM 仍會不斷嘗試圍籬區隔該節點,而所有其他資源操作都需要等待該圍籬區隔/STONITH 操作完成。

測試裝置

測試裝置專用於測試用途。在硬體上,對測試裝置的要求通常比較寬松。在叢集投入運營之前,必須以真正的圍籬區隔裝置取代這些裝置。

選擇何種 STONITH 裝置主要取決於您的預算及所使用的硬體類型。

10.2.2 STONITH 實作

SUSE® Linux Enterprise High Availability Extension 的 STONITH 實作包含兩個元件:

pacemaker-fenced

pacemaker-fenced 是一個可由本地程序或透過網路進行存取的精靈。它接受圍籬區隔操作的相應指令,包括重設、關機和開機。它還可以檢查圍籬區隔裝置的狀態。

pacemaker-fenced 精靈在高可用性叢集中的每個節點上執行。在 DC 節點上執行的 pacemaker-fenced 例項接收來自 pacemaker-controld 的圍籬區隔要求。須由此程式及其他 pacemaker-fenced 程式決定是否執行所需的圍籬區隔動作。

STONITH 外掛程式

每個受支援的圍籬區隔裝置都有一個可控制該裝置的 STONITH 外掛程式。STONITH 外掛程式是圍籬區隔裝置的介面。STONITH 外掛程式包含在 cluster-glue 套件中,位於每個節點的 /usr/lib64/stonith/plugins 下。(如果您同時安裝了 fence-agents 套件,則會將其中包含的外掛程式安裝在 /usr/sbin/fence_* 下。)對於 pacemaker-fenced 而言,所有 STONITH 外掛程式看起來都是一樣的,但在反映圍籬區隔裝置性質這一方面則大不相同。

某些外掛程式支援多部裝置。典型範例為 ipmilan (或 external/ipmi),它實作 IPMI 通訊協定並可控制支援此通訊協定的任何裝置。

10.3 STONITH 資源和組態

若要設定圍籬區隔,您需要設定一或多個 STONITH 資源,pacemaker-fenced 精靈不需要任何組態設定。所有組態皆儲存在 CIB 中。STONITH 資源就是類別為 stonith 的資源 (請參閱第 6.3.2 節 「受支援的資源代辦類別」)。STONITH 資源是 STONITH 外掛程式在 CIB 中的表示。除圍籬區隔操作之外,還可對 STONITH 資源執行啟動、停止和監控操作,就如同對任何其他資源一樣。啟動或停止 STONITH 資源意味著載入和卸載節點上的 STONITH 裝置驅動程式。因此,啟動和停止只是管理操作,不能轉換為圍籬區隔裝置本身的任何操作。但是,監控並不意味著需要登入裝置 (若要驗證在需要時裝置是否會正常運作)。當 STONITH 資源容錯移轉至另一個節點後,會載入相應驅動程式以使目前節點可與 STONITH 裝置通訊。

您可以像對任何其他資源一樣來設定 STONITH 資源。以下為如何使用偏好的叢集管理工具執行這些操作的詳細資料:

參數 (屬性) 清單的內容取決於 STONITH 的相應類型。若要檢視特定裝置的參數清單,請使用 stonith 指令:

stonith -t stonith-device-type -n

例如,若要檢視 ibmhmc 裝置類型的參數,請輸入以下指令:

stonith -t ibmhmc -n

若要取得裝置的簡短說明文字,請使用 -h 選項:

stonith -t stonith-device-type -h

10.3.1 STONITH 資源組態範例

下面提供了使用 crm 指令行工具的語法撰寫的一些範例組態。若要套用它們態,請將範例放入文字檔中 (例如,sample.txt),然後執行以下指令:

root # crm < sample.txt

如需有關使用 crm 指令行工具設定資源的詳細資訊,請參閱第 8 章 「設定和管理叢集資源 (指令行)

範例 10.1︰ IBM RSA 無人職守裝置組態

可按如下所示設定 IBM RSA 無人職守裝置:

configure
primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ip_address=192.168.0.101 \
username=USERNAME password=PASSW0RD
primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ip_address=192.168.0.102 \
username=USERNAME password=PASSW0RD
location l-st-alice st-ibmrsa-1 -Mandatory: alice
location l-st-bob st-ibmrsa-2 -Mandatory: bob
commit

本範例中使用了位置條件約束,這是因為 STONITH 操作失敗的可能性總是存在,所以,在做為執行者的節點上的 STONITH 操作也不可靠。如果重設節點,它將無法傳送關於圍籬區隔操作結果的通知。想傳送通知的唯一方法是,假設操作即將成功,然後提前傳送通知。但如果操作失敗,可能就會出現問題。因此,依照慣例,pacemaker-fenced 拒絕終止其主機。

範例 10.2︰ UPS 圍籬區隔裝置組態

UPS 類型圍籬區隔裝置的組態與上述範例相似。此處不做詳述。所有 UPS 裝置都採用相同的機制進行圍籬區隔,而存取裝置的方式卻有所不同。舊式 UPS 裝置只有一個序列埠,通常會使用特殊的序列纜線以 1200 鮑率進行連接。許多新型 UPS 裝置仍然只有一個序列埠,但它們通常還使用 USB 或乙太網路介面。可以使用的連接類型取決於外掛程式所支援的類型。

例如,使用 stonith -t stonith 裝置類型 -n 指令比較 apcmaster 與 apcsmart 裝置:

stonith -t apcmaster -h

傳回下列資訊:

STONITH Device: apcmaster - APC MasterSwitch (via telnet)
NOTE: The APC MasterSwitch accepts only one (telnet)
connection/session a time. When one session is active,
subsequent attempts to connect to the MasterSwitch will fail.
For more information see http://www.apc.com/
List of valid parameter names for apcmaster STONITH device:
        ipaddr
        login
        password
For Config info [-p] syntax, give each of the above parameters in order as
the -p value.
Arguments are separated by white space.
Config file [-F] syntax is the same as -p, except # at the start of a line
denotes a comment

使用

stonith -t apcsmart -h

您將取得下列輸出:

STONITH Device: apcsmart - APC Smart UPS
(via serial port - NOT USB!). 
Works with higher-end APC UPSes, like
Back-UPS Pro, Smart-UPS, Matrix-UPS, etc.
(Smart-UPS may have to be >= Smart-UPS 700?).
See http://www.networkupstools.org/protocols/apcsmart.html
for protocol compatibility details.
For more information see http://www.apc.com/
List of valid parameter names for apcsmart STONITH device:
ttydev
hostlist

第一個外掛程式支援具有網路埠和 Telnet 通訊協定的 APC UPS。第二個外掛程式使用 APC SMART 通訊協定 (透過眾多 APC UPS 產品線皆支援的序列線)。

範例 10.3︰ Kdump 裝置的組態

Kdump 屬於特殊圍籬區隔裝置,實際上與圍籬區隔裝置相反。該外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行作業時將節點視為已圍籬區隔。

必須以與其他真實的 STONITH 裝置 (例如 external/ipmi) 一致的方式使用 Kdump 外掛程式。若要正常運作圍籬區隔機制,必須在觸發真實的 STONITH 裝置之前,指定 Kdump 已經過檢查。請依以下程序中所述,使用 crm configure fencing_topology 來指定圍籬區隔裝置的順序。

  1. 使用 stonith:fence_kdump 資源代辦 (由套件 fence-agents 提供),以監控啟用了 Kdump 功能的所有節點。下面提供了資源的組態範例:

    configure
      primitive st-kdump stonith:fence_kdump \
        params nodename="alice "\ 1
        pcmk_host_check="static-list" \
        pcmk_reboot_action="off" \
        pcmk_monitor_action="metadata" \
        pcmk_reboot_retries="1" \
        timeout="60"
    commit

    1

    要監控的節點名稱。如果您需要監控多個節點,請設定更多 STONITH 資源。若要防止特定節點使用圍籬區隔裝置,請新增位置條件約束。

    圍籬區隔動作將在資源逾時後啟動。

  2. 在每個節點上的 /etc/sysconfig/kdump 中,將 KDUMP_POSTSCRIPT 設定為在完成 Kdump 程序後向所有節點傳送通知。例如:

    /usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie [...]

    執行 Kdump 的節點將在完成 Kdump 後自動重新啟動。

  3. 寫入新的 initrd,以包含支援網路的 fence_kdump_send 庫。使用 -f 選項覆寫現有檔案,以便在下一次開機程序中使用新檔案:

    root # dracut -f -a kdump
  4. 在防火牆中針對 fence_kdump 資源開啟一個連接埠。預設的埠是 7410

  5. 為了能夠在觸發真實的圍籬區隔機制 (例如 external/ipmi) 之前檢查 Kdump,請使用類似以下的組態:

    fencing_topology \
      alice: kdump-node1 ipmi-node1 \
      bob: kdump-node2 ipmi-node2

    如需 fencing_topology 的詳細資訊:

    crm configure help fencing_topology

10.4 監控圍籬區隔裝置

如同任何其他資源一樣,STONITH 類別代辦也支援用於檢查狀態的監控操作。

注意
注意:監控 STONITH 資源

您應定期監控 STONITH 資源,但不宜過於頻繁。對大多數裝置而言,不低於 1800 秒 (30 分鐘) 的監控間隔應已足夠。

圍籬區隔裝置是 HA 叢集必不可少的一部分,但需要用到它們的情況卻是越少越好。電源管理設備常常會受到大量廣播流量的影響。有些裝置在每分鐘達到十個左右連接時便無法處理。如果兩個用戶端同時嘗試連接,有些裝置還會發生混淆。大部分裝置都不能同時處理多個工作階段。

通常,只需每隔幾個小時檢查一次圍籬區隔裝置的狀態即可。需要執行圍籬區隔操作以及電源開關發生故障的機率很小。

如需如何使用指令行設定監控操作的詳細資訊,請參閱第 8.3.9 節 「設定資源監控」

10.5 特殊圍籬區隔裝置

除了用於處理實際 STONITH 裝置的外掛程式外,我們還提供了一些用於特別目的的 STONITH 外掛程式。

警告
警告:僅供測試之用

下面提到的一些 STONITH 外掛程式僅用於演示和測試目的。請不要在實際情況中使用以下任一裝置,否則可能會導致資料毀損以及無法預期的後果:

  • external/ssh

  • ssh

fence_kdump

此外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行操作時將節點視為已圍籬區隔。節點在傾印期間無法執行任何資源。這樣可避免圍籬區隔已關閉但正在傾印的節點,省下相應的時間。外掛程式必須與另一個實際的 STONITH 裝置搭配使用。

如需組態詳細資料,請參閱範例 10.3 「Kdump 裝置的組態」

external/sbd

這是一個自我圍籬區隔裝置。它會對可插入到共享磁碟中的所謂毒藥丸做出反應。當共享儲存的連接中斷時,該裝置會讓節點停止運作。若要瞭解如何使用此 STONITH 代辦執行基於儲存區的圍籬區隔,請參閱第 11 章程序 11.7 「將叢集設定為使用 SBD」。也可參閱 http://www.linux-ha.org/wiki/SBD_Fencing 以取得詳細資料。

重要
重要:external/sbd 和 DRBD

external/sbd 圍籬區隔機制要求從每個節點都能直接讀取 SBD 分割區。因此不能使用 DRBD* 裝置存取 SBD 分割區。

但您可以對 DRBD 叢集使用圍籬區隔機制,前提是 SBD 分割區位於並非鏡像複製或複製的共享磁碟上。

external/ssh

另一個基於軟體的圍籬區隔機制。各節點之間必須能夠以 root 身分相互登入,且無需輸入密碼。該機制需要一個參數 hostlist,指定它的目標節點。由於無法重設實際發生故障的節點,因此該機制不能用於實際的叢集,只能用於測試和演示。如果將其用於共享儲存,可能會導致資料毀損。

meatware

meatware 需要使用者協助才能運作。呼叫 meatware 時,它會記錄 CRIT 嚴重程度訊息,該訊息會在節點的主控台上顯示。然後,操作員會確認該節點已關閉,並發出 meatclient(8) 指令。此指令指示 meatware 通知叢集應將該節點視為已停止。如需詳細資訊,請參閱 /usr/share/doc/packages/cluster-glue/README.meatware

suicide

這是一個僅限軟體的裝置,它可以使用 reboot 指令重新開機執行它所在的節點。這需要由節點的作業系統執行動作,在某些情況下可能會失敗。因此,應儘可能避免使用此裝置。不過,在一個節點的叢集上使用還是安全的。

無磁碟 SBD

如果您想要建立一個不含共享儲存的圍籬區隔機制,則此組態十分有用。在此無磁碟模式下,SBD 會使用硬體監視程式來圍籬區隔節點,而不依賴於任何共享裝置。不過,無磁碟 SBD 不能處理雙節點叢集的電腦分裂情況。此選項僅適用於具有兩個以上節點的叢集。

suicideI do not shoot my host(我自己不關閉我的主機) 規則的唯一例外。

10.6 基本建議

請查看以下建議清單,以免發生常見錯誤:

  • 不要同時設定多個電源開關。

  • 若要測試您的 STONITH 裝置及其組態,請拔下每個節點上的插頭,並驗證相應節點是否發生圍籬區隔。

  • 在加有負載的情況下測試您的資源,並驗證逾時值是否合適。設定的逾時值太小可能會觸發 (不必要的) 圍籬區隔操作。如需詳細資訊,請參閱第 6.3.9 節 「逾時值」

  • 針對您的設定使用適當的圍籬區隔裝置。如需詳細資料,另請參閱第 10.5 節 「特殊圍籬區隔裝置」

  • 設定一或多個 STONITH 資源。依預設,全域叢集選項 stonith-enabled 設為 true。如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。

  • 由於以下原因,請不要將全域叢集選項 stonith-enabled 設定為 false

    • 系統不支援未啟用 STONITH 的叢集。

    • DLM/OCFS2 不允許永久等待一個永遠不會發生的圍籬區隔操作。

  • 不要將全域叢集選項 startup-fencing 設定為 false。由於以下原因,該選項預設設定為 true:如果節點在叢集啟動期間處於未知狀態,系統將圍籬區隔該節點一次,以確定其狀態。

10.7 更多資訊

/usr/share/doc/packages/cluster-glue

在安裝的系統中,此目錄包含許多 STONITH 外掛程式和裝置的讀我檔案。

http://www.linux-ha.org/wiki/STONITH

有關 STONITH 的資訊位於 High Availability Linux Project 的首頁中。

http://www.clusterlabs.org/pacemaker/doc/
  • Pacemaker Explained》(Pacemaker 說明):說明設定 Pacemaker 時用到的概念。包含全面詳盡的參考資訊。

http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html

說明 HA 叢集中的電腦分裂、最低節點數和圍籬區隔之概念的文章。

11 儲存保護和 SBD

SBD (STONITH 區塊裝置) 透過經由共享塊儲存 (SAN、iSCSI、FCoE 等) 交換訊息來為基於 Pacemaker 的叢集提供節點圍籬區隔機制。此方法可將圍籬區隔機制隔離開,使其不受韌體版本變更的影響,或不依賴於特定韌體控制器。SBD 需要在每個節點上安裝一個監視程式,以確定能真正停止行為異常的節點。在某些情況下,還可以透過無磁碟模式執行 SBD,以便使用不含共享儲存的 SBD。

每則訊息前的 ha-cluster-bootstrap 程序檔提供了一種自動設定叢集的方式,並可選擇使用 SBD 做為圍籬區隔機制。如需詳細資料,請參閱Article “安裝與設定快速入門”。但是,手動設定 SBD 可為您提供個別設定的更多選項。

本章介紹 SBD 背後的概念。它將引導您完成 SBD 所需元件的設定,以保護您的叢集避免在發生電腦分裂的情況下出現潛在資料毀損。

除了節點層級圍籬區隔外,您還可以使用額外的儲存保護機制,例如 LVM2 獨佔啟用或 OCFS2 檔案鎖定支援 (資源層級圍籬區隔)。它們可以保護您的系統,避免出現管理或應用程式故障。

11.1 概念綜覽

SBD 是 Storage-Based Death (基於儲存的終止) 或 STONITH Block Device (STONITH 區塊裝置) 的縮寫。

高可用性叢集堆疊的最高優先程度是保護資料完整性。此項保護透過防止對資料儲存進行未協調的並行存取來實現。叢集堆疊會使用幾種控制機制來實現此目標。

但是,如果叢集中選出數個 DC,則可能導致網路分割或軟體故障。如果系統允許出現這種所謂的電腦分裂情況,就可能會產生資料毀損。

避免出現這種情況可採取的主要機制是透過 STONITH 實現節點圍籬區隔。如果使用 SBD 做為節點圍籬區隔機制可在電腦分裂情況下關閉節點而無需使用外部關閉裝置。

SBD 元件和機制
SBD 分割區

如果一個環境中的所有節點都可以存取共享儲存,系統會格式化裝置的一小塊分割區用於 SBD。該分割區的大小取決於所用磁碟的區塊大小 (例如,對於區塊大小為 512 位元組的標準 SCSI 磁碟,該分割區大小為 1 MB;區塊大小為 4 KB 的 DASD 磁碟需要 4 MB 大小的分割區)。啟始化程序會在裝置上建立訊息配置,設定最多 255 個節點的訊息插槽。

SBD 精靈

設定完各自的 SBD 精靈後,在每個節點上使其上線,然後再啟動其餘叢集堆疊。當其他所有叢集元件都關閉後,SBD 才會終止,這樣便確保了只要叢集資源啟動,SBD 就會加以監督。

訊息

精靈會自動在分割區上為自己配置一個訊息槽,然後持續監控,查看是否有傳送給它的訊息。一旦收到訊息,精靈會立即回應請求,例如為圍籬區隔啟動關機或重新開機操作。

另外,此精靈會持續監控與儲存裝置的連線,如果無法連接分割區則會自行終止。這樣可保證精靈不會錯過圍籬區隔訊息。如果叢集資料位於其他分割區的同一個邏輯單位,則一旦與儲存失去連線,工作負載便將終止,因此不會增加故障點。

監視程式

只要使用 SBD,就必須確保監視程式正常運作。最新的系統支援硬體監視程式,該程式需要由某個軟體元件來激發餽送。軟體元件 (在本例中為 SBD 精靈) 透過將服務脈衝定期寫入監視程式來饋送監視程式。如果精靈停止饋送監視程式,硬體將強制重新啟動系統。這樣可以保障 SBD 程序自身不出現故障,例如沒有回應或陷入 I/O 錯誤。

如果已啟動 Pacemaker 整合,則在大部分裝置的連接已中斷的情況下,SBD 將不會自我圍籬區隔。例如,假定您的叢集包含三個節點:A、B 和 C。由於網路分隔,A 只能看到它自己,而 B 和 C 之間仍可通訊。在本例中,有兩個叢集分割區,一個由於節點占多數 (B 和 C) 而達到最低節點數,而另一個 (A) 則未達到。如果在大部分圍籬區隔裝置無法連接時發生這種情況,節點 A 將立即自我關閉,但是節點 B 和 C 將繼續執行。

11.2 手動設定 SBD 綜覽

手動設定基於儲存的保護時必須執行下列步驟:必須以 root 身分執行這些步驟。開始執行之前,請查看第 11.3 節 「要求」

  1. 設定監視程式

  2. 根據您的情況,可將 SBD 與一到三部裝置搭配使用,或以無磁碟模式使用。如需綜覽,請參閱第 11.4 節 「SBD 裝置數量」。如需詳細的設定,請參閱:

  3. 測試 SBD 和圍籬區隔

11.3 要求

  • 最多可將三部 SBD 裝置用於基於儲存的圍籬區隔。使用一到三部裝置時,必須可從所有節點存取共享儲存。

  • 針對叢集中的所有節點,共享儲存裝置的路徑必須永久且一致。請使用穩定的裝置名稱,例如 /dev/disk/by-id/dm-uuid-part1-mpath-abcedf12345

  • 可透過光纖通道 (FC)、乙太網路光纖通道 (FCoE) 甚至 iSCSI 來連接共用儲存。

  • 共享儲存節段不得使用基於主機的 RAID、LVM2 或 DRBD*。DRBD 可能已分割,這會對 SBD 造成問題,因為 SBD 中不能存在兩種狀態。不能將叢集多裝置 (叢集 MD) 用於 SBD。

  • 但是,建議使用基於儲存的 RAID 和多重路徑來提升可靠性。

  • 可以在不同叢集之間共用某個 SBD 裝置,前提是共用該裝置的節點數不超過 255 個。

  • 對於具有兩個以上節點的叢集,還可以在無磁碟模式下使用 SBD。

11.4 SBD 裝置數量

SBD 支援最多使用三部裝置:

1 部裝置

最簡單的實作。這種組態適合所有資料均位於同一共享儲存上的叢集。

2 部裝置

這種組態主要適用於這樣的環境:使用基於主機的鏡像複製,但是沒有第三個儲存裝置可用。如果 SBD 失去對一個鏡像複製方的存取能力,它不會立即終止,以便允許叢集繼續執行。不過,由於 SBD 掌握的情況不夠全面,它無法偵測儲存的不對稱分裂,所以當只有一個鏡像複製方可用時,它不會圍籬區隔另一方。因此,在其中一個儲存陣列已關閉的情況下,它無法自動容許再一次的故障。

3 部裝置

最可靠的組態。它具有從一部裝置中斷 (可能是由於失敗或維護) 的情況中復原的能力。只會在有一部以上裝置失去連接以及必要時,SBD 才會自行終止,具體取決於叢集分割區或節點的狀態。如果至少有兩部裝置仍然可存取,便能成功傳輸圍籬區隔訊息。

這種組態適合儲存不限制為單個陣列的較複雜情況。基於主機的鏡像複製解決方案可以在每個鏡像複製方設定一個 SBD (不鏡像複製自身),在 iSCSI 上另外設定一個連接中斷器。

無磁碟

如果您想要建立一個不含共享儲存的圍籬區隔機制,則此組態十分有用。在此無磁碟模式下,SBD 會使用硬體監視程式來圍籬區隔節點,而不依賴於任何共享裝置。不過,無磁碟 SBD 不能處理雙節點叢集的電腦分裂情況。此選項僅適用於具有兩個以上節點的叢集。

11.5 逾時計算

使用 SBD 做為圍籬區隔機制時,必須考慮所有元件的逾時,因為它們之間相互依賴。

監視程式逾時

此逾時在啟始化 SBD 裝置期間設定。它主要取決於您的儲存延遲。必須能夠在此段時間內成功讀取大多數裝置。否則,節點可能會自我圍籬區隔。

注意
注意:多路徑或 iSCSI 設定

如果 SBD 裝置位於多路徑設定或 iSCSI 上,則應將逾時設定為偵測到路徑故障並切換到下一個路徑所需的時間。

這還意味著在 /etc/multipath.conf 中,max_polling_interval 的值必須小於 watchdog 逾時。

msgwait 逾時

此逾時在啟始化 SBD 裝置期間設定。它定義了將訊息寫入 SBD 裝置上的某個節點插槽後經過多長時間會視為已傳遞。該逾時應設定得足夠長,讓節點有時間偵測到其是否需要自我圍籬區隔。

但是,如果 msgwait 逾時相對較長,已圍籬區隔的叢集節點可能會在圍籬區隔動作傳回之前便又重新加入。此情況可透過在 SBD 組態中設定 SBD_DELAY_START 參數來緩解,請參閱步驟 4 中的程序 11.4

CIB 中的 stonith-timeout

此逾時在 CIB 中做為全域叢集內容設定。它定義了等待 STONITH 動作 (重新開機、開啟、關閉) 完成的時間。

CIB 中的 stonith-watchdog-timeout

此逾時在 CIB 中做為全域叢集內容設定。如果未明確設定,則預設值為 0,此值適用於 SBD 與一到三部裝置搭配使用的情況。若要以無磁碟模式使用 SBD,請參閱程序 11.8 「設定無磁碟 SBD」以取得詳細資料。

如果您變更監視程式逾時,則需要同時調整另外兩個逾時。以下公式大致表達了這三個值之間的關係:

範例 11.1︰ 逾時計算公式
Timeout (msgwait) >= (Timeout (watchdog) * 2)
stonith-timeout = Timeout (msgwait) + 20%

例如,如果您將監視程式逾時設定為 120,則請將 msgwait 逾時設定為 240,並將 stonith-timeout 設定為 288

如果您使用 ha-cluster-bootstrap 程序檔設定叢集並啟始化 SBD 裝置,則會自動考慮這些逾時之間的關係。

11.6 設定監視程式

SUSE Linux Enterprise High Availability Extension 隨附了幾個核心模組用於提供硬體特定的監視程式驅動程式。如需最常用監視程式驅動程式清單,請參閱常用監視程式驅動程式

對於生產環境中的叢集,建議使用硬體特定的監視程式驅動程式。不過,如果沒有與您的硬體相符的監視程式,則可以將 softdog 當成核心監視程式模組使用。

High Availability Extension 使用 SBD 精靈做為饋送監視程式的軟體元件。

11.6.1 使用硬體監視程式

找出指定系統的正確監視程式核心模組並非沒有意義。自動查探常常會失敗。因此,在載入正確的模組之前,許多模組即已載入。

表格 11.1 列出了最常用的監視程式驅動程式。如果您的硬體未列在其中,也可從目錄 /lib/modules/KERNEL_VERSION/kernel/drivers/watchdog 提供的清單中進行選擇。或者,請洽詢您的硬體或系統廠商,獲取有關系統特定的監視程式組態設定的詳細資料。

表 11.1︰ 常用監視程式驅動程式
硬體驅動程式
HPhpwdt
Dell、Lenovo (Intel TCO)iTCO_wdt
Fujitsuipmi_watchdog
IBM 大型主機上的 VM 或 z/VMvmwatchdog
Xen VM (DomU)xen_xdt
Genericsoftdog
重要
重要:存取監視程式計時器

有些硬體廠商交付的系統管理軟體 (例如 HP ASR 精靈) 會使用監視程式來進行系統重設。如果 SBD 使用了監視程式,請停用此類軟體。此時不能有任何其他軟體存取監視程式計時器。

程序 11.1︰ 載入正確的核心模組

若要確定載入正確的監視程式模組,請執行如下操作:

  1. 列出已隨核心版本安裝的驅動程式:

    root # rpm -ql kernel-VERSION | grep watchdog
  2. 列出核心中目前載入的任何監視程式模組:

    root # lsmod | egrep "(wd|dog)"
  3. 如果傳回了結果,請卸載錯誤的模組:

    root # rmmod WRONG_MODULE
  4. 啟用與您的硬體相符的監視程式模組:

    root # echo WATCHDOG_MODULE > /etc/modules-load.d/watchdog.conf
    root # systemctl restart systemd-modules-load
  5. 測試是否已正確載入監視程式模組:

    root # lsmod | grep dog

11.6.2 使用軟體監視程式 (softdog)

對於生產環境中的叢集,建議使用硬體特定的監視程式驅動程式。不過,如果沒有與您的硬體相符的監視程式,則可以將 softdog 當成核心監視程式模組使用。

重要
重要:Softdog 限制

Softdog 驅動程式假設至少有一個 CPU 仍然在執行。如果所有 CPU 均已堵塞,則 softdog 驅動程式中應該將系統重新開機的代碼永遠都不會執行。相反地,即使所有 CPU 均已堵塞,硬體監視程式也仍然會繼續運作。

程序 11.2︰ 載入 Softdog 核心模組
  1. 啟用 softdog 驅動程式:

    root # echo softdog > /etc/modules-load.d/watchdog.conf
  2. /etc/modules-load.d/watchdog.conf 中新增 softdog 模組並重新啟動服務:

    root # echo softdog > /etc/modules-load.d/watchdog.conf
    root # systemctl restart systemd-modules-load
  3. 測試是否已正確載入 softdog 監視程式模組:

    root # lsmod | grep softdog

11.7 設定 SBD 與裝置

以下是設定所必需步驟:

在開始之前,請確定要用於 SBD 的一部或多部區塊裝置滿足在第 11.3 節中指定的要求。

設定 SBD 裝置時,您需要考慮幾個逾時值。如需詳細資料,請參閱第 11.5 節 「逾時計算」

如果節點上執行的 SBD 精靈更新監視程式計時器的速度不夠快,此節點將自行終止。設定逾時後,請在您的特定環境中予以測試。

程序 11.3︰ 啟始化 SBD 裝置

若要將 SBD 與共享儲存搭配使用,必須先在一到三部區塊裝置上建立訊息佈局。sbd create 指令會將中繼資料標頭寫入指定的一部或多部裝置。它還將啟始化最多 255 個節點的訊息插槽。如果該指令不含任何其他選項,則執行時將使用預設的逾時設定。

警告
警告:覆寫現有資料

確定要用於 SBD 的一部或多部裝置沒有儲存任何重要資料。執行 sbd create 指令時,會直接覆寫指定區塊裝置的大於第一個 MB,而不會進一步提出申請或進行備份。

  1. 決定要將哪個區塊裝置或哪些區塊裝置用於 SBD。

  2. 使用下列指令啟始化 SBD 裝置:

    root # sbd -d /dev/SBD create

    (用實際的路徑名稱取代 /dev/SBD,例如:/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg。)

    若要將多部裝置用於 SBD,請多次指定 -d 選項,例如:

    root # sbd -d /dev/SBD1 -d /dev/SBD2 -d /dev/SBD3 create
  3. 如果您的 SBD 裝置位於多路徑群組,請使用 -1-4 選項來調整要用於 SBD 的逾時。如需詳細資料,請參閱第 11.5 節 「逾時計算」。所有逾時均以秒為單位指定:

    root # sbd -d /dev/SBD -4 1801 -1 902 create

    1

    -4 選項用於指定 msgwait 的逾時。在上面的範例中,該逾時設定為 180 秒。

    2

    -1 選項用於指定監視程式的逾時。在上面的範例中,該逾時設定為 90 秒。模擬監視程式的最小允許值為 15 秒。

  4. 檢查已寫入裝置的內容:

    root # sbd -d /dev/SBD dump
    Header version     : 2.1
    UUID               : 619127f4-0e06-434c-84a0-ea82036e144c
    Number of slots    : 255
    Sector size        : 512
    Timeout (watchdog) : 5
    Timeout (allocate) : 2
    Timeout (loop)     : 1
    Timeout (msgwait)  : 10
    ==Header on disk /dev/SBD is dumped

    如您所見,逾時也會存入標頭,以確保所有參與的節點在逾時上達成一致。

啟始化 SBD 裝置之後,編輯 SBD 組態檔案,然後啟用並啟動相應的服務以讓變更生效。

程序 11.4︰ 編輯 SBD 組態檔案
  1. 開啟檔案 /etc/sysconfig/sbd

  2. 搜尋以下參數: SBD_DEVICE

    該參數指定要監控和要用於交換 SBD 訊息的裝置。

  3. 編輯此行,並使用您的 SBD 裝置取代 SBD

    SBD_DEVICE="/dev/SBD"

    如果您需要在第一行中指定多部裝置,請使用分號分隔各裝置 (裝置順序無關緊要):

    SBD_DEVICE="/dev/SBD1; /dev/SBD2; /dev/SBD3"

    如果無法存取 SBD 裝置,精靈將無法啟動叢集,並會禁止叢集啟動。

  4. 搜尋以下參數: SBD_DELAY_START

    啟用或停用延遲。設定 SBD_DELAY_STARTyes (如果 msgwait 相對較長,而叢集節點開機很快)。將此參數設定為 yes 可在開機時延遲 SBD 啟動。虛擬機器有時候需要此項延遲。

將您的 SBD 裝置新增至 SBD 組態檔案之後,啟用 SBD 精靈。SBD 精靈是叢集堆疊的重要組成部分。當叢集堆疊正在執行時,需要執行該精靈。因此,每當啟動 pacemaker 服務時,做為相依項,也要啟動 sbd 服務。

程序 11.5︰ 啟用和啟動 SBD 服務
  1. 在每個節點上,啟用 SBD 服務:

    root # systemctl enable sbd

    每當啟動 Pacemaker 服務時,SBD 服務將與 Corosync 服務一起啟動。

  2. 在每個節點上重新啟動叢集堆疊:

    root # crm cluster restart

    此操作會自動觸發 SBD 精靈的啟動。

下一步是測試 SBD 裝置,請參閱程序 11.6

程序 11.6︰ 測試 SBD 裝置
  1. 下列指令會從 SBD 裝置傾印節點插槽及其目前的訊息:

    root # sbd -d /dev/SBD list

    現在,您應該會看到曾隨 SBD 啟動的所有叢集節點都列在此處。例如,如果您擁有雙節點叢集,訊息插槽對於兩個節點都應顯示 clear

    0       alice        clear
    1       bob          clear
  2. 嘗試向其中一個節點傳送一則測試訊息:

    root # sbd -d /dev/SBD message alice test
  3. 節點會在系統記錄檔案中確認收到訊息:

    May 03 16:08:31 alice sbd[66139]: /dev/SBD: notice: servant: Received command test from bob on disk /dev/SBD

    這証實了節點上的 SBD 目前的確在正常執行,並且可以接收訊息。

在最後一個步驟中,您需要調整叢集組態,請參閱程序 11.7

程序 11.7︰ 將叢集設定為使用 SBD

若要設定在叢集中使用 SBD,您需要在叢集組態中執行以下操作:

  • stonith-timeout 參數設定為與您的設定相符的值。

  • 設定 SBD STONITH 資源。

如需計算 stonith-timeout ,請參閱第 11.5 節 「逾時計算」

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 執行 crm configure

  3. 輸入以下內容:

    crm(live)configure# property stonith-enabled="true" 1
    crm(live)configure# property stonith-watchdog-timeout=0 2
    crm(live)configure# property stonith-timeout="40s" 3

    1

    此為預設組態,因為不支援沒有 STONITH 的叢集。而如果出於測試目的停用了 STONITH,請確定再次將此參數設定為 true

    2

    如果未明確設定,則預設值為 0,此值適用於 SBD 與一到三部裝置搭配使用的情況。

    3

    如果將 SBD 的 msgwait 逾時值設定為 30 秒,則適合將 stonith-timeout 值設定為 40

  4. 對於雙節點叢集,請確定您希望延遲是可預測還是隨機的。對於其他類型的叢集,則不需要設定此參數。

    可預測的靜態延遲

    此參數會在執行 STONITH 動作之前啟用靜態延遲。它可以確定在使用不同圍籬區隔資源和不同延遲值時,節點不會互相圍籬區隔。在發生圍籬區隔競爭時,目標節點將會鬆脫。使用該參數可將特定的節點標記為在雙節點叢集出現電腦分裂時能夠留存。若要實現此目的,為每個節點建立兩個基本 STONITH 裝置至關重要。在下面的組態中,如果出現電腦分裂,alice 將會獲勝並得以留存:

    crm(live)configure# primitive st-sbd-alice stonith:external/sbd params \
           pcmk_host_list=alice pcmk_delay_base=20
    crm(live)configure# primitive st-sbd-bob stonith:external/sbd params \
           pcmk_host_list=bob pcmk_delay_base=0
    動態隨機延遲

    此參數防止在使用慢速裝置 (例如 SBD) 時出現雙重圍籬區隔。它會為圍籬區隔裝置上的 STONITH 動作新增隨機延遲。這對於雙節點叢集尤為重要,否則若發生電腦分裂的情況,兩個節點可能都會嘗試相互圍籬區隔。

    crm(live)configure# primitive stonith_sbd stonith:external/sbd
      params pcmk_delay_max=30
  5. 使用 show 檢閱所做的變更。

  6. 使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

啟動資源之後,叢集即會成功設定為使用 SBD。如果需要圍籬區隔某個節點,將會使用此方法。

11.8 設定無磁碟 SBD

SBD 可在無磁碟模式下操作。在此模式下,發生以下情況時,將使用監視程式裝置來重置節點:如果不具有最低節點數、如果任何受監控的精靈遺失且未復原,或者如果 Pacemaker 決定節點需要圍籬區隔。無磁碟 SBD 基於節點的自我圍籬區隔,取決於叢集的狀態、最低節點數和一些合理的假設。CIB 中不需要 STONITH SBD 基本資源。

重要
重要:叢集節點數

不要將無磁碟 SBD 用做雙節點叢集的圍籬區隔機制。請僅在三節點或更多節點的叢集中使用此機制。無磁碟模式下的 SBD 無法處理雙節點叢集的電腦分裂情況。

程序 11.8︰ 設定無磁碟 SBD
  1. 開啟檔案 /etc/sysconfig/sbd 並使用以下項目:

    SBD_PACEMAKER=yes
    SBD_STARTMODE=always
    SBD_DELAY_START=no
    SBD_WATCHDOG_DEV=/dev/watchdog
    SBD_WATCHDOG_TIMEOUT=5

    SBD_DEVICE 項目不需要,因為未使用共享磁碟。此參數遺失時,sbd 服務不會為 SBD 裝置啟動任何監看員程序。

  2. 在每個節點上,啟用 SBD 服務:

    root # systemctl enable sbd

    每當啟動 Pacemaker 服務時,SBD 服務將與 Corosync 服務一起啟動。

  3. 在每個節點上重新啟動叢集堆疊:

    root # crm cluster restart

    此操作會自動觸發 SBD 精靈的啟動。

  4. 檢查參數 have-watchdog=true 是否已自動設定:

    root # crm configure show | grep have-watchdog
             have-watchdog=true
  5. 執行 crm configure 並在 crm 外圍程序上設定以下叢集屬性:

    crm(live)configure# property stonith-enabled="true" 1
    crm(live)configure# property stonith-watchdog-timeout=10 2

    1

    此為預設組態,因為不支援沒有 STONITH 的叢集。而如果出於測試目的停用了 STONITH,請確定再次將此參數設定為 true

    2

    對於無磁碟 SBD,此參數不能為零。它定義了經過多長時間之後可以假定圍籬區隔目標已自我圍籬區隔。因此,其值必須大於等於 SBD_WATCHDOG_TIMEOUT (/etc/sysconfig/sbd 中) 的值。從 SUSE Linux Enterprise High Availability Extension 15 開始,如果您將 stonith-watchdog-timeout 設定為負值,Pacemaker 將自動計算此逾時並將它設定為 SBD_WATCHDOG_TIMEOUT 值的兩倍。

  6. 使用 show 檢閱所做的變更。

  7. 使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

11.9 測試 SBD 和圍籬區隔

若要測試 SBD 在節點圍籬區隔方面是否如預期工作,請使用以下其中一種或所有方法:

手動觸發節點圍籬區隔

若要針對節點 NODENAME 觸發圍籬區隔動作,請執行以下操作:

root # crm node fence NODENAME

檢查經過以下時間之後,節點是否已圍籬區隔,以及其他節點是否將該節點視為已圍籬區隔: stonith-watchdog-timeout

模擬 SBD 失敗
  1. 辨識 SBD inquisitor 的程序 ID:

    root # systemctl status sbd
    ● sbd.service - Shared-storage based fencing daemon
    
       Loaded: loaded (/usr/lib/systemd/system/sbd.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2018-04-17 15:24:51 CEST; 6 days ago
         Docs: man:sbd(8)
      Process: 1844 ExecStart=/usr/sbin/sbd $SBD_OPTS -p /var/run/sbd.pid watch (code=exited, status=0/SUCCESS)
     Main PID: 1859 (sbd)
        Tasks: 4 (limit: 4915)
       CGroup: /system.slice/sbd.service
               ├─1859 sbd: inquisitor
    [...]
  2. 透過終止 SBD inquisitor 程序模擬 SBD 失敗。在我們的範例中,SBD inquisitor 的程序 ID 是 1859

    root # kill -9 1859

    節點主動自我圍籬區隔。經過以下時間之後,其他節點注意到該節點遺失並將它視為已自我圍籬區隔: stonith-watchdog-timeout

透過監控操作失敗觸發圍籬區隔

對於正常組態,資源停止操作失敗將觸發圍籬區隔。若要手動觸發圍籬區隔,您可以產生一個資源停止操作失敗。或者,您可以暫時變更資源監控操作的組態,產生一個監控失敗,如下所示:

  1. 設定資源監控操作的 on-fail=fence 內容:

    op monitor interval=10 on-fail=fence
  2. 讓監控操作失敗 (例如,如果資源與某個服務相關,則可透過終止相應的精靈來實現)。

    此失敗會觸發圍籬區隔動作。

11.10 儲存保護的其他機制

除了透過 STONITH 進行節點圍籬區隔之外,還可使用其他方法在資源層級實現儲存保護。例如,SCSI-3 和 SCSI-4 使用持續保留,而 sfex 提供鎖定機制。這兩種方法將在下面的小節中介紹。

11.10.1 設定 sg_persist 資源

SCSI 規格 3 和 4 定義了持續保留。其屬於 SCSI 通訊協定功能,可用於 I/O 圍籬區隔和容錯移轉。此功能在 sg_persist Linux 指令中實作。

注意
注意:SCSI 磁碟相容性

用於 sg_persist 的所有備份磁碟都必須與 SCSI 磁碟相容。sg_persist 僅適用於 SCSI 磁碟或 iSCSI LUN 等裝置。不要將它用於 IDE、SATA 或不支援 SCSI 通訊協定的任何區塊裝置。

繼續操作之前,請檢查您的磁碟是否支援持續保留。使用以下指令 (使用您的裝置名稱取代 DISK):

root # sg_persist -n --in --read-reservation -d /dev/DISK

結果將顯示您的磁碟是否支援持續保留:

  • 支援的磁碟:

    PR generation=0x0, there is NO reservation held
  • 不支援的磁碟:

    PR in (Read reservation): command not supported
    Illegal request, Invalid opcode

如果您收到錯誤訊息 (如上面所示),請使用 SCSI 相容的磁碟取代舊磁碟。否則請執行如下操作:

  1. 若要建立基本資源 sg_persist,請以 root 身分執行以下指令:

    root # crm configure
    crm(live)configure# primitive sg sg_persist \
        params devs="/dev/sdc" reservation_type=3 \
        op monitor interval=60 timeout=60
  2. sg_persist 基本資源新增至主要-從屬群組:

    crm(live)configure# ms ms-sg sg \
        meta master-max=1 notify=true
  3. 執行一些測試。當資源處於主要/從屬狀態時,您可以在執行主要例項的叢集節點上的 /dev/sdc1 中進行掛接和寫入,但無法在執行從屬例項的叢集節點上進行寫入。

  4. 為 Ext4 新增檔案系統基本資源:

    crm(live)configure# primitive ext4 ocf:heartbeat:Filesystem \
        params device="/dev/sdc1" directory="/mnt/ext4" fstype=ext4
  5. sg_persist 主要資源和檔案系統資源之間新增以下順序關係和併置:

    crm(live)configure# order o-ms-sg-before-ext4 Mandatory: ms-sg:promote ext4:start
    crm(live)configure# colocation col-ext4-with-sg-persist Mandatory: ext4 ms-sg:Master
  6. 使用 show 指令檢查所有變更。

  7. 提交您的變更。

如需詳細資訊,請參閱 sg_persist man 頁面。

11.10.2 使用 sfex 確保獨佔啟用儲存

本節介紹的 sfex 是一個附加的低層機制,用於將對共享儲存的存取鎖定給某個節點。請注意,sfex 並不會取代 STONITH。由於 sfex 需要共享儲存,因此建議在儲存的其他分割區上使用上述 SBD 節點圍籬區隔機制。

依照設計,sfex 不能與需要並行的工作負載 (例如 OCFS2) 配合使用。其可做為傳統容錯移轉型工作負載的一層保護。其效果與 SCSI-2 保留類似,但更具一般性。

11.10.2.1 綜覽

在共享儲存環境中,會額外設定一個小分割區,用於儲存一或多個鎖定。

節點必須先取得保護鎖定,才能獲取受保護的資源。順序由 Pacemaker 強制設定。sfex 元件可確保即使 Pacemaker 遇到電腦分裂的情況,系統也不會多次授予鎖定。

系統必須定期重新整理鎖定,這樣即使節點停止回應,也不會永久封鎖鎖定,其他節點仍能繼續處理。

11.10.2.2 設定

下例說明了如何建立用於 sfex 的共享分割區,以及如何在 CIB 中為 sfex 鎖定設定資源。一個 sfex 分割區可保存任意個鎖定,每個鎖定需要配置 1 KB 儲存空間。sfex_init 預設會在分割區上建立一個鎖定。

重要
重要:要求
  • sfex 的共享分割區應與您要保護的資料位於同一個邏輯單位上。

  • 共享 sfex 分割區不得使用基於主機的 RAID 或 DRBD。

  • 可以使用 LVM2 邏輯磁碟區。

程序 11.9︰ 建立 sfex 分割區
  1. 建立一個共享分割區用於 sfex。記下此分割區的名稱,並用其取代下面的 /dev/sfex

  2. 使用以下指令建立 sfex 中繼資料:

    root # sfex_init -n 1 /dev/sfex
  3. 驗證中繼資料是否已正確建立:

    root # sfex_stat -i 1 /dev/sfex ; echo $?

    此指令應傳回 2,因為目前並未鎖定。

程序 11.10︰ 設定 sfex 鎖定的資源
  1. sfex 鎖定透過 CIB 中的資源表示,設定如下所示:

    crm(live)configure# primitive sfex_1 ocf:heartbeat:sfex \
    #	params device="/dev/sfex" index="1" collision_timeout="1" \
          lock_timeout="70" monitor_interval="10" \
    #	op monitor interval="10s" timeout="30s" on-fail="fence"
  2. 若要透過 sfex 鎖定保護資源,請在要保護的資源與 sfex 資源之間建立強制性順序和配置條件約束。假設要保護的資源 ID 是 filesystem1

    crm(live)configure# order order-sfex-1 Mandatory: sfex_1 filesystem1
    crm(live)configure# colocation col-sfex-1 Mandatory: filesystem1 sfex_1
  3. 如果使用群組語法,請將 sfex 資源做為第一個資源新增到群組中:

    crm(live)configure# group LAMP sfex_1 filesystem1 apache ipaddr

11.11 更多資訊

12 存取控制清單

Crm 外圍程序 (crmsh) 或 Hawk2 等叢集管理工具可由 root 使用者或 haclient 群組中的任何使用者使用。依預設,這些使用者擁有完整的讀取/寫入存取權。若要限制存取權或指定更精細的存取權限,可以使用存取控制清單 (ACL)。

存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。

注意
注意:CIB 語法驗證版本與 ACL 的差異

僅當您的 CIB 是由 pacemaker-2.0 或更高 CIB 語法版本驗證時,此 ACL 文件才適用。如需關於如何檢查這一點以及升級 CIB 版本的詳細資料,請參閱注意:升級 CIB 語法版本

12.1 要求和先決條件

在您開始對叢集使用 ACL 前,請確定符合下列條件:

  • 請使用 NIS、Active Directory 或者透過手動將相同使用者新增至所有節點的方式,來確保叢集中的所有節點上擁有相同的使用者。

  • 您要使用 ACL 修改其存取權限的所有使用者都必須屬於 haclient 群組。

  • 所有使用者都需要使用 crmsh 的絕對路徑 /usr/sbin/crm 來執行 crmsh。

  • 如果非特權使用者要執行 crmsh,則需要使用 /usr/sbin 延伸其 PATH 變數。

重要
重要:預設存取權限
  • ACL 是一個選擇性功能。ACL 預設處於停用狀態。

  • 如果未啟用 ACL,root 以及屬於 haclient 群組的所有使用者對於叢集組態將擁有完整的讀取/寫入存取權。

  • 即使啟用並設定了 ACL,root 和預設 CRM 擁有者 hacluster 也永遠擁有對叢集組態的完整存取權。

若要使用 ACL,您需要瞭解一些 XPath 方面的知識。XPath 是一種用於在 XML 文件中選取節點的語言。請參閱 http://en.wikipedia.org/wiki/XPath 或在 http://www.w3.org/TR/xpath/ 上查詢規格。

12.2 在叢集中啟用 ACL

在開始設定 ACL 之前,需要先啟用 ACL。若要實現此目的,請在 crmsh 中使用以下指令:

root # crm configure property enable-acl=true

或者,依程序 12.1 「使用 Hawk 啟用 ACL」所述使用 Hawk2。

程序 12.1︰ 使用 Hawk 啟用 ACL
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取叢集組態以顯示全域叢集選項及它們目前的值。

  3. 叢集組態下方,按一下空下拉式方塊並選取 enable-acl 以新增該參數。系統即會新增該參數,且將其設為預設值 No

  4. 將其值設定為 Yes,然後套用變更。

12.3 ACL 的基本知識

存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。ACL 角色是一組用於描述 CIB 存取權限的規則。規則由以下元素組成:

  • 存取權限,例如讀取寫入拒絕

  • 定義在何種情況下套用規則的規格。此規格可以是類型、ID 參考或 XPath 運算式。

通常,便利的做法是將 ACL 綁定到角色,並將特定的角色指定給系統使用者 (ACL 目標)。建立 ACL 規則的方法有兩種:

12.3.1 透過 XPath 運算式設定 ACL 規則

若要透過 XPath 管理 ACL 規則,您需要瞭解基礎 XML 的結構。使用以下指令擷取結構,該指令將以 XML 格式顯示您的叢集組態 (請參閱範例 12.1):

root # crm configure show xml
範例 12.1︰ XML 中的叢集組態摘錄
<num_updates="59" 
      dc-uuid="175704363"
      crm_feature_set="3.0.9"
      validate-with="pacemaker-2.0"
      epoch="96"
      admin_epoch="0"
      cib-last-written="Fri Aug  8 13:47:28 2014"
      have-quorum="1">
  <configuration>
    <crm_config>
       <cluster_property_set id="cib-bootstrap-options">
        <nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/>
       [...]
      </cluster_property_set>
    </crm_config>
    <nodes>
      <node id="175704363" uname="alice"/>
      <node id="175704619" uname="bob"/>
    </nodes>
    <resources> [...]  </resources>
    <constraints/>
    <rsc_defaults> [...] </rsc_defaults>
    <op_defaults> [...] </op_defaults>
  <configuration>
</cib>

您可以使用 XPath 語言在此 XML 文件中尋找節點。例如,若要選取根節點 (cib),請使用 XPath 運算式 /cib。若要尋找全域叢集組態,請使用 XPath 運算式 /cib/configuration/crm_config

例如,表格 12.1 「Operator 角色 — 存取類型和 XPath 運算式」顯示了用於建立operator角色的參數 (存取類型和 XPath 運算式)。具有此角色的使用者僅可執行第二欄中所述的任務 — 他們既不能重新設定任何資源 (例如,變更參數或操作),也不能變更並存或順序條件約束的組態。

表 12.1︰ Operator 角色 — 存取類型和 XPath 運算式

類型

XPath/說明

寫入

//crm_config//nvpair[@name='maintenance-mode']

開啟或關閉叢集維護模式。

寫入

//op_defaults//nvpair[@name='record-pending']

選擇是否要記錄待處理操作。

寫入

//nodes/node//nvpair[@name='standby']

將節點設定為線上模式或待命模式。

寫入

//resources//nvpair[@name='target-role']

啟動、停止、升級或降級任何資源。

寫入

//resources//nvpair[@name='maintenance']

選擇是否應將資源置於維護模式。

寫入

//constraints/rsc_location

將資源從一個節點移轉/移動到另一個節點。

讀取

/cib

檢視叢集的狀態。

12.3.2 透過縮寫設定 ACL 規則

不想處理 XML 結構的使用者可以使用更簡單的方法,

例如,您可以考慮使用如下 Xpath:

//*[@id="rsc1"]

它會尋找 ID 為 rsc1 的所有 XML 節點。

相應的簡寫語法如下:

ref:"rsc1"

這也適用於條件約束。以下是詳細的 XPath:

//constraints/rsc_location

相應的簡寫語法如下:

type:"rsc_location"

可以在 crmsh 和 Hawk2 中使用簡寫語法。CIB 精靈知道如何將 ACL 規則套用至相符物件。

12.4 使用 Hawk 設定 ACL2

下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權限。您也可以依照程序 12.4 「使用 crmsh 新增 Monitor 角色並指定使用者」所述使用 crmsh 來實現此目的。

程序 12.2︰ 使用 Hawk2 新增 Monitor 角色
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取角色

  3. 按一下建立

  4. 輸入唯一的角色 ID,例如 monitor

  5. 為存取權限選取讀取

  6. 輸入 XPath 運算式 /cib 做為 Xpath

    Image
  7. 按一下建立

    如此即會建立一個名為 monitor 的新角色,為其設定讀取權限,並透過使用 XPath 運算式 /cib 將其套用到 CIB 中的所有元素。

  8. 如果需要,請按一下加號圖示並指定相應參數來新增更多規則。

  9. 使用向上或向下箭頭按鈕對各規則排序。

程序 12.3︰ 使用 Hawk2 將角色指定給目標

若要將我們在程序 12.2 中建立的角色指定給系統使用者 (即目標),請執行以下操作繼續:

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取目標

  3. 若要建立系統使用者 (即 ACL 目標),請按一下建立,然後輸入一個唯一的目標 ID,例如 tux。請確定此使用者屬於 haclient 群組。

  4. 若要將角色指定給目標,請選取一或多個角色

    在本範例中,請選取您在程序 12.2 中建立的 monitor 角色。

    Image
  5. 確認您的選擇。

若要設定對資源或條件約束的存取權限,也可以依照第 12.3.2 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。

12.5 使用 crmsh 設定 ACL

下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權。

程序 12.4︰ 使用 crmsh 新增 Monitor 角色並指定使用者
  1. root 身分登入。

  2. 啟動 crmsh 的互動模式:

    root # crm configure
    crm(live)configure# 
  3. 定義 ACL 角色:

    1. 使用 role 指令定義新角色:

      crm(live)configure# role monitor read xpath:"/cib"

      上面的指令會建立一個名為 monitor 的新角色,為其設定讀取權限,並使用 XPath 運算式 /cib 將其套用至 CIB 中的所有元素。如果需要,您可以新增更多存取權限及 XPath 引數。

    2. 根據需要新增其他角色。

  4. 將角色指定給一或多個 ACL 目標,即相應的系統使用者。請確定他們屬於 haclient 群組。

    crm(live)configure# acl_target tux monitor
  5. 檢查您的變更:

    crm(live)configure# show
  6. 提交您的變更:

    crm(live)configure# commit

若要設定對資源或條件約束的存取權限,也可以依照第 12.3.2 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。

13 網路裝置結合

對於許多系統而言,實作的網路連接除了需要符合一般乙太網路裝置的標準資料安全性或可用性要求之外,還需要符合其他要求。在這些情況下,數個乙太網路裝置可以結集成單個結合裝置。

結合裝置的組態是透過結合模組選項來設定,而其行為由結合裝置的模式決定。該模式預設為 mode=active-backup,這表示如果使用中的從屬裝置失敗,另一個從屬裝置將變成使用中狀態。

使用 Corosync 時,結合裝置無法透過叢集軟體管理。因此,必須在可能需要存取結合裝置的每個叢集節點上設定該裝置。

13.1 使用 YaST 設定結合裝置

若要設定結合裝置,您需要有多個可結集至單個結合裝置的乙太網路裝置。請執行下列步驟:

  1. root 身分啟動 YaST,然後選取系統 › 網路設定

  2. 網路設定中,切換至綜覽索引標籤,其中會顯示可用的裝置。

  3. 檢查要結集至結合裝置的乙太網路裝置是否已經指定了 IP 位址。如果已指定,請加以變更:

    1. 選取要變更的裝置,然後按一下編輯

    2. 在開啟的網路卡設定對話方塊的位址索引標籤中,選中沒有連結和 IP 設定 (結合從屬)選項。

      Image
    3. 下一步回到網路設定對話方塊中的綜覽索引標籤。

  4. 若要新增新的結合裝置:

    1. 按一下新增,然後將裝置類型設為Bond。按下一步繼續。

    2. 選取為結合裝置指定 IP 位址的方法。有三種方法可供您選擇:

      • 沒有連結和 IP 設定 (結合從屬)

      • 動態位址 (透過 DHCP 或 Zeroconf)

      • 靜態指定的 IP 位址

      請使用適合您環境的方法。如果是由 Corosync 管理虛擬 IP 位址,請選取靜態指定的 IP 位址,然後為介面指定一個 IP 位址。

    3. 切換到Bond 從屬索引標籤。

    4. 它會顯示已在步驟 3.b 中設定為結合從屬的所有乙太網路裝置。若要選取您想包含到結合中的乙太網路裝置,請在結合從屬和順序下方啟用相應裝置前面的核取方塊。

      Image
    5. 編輯Bond 驅動程式選項。可用模式如下:

      balance-rr

      提供負載平衡和容錯,但會使封包傳輸變得混亂無序。這可能會導致 TCP 重新組合等操作出現延遲。

      active-backup

      提供容錯。

      balance-xor

      提供負載平衡和容錯。

      broadcast

      提供容錯。

      802.3ad

      提供動態連結聚總 (若連接的交換器支援)。

      balance-tlb

      提供外送流量的負載平衡。

      balance-alb

      提供內送和外送流量的負載平衡 (若所用的網路裝置允許修改使用中網路裝置的硬體位址)。

    6. 請務必將參數 miimon=100 新增至Bond 驅動程式選項。如果不指定此參數,則不會定期檢查連結,因此,結合驅動程式可能會持續在有故障的連結上遺失封包。

  5. 下一步,然後按確定離開 YaST,以完成結合裝置設定。YaST 會將組態寫入 /etc/sysconfig/network/ifcfg-bond裝置編號

13.2 結合從屬的熱插拔

有時,需要用一個結合從屬介面取代另一個介面,比如說當相應網路裝置老是發生故障的時候。解決方案是設定熱插拔結合從屬。此外,還需要變更 udev 規則,以便依匯流排 ID 而不是 MAC 位址比對裝置。這樣,如果有缺陷的硬體 (位於相同插槽中但是具有不同 MAC 位址的網路卡) 允許更換的話,您便可以更換該硬體。

程序 13.1︰ 使用 YaST 設定結合從屬的熱插拔

如果您偏好手動設定,請參閱《SUSE Linux Enterprise High Availability Extension 管理指南》的「基本網路功能」一章中的「結合從屬的熱插拔」一節。

  1. root 身分啟動 YaST,然後選取系統 › 網路設定

  2. 網路設定中,切換至綜覽索引標籤,其中會顯示已設定的裝置。如果結合從屬已設定,備註欄中會指出該情況。

    Image
  3. 針對已結集到結合從屬的每個乙太網路裝置,執行以下步驟:

    1. 選取要變更的裝置,然後按一下編輯網路卡設定對話方塊即會開啟。

    2. 切換至一般索引標籤,並確定啟動裝置設為熱插拔時

    3. 切換至硬體索引標籤。

    4. 針對Udev 規則按一下變更,然後選取匯流排 ID選項。

    5. 按一下確定下一步,回到網路設定對話方塊中的綜覽索引標籤。如果您現在按一下乙太網路裝置項目,下方窗格將會顯示裝置的詳細資料,其中包括匯流排 ID。

  4. 按一下確定確認您的變更並離開網路設定。

開機時,網路設定雖然不會等待 hotplug 從屬裝置就緒,但會等待結合就緒,而後者至少需要一個可用的從屬裝置。當從系統中移除其中一個從屬介面 (從 NIC 驅動程式解除結合、rmmod NIC 驅動程式或實際移除 PCI 熱插拔) 時,核心會自動將它從 Bond 中移除。當將新卡新增至系統 (更換插槽中的硬體) 時,udev 會套用基於匯流排的永久命名規則將其重新命名,然後為它呼叫 ifupifup 呼叫會自動將它加入 Bond。

13.3 更多資訊

Linux Ethernet Bonding Driver HOWTO》(Linux 乙太網路結合驅動程式 HOWTO) 中詳細說明了所有模式及眾多選項。安裝 kernel-source 套件後,便可在 /usr/src/linux/Documentation/networking/bonding.txt 下找到該檔案。

對於高可用性設定,本指南所述的以下選項特別重要:miimonuse_carrier

14 負載平衡

負載平衡的情況下,一個伺服器叢集對於外部用戶端而言就是一台大型的高速伺服器。這種表面上的單個伺服器稱為虛擬伺服器。它包含一或多個用於發送內送要求的負載平衡器,以及數個執行實際服務的真實伺服器。對 High Availability Extension 完成負載平衡設定後,您可以建置擴充性強、可用性高的網路服務,例如 Web、快取、郵件、FTP、媒體和 VoIP 服務。

14.1 概念綜覽

High Availability Extension 支援兩種負載平衡技術:Linux 虛擬伺服器 (LVS) 和 HAProxy。兩者的主要差別在於,Linux 虛擬伺服器在 OSI 第 4 層 (傳輸層) 上運作,可設定核心的網路層,而 HAProxy 在第 7 層 (應用程式層) 上的使用者空間中執行。因此,Linux 虛擬伺服器所需的資源更少,但處理的負載更多,而 HAProxy 可以檢查流量,執行 SSL 終止,以及根據流量內容做出分派決策。

另一方面,Linux 虛擬伺服器包含兩個不同的軟體:IPVS (IP 虛擬伺服器) 和 KTCPVS (核心 TCP 虛擬伺服器)。IPVS 提供第 4 層負載平衡,而 KTCPVS 提供第 7 層負載平衡。

本章會提供負載平衡與高可用性結合使用的概念綜覽,然後簡要介紹 Linux 虛擬伺服器和 HAProxy。最後,提供其他閱讀材料的連結。

實際的伺服器與負載平衡器之間可透過高速 LAN 或地理位置分散的 WAN 來連接。負載平衡器會將要求發送到不同的伺服器。它們可以讓叢集的多個平行服務顯示為單一 IP 位址 (虛擬 IP 位址或 VIP) 上的一個虛擬服務。發送請求可以使用 IP 負載平衡技術或應用程式層級的負載平衡技術。以透明方式在叢集中新增或移除節點可以實現系統的延展性。

高可用性透過偵測節點或服務失敗,並相應地照常重新設定整個虛擬伺服器系統來實現。

負載平衡策略有多種。以下是一些適用於 Linux 虛擬伺服器的第 4 層策略:

  • 遞迴: 最簡單的策略就是將每個連接輪流導向至不同的位址。例如,一個 DNS 伺服器可能有多個項目對應於一個指定主機名稱。使用 DNS 遞迴時,該 DNS 伺服器會輪流傳回所有這些項目。因此,不同的用戶端將會看到不同的位址。

  • 選取最佳伺服器: 雖然此策略存在一些弊端,但您可以使用第一台做出回應的伺服器負載最低的伺服器方案來實現平衡。

  • 平衡每台伺服器的連接數: 使用者與伺服器之間的負載平衡器可以將一定數量的使用者分散到多台伺服器上。

  • Geo 位置: 可以將用戶端導向至附近的伺服器。

以下是一些適用於 HAProxy 的第 7 層策略:

  • URI: 檢查 HTTP 內容並將其發送到最適合此特定 URL 的伺服器。

  • URL 參數、RDP Cookie: 檢查 HTTP 內容中的工作階段參數 (可能在 post 參數中) 或 RDP (遠端桌面通訊協定) 工作階段 cookie,並將其發送到為此工作階段提供服務的伺服器。

儘管與前一種策略存在一些相同之處,但如果 LVS/ipvsadm 無法滿足需要,您可以使用 HAProxy,反之亦然:

  • SSL 終止: 前端負載平衡器可以處理 SSL 層。因此,雲端節點不需要存取 SSL 金鑰,而可以利用負載平衡器中的 SSL 加速器。

  • 應用程式層級: HAProxy 在應用程式層級運作,因此,負載平衡決策受內容資料流的影響。這樣,便可以根據 cookie 和其他此類過濾器實現持久性。

另一方面,HAProxy 不能完全取代 LVS/ipvsadm

  • LVS 支援直接路由,在此模式下,負載平衡器只運作於內傳資料流中,而外傳流量將直接路由至用戶端。在非對稱環境中,這有可能會大幅提高輸送量。

  • LVS 支援複製可設定狀態的連接表 (透過 conntrackd)。如此便能實現對用戶端和伺服器透明的負載平衡器容錯移轉。

14.2 使用 Linux 虛擬伺服器設定負載平衡

以下幾節概要介紹了主要的 LVS 元件和概念。然後,將介紹如何在 High Availability Extension 上設定 Linux 虛擬伺服器。

14.2.1 導向器

LVS 的主要元件是 ip_vs (或 IPVS) 核心代碼。它是預設核心的一部分,在 Linux 核心中實作輸送層負載平衡 (第 4 層交換)。執行包含 IPVS 代碼的 Linux 核心的節點稱為導向器。在導向器上執行的 IPVS 代碼是 LVS 的必要特性。

當用戶端連接到導向器時,內送請求會在所有叢集節點上達到負載平衡:導向器會使用可使 LVS 工作的一組修改後路由規則,將封包轉遞到實際的伺服器。也即是,導向器不會發起或終止連接,也不會傳送確認通知等等。導向器的作用相當於專用路由器,它會將來自終端使用者的封包轉遞到實際的伺服器 (執行負責處理要求之應用程式的主機)。

14.2.2 使用者空間控制器和精靈

ldirectord 精靈是一個使用者空間精靈,可在 LVS 負載平衡虛擬伺服器叢集中管理 Linux 虛擬伺服器並監控實際的伺服器。組態檔案 (見下文) 指定虛擬服務及其關聯的實際伺服器,並告知 ldirecord 如何將伺服器設定為 LVS 重新導向器。啟始化精靈時,會為叢集建立虛擬服務。

ldirectord 精靈透過不時發出已知 URL 請求並檢查回應的方式,監控實際伺服器的狀態。如果實際伺服器出現故障,便會從負載平衡器的可用伺服器清單中移除。當服務監控器偵測到該停止的伺服器已恢復正常並可重新運作時,會重新將該伺服器新增到可用伺服器清單中。可以指定一台錯誤回復伺服器 (讓 Web 服務重新導向到該伺服器),以防所有實際伺服器都當機。錯誤回復伺服器通常是本地主機,它會顯示一個緊急頁面,告知 Web 服務暫時不可用。

ldirectord 使用 ipvsadm 工具 (套件 ipvsadm) 來操作 Linux 核心中的虛擬伺服器表。

14.2.3 封包轉遞

導向器將用戶端封包傳送至實際伺服器的方式有三種:

網址轉譯 (NAT)

內送的要求會送達虛擬的 IP 位址,然後透過將目的地 IP 位址和連接埠變更為所選實際伺服器的 IP 位址和連接埠,將這些要求轉遞至實際伺服器。實際伺服器會將回應傳送至負載平衡器,再由負載平衡器變更目的地 IP 位址,並將回應轉遞回用戶端。因此,終端使用者會從預期的來源收到回覆。由於所有流量都會通過負載平衡器,因此它往往成為叢集的瓶頸。

IP 通道封裝 (IP-IP 封裝)

IP 通道封裝能將定址到某 IP 位址的封包重新導向至另一個位址 (可能位於不同的網路)。LVS 透過 IP 通道將請求傳送至實際的伺服器 (重新導向至不同的 IP 位址),然後實際伺服器使用自己的路由表直接回覆用戶端。叢集成員可以位於不同的子網路。

直接路由

直接將終端使用者的封包轉遞到實際的伺服器。IP 封包並未修改,因此必須將實際伺服器設定為接受送往虛擬伺服器 IP 位址的流量。實際伺服器的回應將直接傳送至用戶端。實際伺服器和負載平衡器需位於相同的實體網路節區。

14.2.4 排程演算法

使用哪一部實際伺服器來處理用戶端請求的新連接,是由不同的演算法決定的。這些演算法以模組的形式提供,可根據特定需求進行調整。如需可用模組的綜覽,請參閱 ipvsadm(8) man 頁面。從用戶端接收到連接請求後,導向器會依據排程為該用戶端指定實際的伺服器。排程器是 IPVS 核心代碼的一部分,用於決定哪一部實際伺服器將獲取下一個新連接。

如需 Linux 虛擬伺服器排程演算法的更詳細描述,請造訪 http://kb.linuxvirtualserver.org/wiki/IPVS。此外,還可以在 ipvsadm man 頁面中搜尋 --scheduler

可以在 http://www.haproxy.org/download/1.6/doc/configuration.txt 上找到 HAProxy 的相關負載平衡策略。

14.2.5 使用 YaST 設定 IP 負載平衡

您可以使用 YaST IP 負載平衡模組設定基於核心的 IP 負載平衡。這是 ldirectord 的前端。

若要存取 IP 負載平衡對話方塊,請以 root 身分啟動 YaST,然後選取高可用性 ›  IP 負載平衡。或者在指令行上使用 yast2 iplbroot 身分啟動 YaST 叢集模組。

預設安裝不包括組態檔案 /etc/ha.d/ldirectord.cf。此檔案由 YaST 模組建立。YaST 模組中可用的索引標籤與 /etc/ha.d/ldirectord.cf 組態檔案的結構對應,用於定義全域選項和虛擬服務的選項。

如需組態以及所產生之負載平衡器與實際伺服器間程序的範例,請參閱範例 14.1 「簡單的 ldirectord 組態」

注意
注意:全域參數和虛擬伺服器參數

如果同時在虛擬伺服器區段和全域區段指定了某個參數,則虛擬伺服器區段中定義的值將覆寫全域區段中定義的值。

程序 14.1︰ 設定全域參數

以下程序介紹如何設定最重要的全域參數。如需個別參數和此處未涉及之參數的詳細資料,請按一下說明或參閱 ldirectord man 頁面。

  1. 使用檢查間隔時間定義 ldirectord 連接各個實際伺服器以檢查它們是否連接的時間間隔。

  2. 使用檢查逾時設定實際伺服器應在上次檢查後的多少時間內給於回應。

  3. 使用失敗計數可以定義當 ldirectord 嘗試向實際伺服器發出多少次要求後即判定檢查失敗。

  4. 使用協議逾時可以定義協議檢查的逾時時間 (秒)。

  5. 錯誤回復中,輸入當所有實際伺服器都當機時,Web 服務重新導向到之 Web 伺服器的主機名稱或 IP 位址。

  6. 如果希望系統在與實際伺服器的連接狀態發生變更時傳送警示,請在電子郵件警示中輸入有效的電子郵件地址。

  7. 使用電子郵件警示頻率可以定義當實際伺服器長時間無法存取時,重新傳送電子郵件警示的間隔時間 (秒)。

  8. 電子郵件警示狀態中,指定出現哪種伺服器狀態時傳送電子郵件警示。如果要定義多種狀態,可以逗號分隔。

  9. 使用自動重新載入定義 ldirectord 是否應持續監控組態檔案的修改情況。如果設定為,便會在變更後自動重新載入組態。

  10. 使用 Quiescent 參數定義是否要從核心的 LVS 表格中移除發生故障的實際伺服器。如果設定為,則不會移除出現故障的伺服器。而是將其權值設為 0,表示不接受任何新的連接。已建立的連接將保持,直到逾時。

  11. 如果要使用不同的路徑來記錄,請在記錄檔案中指定記錄的路徑。依預設,ldirectord 會將其記錄檔案寫入 /var/log/ldirectord.log

YaST IP 負載平衡 — 全域參數
圖 14.1︰ YaST IP 負載平衡 — 全域參數
程序 14.2︰ 設定虛擬服務

您可以透過為各項虛擬服務定義一對參數的方式設定一或多個虛擬服務。以下程序介紹如何為虛擬服務設定最重要的全域參數。如需個別參數和此處未涉及之參數的詳細資料,請按一下說明或參閱 ldirectord man 頁面。

  1. 在 YaST IP 負載平衡模組中,切換至虛擬伺服器組態索引標籤。

  2. 新增新的虛擬伺服器,或編輯現有的虛擬伺服器。此時會出現一個新的對話方塊並顯示可用的選項。

  3. 虛擬伺服器中輸入以 LVS 形式存取負載平衡器和實際伺服器時所使用的共享虛擬 IP 位址 (IPv4 或 IPv6) 及連接埠。也可以指定主機名稱和服務來代替 IP 位址和連接埠號。或者,也可以使用防火牆標記。防火牆標記是將任意一組 VIP:連接埠服務集結到一個虛擬服務的一種方式。

  4. 若要指定實際伺服器,需要輸入伺服器的 IP 位址 (IPv4、IPv6 或主機名稱)、連接埠 (或服務名稱) 及轉遞方式。轉遞方式必須是 gateipipmasq,詳情請參閱第 14.2.3 節 「封包轉遞」

    按一下新增按鈕並輸入各個實際伺服器所需的引數。

  5. 檢查類型中,選取測試實際伺服器是否仍在工作時執行的檢查類型。例如,若要傳送請求並檢查回應中是否包含預期字串,請選取「協議」。

  6. 如果檢查類型已設定為「協議」,則還需要定義要監控之服務的類型。從服務下拉式方塊中選取所需的服務類型。

  7. 請求中輸入檢查間隔期間向每部實際伺服器所請求之物件的 URI。

  8. 如果要檢查實際伺服器的回應中是否包含某個字串 (I'm alive訊息),請定義要比對的正規表示式。在接收中輸入正規表示式。如果實際伺服器的回應中包含此表示式,說明此實際伺服器正在運行。

  9. 根據您在步驟 6 中選取的服務類型,您還需要指定其他參數以進行驗證。切換至驗證類型索引標籤,然後輸入登入名稱密碼資料庫秘密等詳細資料。如需詳細資訊,請參閱 YaST 說明文字或 ldirectord man 頁面。

  10. 切換至其他索引標籤。

  11. 選取用於負載平衡的規劃程式。如需可用之規劃程式的相關資訊,請參閱 ipvsadm(8) man 頁面。

  12. 選取要使用的協定。如果虛擬服務指定為 IP 位址和連接埠,則必須是 tcpudp 協定。如果虛擬服務指定為防火牆標記,則必須是 fwm 協定。

  13. 根據需要定義其他參數。按一下確定確認您的組態。YaST 會將此組態寫入 /etc/ha.d/ldirectord.cf

YaST IP 負載平衡 — 虛擬服務
圖 14.2︰ YaST IP 負載平衡 — 虛擬服務
範例 14.1︰ 簡單的 ldirectord 組態

圖形 14.1 「YaST IP 負載平衡 — 全域參數」圖形 14.2 「YaST IP 負載平衡 — 虛擬服務」 中的顯示的值會產生以下組態 (定義於 /etc/ha.d/ldirectord.cf):

autoreload = yes 1
    checkinterval = 5 2
    checktimeout = 3 3
    quiescent = yes 4
    virtual = 192.168.0.200:80 5
    checktype = negotiate 6
    fallback = 127.0.0.1:80 7
    protocol = tcp 8
    real = 192.168.0.110:80 gate 9
    real = 192.168.0.120:80 gate 9
    receive = "still alive" 10
    request = "test.html" 11
    scheduler = wlc 12
    service = http 13

1

定義 ldirectord 應持續檢查組態檔案的修改情況。

2

ldirectord 連接各個實際伺服器以檢查它們是否連接的時間間隔。

3

自上次檢查後,實際伺服器應做出回應的時間。

4

指定不要將發生故障的實際伺服器從核心的 LVS 表格中移除,但將其權值設為 0

5

LVS 的虛擬 IP 位址 (VIP)。LVS 可使用連接埠 80 進行連接。

6

為測試實際伺服器是否仍在工作而執行的檢查類型。

7

所有實際伺服器都當機時,將 Web 服務重新導向到的伺服器。

8

要使用的協定。

9

兩個已定義的實際伺服器,可使用連接埠 80 連接。封包轉遞方式是 gate,表示使用直接路由。

10

要在實際伺服器之回應字串中比對的正規表示式。

11

檢查間隔期間向每部實際伺服器所請求之物件的 URI。

12

所選的用於負載平衡的規劃程式。

13

要監控的服務類型。

此組態會產生以下程序流:ldirectord 將每隔 5 秒 (2) 連接一次各個實際伺服器,並請求911 中指定的 192.168.0.110:80/test.html192.168.0.120:80/test.html。如果最後一次檢查時,3 秒內 (3) 未從某部實際伺服器收到預期的 still alive 字串 (10),則會將該實際伺服器從可用池中移除。但是,由於設定了 quiescent=yes (4),因此該實際伺服器不會從 LVS 表中移除。其權數會設定為 0,這樣便不會接受與此實際伺服器的新連接。已建立的連接將保持,直到逾時。

14.2.6 更多設定

除了需要使用 YaST 設定 ldirectord 組態之外,您還需要確定以下條件均已符合才能完成 LVS 的設定:

  • 已正確設定實際伺服器以提供所需的服務。

  • 一或多個負載平衡伺服器必須能夠採用 IP 轉遞方式將流量路由到實際伺服器。實際伺服器的網路組態取決於您選擇的封包轉遞方法。

  • 為了防止一或多個負載平衡伺服器成為整個系統的單一故障點,需要設定一或多個負載平衡器的備份。在叢集組態中,設定 ldirectord 的基本資源,這樣在出現硬體故障時,ldirectord 便可容錯移轉到其他伺服器。

  • 由於負載平衡器的備份也需要 ldirectord 組態檔案來完成此任務,因此請確定要用做負載平衡器之備份的所有伺服器上,/etc/ha.d/ldirectord.cf 均可用。您可以依照第 4.5 節 「將組態傳輸至所有節點」 所述使用 Csync2 同步組態檔案。

14.3 使用 HAProxy 設定負載平衡

下面的部分提供了 HAProxy 的綜覽,並介紹了如何在 High Availability 上進行設定。負載平衡器會將所有要求配送至其後端伺服器。它設定為主動/被動模式,也就是說,當主要節點失敗時,從屬節點就會變成主要節點。在這種情況下,使用者感受不到任何服務中斷的跡象。

在本節中,我們將使用以下設定:

  • IP 位址為 192.168.1.99 的負載平衡器。

  • 一個虛擬浮動 IP 位址 192.168.1.99.

  • 我們的伺服器 (通常用於代管 Web 內容) www1.example.com (IP:192.168.1.200) 和 www2.example.com (IP:192.168.1.201)

若要設定 HAProxy,請執行以下程序:

  1. 安裝 haproxy 套件中可用。

  2. 建立包含以下內容的 /etc/haproxy/haproxy.cfg 檔案:

    global 1
      maxconn 256
      daemon
    
    defaults 2
      log     global
      mode    http
      option  httplog
      option  dontlognull
      retries 3
      option redispatch
      maxconn 2000
      timeout connect   5000  3
      timeout client    50s   4
      timeout server    50000 5
    
    frontend LB
      bind 192.168.1.99:80 6
      reqadd X-Forwarded-Proto:\ http
      default_backend LB
    
    backend LB
      mode http
      stats enable
      stats hide-version
      stats uri /stats
      stats realm Haproxy\ Statistics
      stats auth haproxy:password	7
      balance roundrobin	8
      option  httpclose
      option forwardfor
      cookie LB insert
      option httpchk GET /robots.txt HTTP/1.0
      server web1-srv 192.168.1.200:80 cookie web1-srv check
      server web2-srv 192.168.1.201:80 cookie web2-srv check

    1

    包含程序範圍選項和作業系統特定選項的區段。

    maxconn

    每個程序的最大同時連接數。

    daemon

    建議的模式,HAProxy 將在背景中執行。

    2

    用於為位於其宣告之後的所有其他區段設定預設參數的區段。一些重要的行:

    redispatch

    啟用或停用在連接失敗時重新配送工作階段的功能。

    log

    啟用事件和流量記錄。

    mode http

    以 HTTP 模式運作 (針對 HAProxy 建議的模式)。在此模式下,在連接到任一伺服器之前會先分析要求。不符合 RFC 的要求將會遭到拒絕。

    option forwardfor

    將 HTTP X-Forwarded-For 標頭新增至要求中。如果您想要保留用戶端的 IP 位址,則需要使用此選項。

    3

    成功嘗試與伺服器建立連接之前可以等待的最長時間。

    4

    用戶端可保持非活動狀態的最長時間。

    5

    伺服器端可保持非活動狀態的最長時間。

    6

    在該區段中,前端區段和後端區段合併成一個區段。

    balance leastconn

    定義負載平衡演算法,請參閱 http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-balance

    stats enable , stats auth

    啟用統計報告 (透過 stats enable)。auth 選項記錄有關特定帳戶的驗證的統計資料。

    7

    HAProxy 統計資料報告頁面的身分證明。

    8

    負載平衡將採用輪替式程序運作。

  3. 測試組態檔案:

    root # haproxy -f /etc/haproxy/haproxy.cfg -c
  4. 將以下行新增至 Csync2 的組態檔案 /etc/csync2/csync2.cfg 中,以確定包括 HAProxy 組態檔案:

    include /etc/haproxy/haproxy.cfg
  5. 同步該檔案:

    root # csync2 -f /etc/haproxy/haproxy.cfg
    root # csync2 -xv
    注意
    注意

    Csync2 組態部分假設 HA 節點是使用 ha-cluster-bootstrap 設定的。如需詳細資料,請參閱《安裝與設定快速入門》。

  6. 務必在兩個負載平衡器 (alicebob) 上都停用 HAProxy,因為它會由 Pacemaker 啟動:

    root # systemctl disable haproxy
  7. 設定新的 CIB:

    root # crm configure
    crm(live)# cib new haproxy-config
    crm(haproxy-config)# primitive haproxy systemd:haproxy \
        op start timeout=120 interval=0 \
        op stop timeout=120 interval=0 \
        op monitor timeout=100 interval=5s \
        meta target-role=Started
    crm(haproxy-config)# primitive vip IPaddr2 \
        params ip=192.168.1.99 nic=eth0 cidr_netmask=23 broadcast=192.168.1.255 \
        op monitor interval=5s timeout=120 on-fail=restart
    crm(haproxy-config)# group g-haproxy vip haproxy
  8. 驗證新 CIB 並修正任何錯誤:

    crm(haproxy-config)# verify
  9. 提交新的 CIB:

    crm(haproxy-config)# cib use live
    crm(live)# cib commit haproxy-config

14.4 更多資訊

15 Geo 叢集 (多站點叢集)

除本地叢集和城際叢集外,SUSE® Linux Enterprise High Availability Extension 15 SP2 還支援地理位置分散的叢集 (Geo 叢集,有時稱為多站點叢集)。這意味著您可以有多個地理位置分散的站台,每個站台都有一個本地叢集。這些叢集之間的容錯移轉由一個更高階的實體來調節控制,即投票間。如需如何使用和設定 Geo 叢集的詳細資料,請參閱Article “Geo 叢集快速入門”Book “Geo Clustering Guide”

16 執行維護任務

若要在叢集節點上執行維護任務,您可能需要停止該節點上執行的資源、移動這些資源,或者將該節點關閉或重新開機。此外,可能還需要暫時接管叢集中資源的控制權,甚至需要在資源仍在執行時停止叢集服務。

本章介紹如何在不產生負面影響的情況下手動關閉叢集節點。此外,本章將會概述叢集堆疊提供的用於執行維護任務的不同選項。

16.1 關閉叢集節點所造成的影響

將某個叢集節點關閉或重新開機 (或停止節點上的 Pacemaker 服務) 時,會觸發以下程序:

  • 該節點上執行的資源將會停止,或移出該節點。

  • 如果停止資源的操作失敗或逾時,STONITH 機制將會圍籬區隔該節點,並將其關閉。

程序 16.1︰ 手動將叢集節點重新開機

如果您的目的是先循序將服務移出節點,然後再將該節點關閉或重新開機,請執行以下操作:

  1. 在要重新開機或關閉的節點上,以 root 或同等身分登入。

  2. 將節點置於 standby 模式:

    root # crm -w node standby

    如此即可將服務移轉出節點,而不會受限於 Pacemaker 的關閉逾時。

  3. 使用以下指令檢查叢集狀態:

    root # crm status

    此指令顯示相關節點處於 standby 模式:

    [...]
    Node bob: standby
    [...]
  4. 停止該節點上的 Pacemaker 服務:

    root # crm cluster stop
  5. 將節點重新開機。

若要再次檢查節點是否已加入叢集,請執行以下步驟:

  1. root 或同等身分登入該節點。

  2. 檢查 Pacemaker 服務是否已啟動:

    root # crm cluster status
  3. 如果未啟動,請將其啟動:

    root # crm cluster start
  4. 使用以下指令檢查叢集狀態:

    root # crm status

    此指令應該會顯示節點已恢復線上狀態。

16.2 用於維護任務的不同選項

Pacemaker 提供了用於執行系統維護的各種選項:

將叢集置於維護模式

使用全域叢集內容 maintenance-mode 可以一次性將所有資源置於維護狀態。叢集將停止監控這些資源,因此不知道它們的狀態。

將節點置於維護模式

此選項可以一次性將特定節點上執行的所有資源置於維護狀態。叢集將停止監控這些資源,因此不知道它們的狀態。

將節點置於待命模式

處於待命模式的節點不再能夠執行資源。該節點上執行的所有資源將會移出或停止 (如果沒有其他節點可用於執行資源)。另外,該節點上的所有監控操作將會停止 (設定為 role="Stopped" 的操作除外)。

如果您需要停止叢集中的某個節點,同時繼續提供另一個節點上執行的服務,則可以使用此選項。

將資源置於維護模式

為某個資源啟用此模式後,將不會針對該資源觸發監控操作。

如果您需要手動調整此資源所管理的服務,並且不希望叢集在此期間對該資源執行任何監控操作,則可以使用此選項。

將資源置於不受管理模式

使用 is-managed 中繼屬性可以暫時釋放某個資源,使其不受叢集堆疊的管理。這表示您可以手動調整此資源管理的服務 (例如,調整任何元件)。不過,叢集將繼續監控該資源,並繼續報告任何錯誤。

如果您希望叢集同時停止監控該資源,請改為使用依資源維護模式 (請參閱將資源置於維護模式)。

16.3 準備和完成維護工作

警告
警告:資料遺失的風險

如果您需要執行測試或維護工作,請執行下面的一般步驟。

如果不執行,有可能會產生不利的負面影響,例如,資源不循序啟動、CIB 在叢集節點之間不同步,甚至遺失資料。

  1. 在開始之前,請選擇第 16.2 節中所述適合您情況的選項。

  2. 請使用 Hawk2 或 crmsh 套用此選項。

  3. 執行維護任務或測試。

  4. 完成後,請將資源、節點或叢集恢復正常運作。

16.4 將叢集置於維護模式

若要在 crm 外圍程序中將叢集置於維護模式,請使用以下指令:

root # crm configure property maintenance-mode=true

若要在完成維護工作後將叢集恢復正常模式,請使用以下指令:

root # crm configure property maintenance-mode=false
程序 16.2︰ 使用 Hawk2 將叢集置於維護模式
  1. 啟動網頁瀏覽器並依第 7.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集組態

  3. CRM 組態群組中,從空白下拉式方塊中選取 maintenance-mode 屬性,然後按一下加號圖示新增該屬性。

  4. 若要設定 maintenance-mode=true,請啟用 maintenance-mode 旁邊的核取方塊,並確認您所做的變更。

  5. 完成針對整個叢集的維護任務後,停用 maintenance-mode 屬性旁邊的核取方塊。

    從此刻起,High Availability Extension 會再次接管叢集管理工作。

16.5 將節點置於維護模式

若要在 crm 外圍程序中將節點置於維護模式,請使用以下指令:

root # crm node maintenance NODENAME

若要在完成維護工作後將節點恢復正常模式,請使用以下指令:

root # crm node ready NODENAME
程序 16.3︰ 使用 Hawk2 將節點置於維護模式
  1. 啟動網頁瀏覽器並依第 7.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集狀態

  3. 在其中一個節點檢視窗中,按一下節點旁邊的扳手圖示,然後選取維護

  4. 完成維護任務後,按一下節點旁邊的扳手圖示,然後選取就緒

16.6 將節點置於待命模式

若要在 crm 外圍程序中將節點置於待命模式,請使用以下指令:

root # crm node standby NODENAME

若要在完成維護工作後將節點恢復線上狀態,請使用以下指令:

root # crm node online NODENAME
程序 16.4︰ 使用 Hawk2 將節點置於待命模式
  1. 啟動網頁瀏覽器並依第 7.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集狀態

  3. 在其中一個節點的檢視中,按一下節點旁邊的扳手圖示,然後選取待命

  4. 完成節點的維護任務。

  5. 若要停用待命模式,請按一下節點旁邊的扳手圖示,然後選取就緒

16.7 將資源置於維護模式

若要在 crm 外圍程序中將資源置於維護模式,請使用以下指令:

root # crm resource maintenance RESOURCE_ID true

若要在完成維護工作後將資源恢復正常模式,請使用以下指令:

root # crm resource maintenance RESOURCE_ID false
程序 16.5︰ 使用 Hawk2 將資源置於維護模式
  1. 啟動網頁瀏覽器並依第 7.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中,選取資源

  3. 選取要將其置於維護模式或不受管理模式的資源,然後按一下資源旁邊的扳手圖示並選取編輯資源

  4. 開啟中繼屬性類別。

  5. 從空白下拉式清單中,選取 maintenance 屬性並按一下加號圖示新增該屬性。

  6. 啟用 maintenance 旁邊的核取方塊,將 maintenance 屬性設定為 yes

  7. 確認您的變更。

  8. 完成針對該資源的維護任務後,停用該資源 maintenance 屬性旁邊的核取方塊。

    從此時起,資源將重新由 High Availability Extension 軟體管理。

16.8 將資源置於不受管理模式

若要在 crm 外圍程序中將資源置於不受管理模式,請使用以下指令:

root # crm resource unmanage RESOURCE_ID

若要在完成維護工作後再次將資源置於受管理模式,請使用以下指令:

root # crm resource manage RESOURCE_ID
程序 16.6︰ 使用 Hawk2 將資源置於不受管理模式
  1. 啟動網頁瀏覽器並依第 7.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取狀態,然後移至資源清單。

  3. 操作欄中,按一下要修改的資源旁邊的向下箭頭圖示,然後選取編輯

    資源組態螢幕隨即開啟。

  4. 中繼屬性下方,從空白下拉式方塊中選取 is-managed 項目。

  5. 將其值設定為 No,然後按一下套用

  6. 完成維護任務後,將 is-managed 設定為 Yes (預設值) 並套用變更。

    從此時起,資源將重新由 High Availability Extension 軟體管理。

16.9 在維護模式下將叢集節點重新開機

注意
注意:隱含式

如果叢集或某個節點處於維護模式,您可以視需要停止或重新啟動叢集資源 — High Availability Extension 不會嘗試將其重新啟動。如果您停止節點上的 Pacemaker 服務,所有精靈和程序 (最初做為 Pacemaker 管理的叢集資源啟動) 會繼續執行。

如果您在叢集或某個節點處於維護模式的情況下嘗試啟動該節點上的 Pacemaker 服務,Pacemaker 會針對每個資源啟動一次性的監控操作 (查探),以評估哪些資源目前正在該節點上執行。但是,它只會確定資源的狀態,而不執行進一步的動作。

若要在叢集或某個節點處於維護模式時關閉該節點,請執行以下操作:

  1. 在要重新開機或關閉的節點上,以 root 或同等身分登入。

  2. 如果您使用 DLM 資源 (或依存於 DLM 的其他資源),請確定在停止 Pacemaker 服務之前明確停止這些資源:

    crm(live)resource# stop RESOURCE_ID

    這是因為,停止 Pacemaker 也會停止 DLM 對其成員資格和訊息服務有依賴的 Corosync 服務。如果 Corosync 停止,DLM 資源將假設一種電腦分裂情況並觸發圍籬區隔操作。

  3. 停止該節點上的 Pacemaker 服務:

    root # crm cluster stop
  4. 將節點關閉或重新開機。

第 III 部分 儲存與資料複製

  • 17 分散式鎖定管理員 (DLM)
  • 核心中的分散式鎖定管理員 (DLM) 是 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 用於在每個相關層提供主動-主動儲存的基礎元件。

  • 18 OCFS2
  • Oracle Cluster File System 2 (OCFS2) 是一般性用途的日誌檔案系統,自 Linux 2.6 版起便已完全整合到該核心中。OCFS2 可讓您將應用程式二進位檔案、資料檔案和資料庫儲存於裝置上的共享儲存中。叢集中所有節點均同時具有檔案系統的讀取與寫入權限。透過複製品資源管理的使用者空間控制精靈可提供與 HA 堆疊的整合,特別是與 Corosync 和分散式鎖定管理員 (DLM) 的整合。

  • 19 GFS2
  • 全域檔案系統 2 (GFS2) 是適用於 Linux 電腦叢集的共享磁碟檔案系統。GFS2 允許所有節點同時直接存取同一個共享區塊儲存。GFS2 不提供斷線操作模式,也沒有用戶端角色或伺服器角色。GFS2 叢集中的所有節點以對等形式運作。GFS2 最多支援 32 個叢集節點。在叢集中使用 GFS2 需要透過硬體來存取共享儲存,並需要透過一個鎖定管理員來控制對儲存的存取。

    如果效能是您的主要考量之一,SUSE 建議為您的叢集環境使用 OCFS2,而不要使用 GFS2。我們的測試表明,與採用此類設定的 GFS2 相比,OCFS2 的表現更好。

  • 20 DRBD
  • 分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。

  • 21 叢集邏輯磁碟區管理員 (叢集 LVM)
  • 管理叢集上的共享儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Logical Volume Manager 2 (LVM2) 已進行延伸,現可支援對整個叢集中的磁碟區群組進行透明管理。在多個主機之間共享的磁碟區群組可使用與本地儲存相同的指令進行管理。

  • 22 叢集多裝置 (叢集 MD)
  • 叢集多裝置 (叢集 MD) 是一項基於軟體的叢集 RAID 儲存解決方案。目前,叢集 MD 為叢集提供了 RAID1 鏡像的備援。在 SUSE Linux Enterprise High Availability Extension 15 SP2 中,隨附了 RAID10 做為技術預覽。如果您想嘗試 RAID10,請在相關的 mdadm 指令中使用 10 取代 mirror。本章介紹如何建立和使用叢集 MD。

  • 23 Samba 叢集
  • 叢集化 Samba 伺服器為您的異質網路提供了高可用性解決方案。本章介紹了一些背景知識並說明如何設定叢集化 Samba 伺服器。

  • 24 使用 Rear (Relax-and-Recover) 進行災難備援
  • Relax-and-Recover (Rear,本章中縮寫為 Rear) 是供系統管理員使用的災難備援架構。Rear 是一個 Bash 程序檔集合,您需要依據要在發生災難時加以保護的特定線上環境調整這些程序檔。

    沒有任何災難備援解決方案能夠現成地解決問題。因此,必須在任何災難發生之前做好準備。

17 分散式鎖定管理員 (DLM)

核心中的分散式鎖定管理員 (DLM) 是 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 用於在每個相關層提供主動-主動儲存的基礎元件。

17.1 用於 DLM 通訊的通訊協定

為了避免單一故障點,非常有必要對高可用性叢集設定備援通訊路徑。對於 DLM 通訊也是如此。如果出於任何原因無法使用網路結合 (連結彙總控制通訊協定,LACP),則我們強烈建議在 Corosync 中定義備援通訊通道 (另一個環)。如需詳細資料,請參閱程序 4.3 「定義備援通訊通道」

然後,DLM 會根據 /etc/corosync/corosync.conf 中的組態,確定是要使用 TCP 還是 SCTP 通訊協定來進行通訊:

  • 如果 rrp_mode 設定為 none (表示停用備援環組態),則 DLM 會自動使用 TCP。但是,如果未定義備援通訊通道,在 TCP 連結中斷的情況下,DLM 通訊將會失敗。

  • 如果 rrp_mode 設定為 passive (一般會如此設定),並且在 /etc/corosync/corosync.conf 中正確設定了另一個通訊環,則 DLM 會自動使用 SCTP。在此情況下,DLM 訊息傳送會獲得 SCTP 提供的備援功能。

17.2 設定 DLM 叢集資源

DLM 使用 Pacemaker 提供的並在使用者空間中執行的叢集成員資格服務。因此,需要將 DLM 設定為叢集中每個節點上都存在的複製品資源。

注意
注意:多個解決方案的 DLM 資源

由於 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 全部都使用 DLM,因此為 DLM 設定一個資源便已足夠。由於 DLM 資源在叢集中的所有節點上執行,因此將其設定為複製品資源。

如果您的設定包含 OCFS2 和叢集 LVM,只需為 OCFS2 和叢集 LVM 設定一個 DLM 資源就足夠了。

程序 17.1︰ 設定 DLM 的基礎群組

該組態由一個包含數個基本資源的基礎群組與一個基礎複製品構成。之後,基礎群組和基礎複製品便可用於各種案例 (例如,用於 OCFS2 和叢集 LVM)。您只需根據需要新增相應的基本資源來延伸基礎群組。由於基礎群組有內部並存與順序條件約束,因此您不需要指定多個個別群組、複製品及其相依項,這使總體設定程序更為簡便。

對叢集中的某個節點執行以下步驟:

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 執行 crm configure

  3. 輸入以下指令以建立 DLM 的基本資源:

    crm(live)configure# primitive dlm ocf:pacemaker:controld \
      op monitor interval="60" timeout="60"
  4. 為 DLM 資源和其他儲存相關的資源建立一個基礎群組:

    crm(live)configure# group g-storage dlm
  5. 複製 g-storage 群組,以使其在所有節點上執行:

    crm(live)configure#  clone cl-storage g-storage \
      meta interleave=true target-role=Started
  6. 使用 show 檢閱所做的變更。

  7. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

注意
注意:停用 STONITH 失敗

系統不支援未啟用 STONITH 的叢集。如果您出於測試或疑難排解目的將全域叢集選項 stonith-enabled 設定為 false,則 DLM 資源以及依賴於它的所有服務 (例如叢集 LVM、GFS2 和 OCFS2) 將無法啟動。

18 OCFS2

Oracle Cluster File System 2 (OCFS2) 是一般性用途的日誌檔案系統,自 Linux 2.6 版起便已完全整合到該核心中。OCFS2 可讓您將應用程式二進位檔案、資料檔案和資料庫儲存於裝置上的共享儲存中。叢集中所有節點均同時具有檔案系統的讀取與寫入權限。透過複製品資源管理的使用者空間控制精靈可提供與 HA 堆疊的整合,特別是與 Corosync 和分散式鎖定管理員 (DLM) 的整合。

18.1 特點及優勢

OCFS2 可用於下列儲存解決方案,例如:

  • 一般應用程式與工作負載。

  • 叢集中的 Xen 影像儲存。Xen 虛擬機器與虛擬伺服器可以儲存到叢集伺服器掛接的 OCFS2 磁碟區。如此即可便捷地在伺服器之間實現 Xen 虛擬機器的可攜性。

  • LAMP (Linux、Apache、MySQL 和 PHP | Perl | Python) 堆疊。

做為一款高效能、對稱、平行的叢集檔案系統,OCFS2 支援下列功能:

  • 叢集上的所有節點均可使用應用程式的檔案。使用者只需在叢集上的 OCFS2 磁碟區安裝一次即可。

  • 所有節點可直接透過標準檔案系統介面同時讀取及寫入儲存,讓叢集上執行的應用程式更易於管理。

  • 檔案存取透過 DLM 來協調。在多數情況下,DLM 控制都能起到很好的效果,但如果應用程式設計與 DLM 爭奪檔案存取協調權,則擴充性可能就會受到限制。

  • 所有後端儲存均可使用儲存備份功能。您可輕鬆建立共享應用程式檔案的複本,以利於提供有效的災難復原。

OCFS2 亦提供下列功能:

  • 中繼資料快取。

  • 中繼資料日誌。

  • 跨節點資料檔案一致性。

  • 支援的多區塊最大大小為 4 KB,叢集最大大小為 1 MB,磁碟區最大大小為 4 PB (拍位元組)。

  • 最多支援 32 個叢集節點。

  • 支援對資料庫檔案進行非同步的直接 I/O 存取,以提升資料庫效能。

注意
注意:對 OCFS2 的支援

僅當與 SUSE Linux Enterprise High Availability Extension 所提供的 pcmk (Pacemaker) 堆疊搭配使用時,SUSE 才支援 OCFS2。與 o2cb 堆疊組合使用時,SUSE 不提供對 OCFS2 的支援。

18.2 OCFS2 套件與管理公用程式

OCFS2 核心模組 (ocfs2) 會自動安裝到 SUSE® Linux Enterprise Server 15 SP2 上的 High Availability Extension 中。若要使用 OCFS2,請確定在叢集中的每個節點上安裝您核心適用的以下套件: ocfs2-tools 及相符的 ocfs2-kmp-* 套件。

每則訊息前的 ocfs2-tools 套件提供下列用於管理 OFS2 磁碟區的公用程式。如需有關語法的資訊,請參閱其 man 頁面。

表 18.1︰ OCFS2 公用程式

OCFS2 公用程式

描述

debugfs.ocfs2

檢查 OCFS 檔案系統的狀態以進行除錯。

fsck.ocfs2

檢查檔案系統是否有錯誤,並選擇性修復錯誤。

mkfs.ocfs2

在裝置上建立 OCFS2 檔案系統,通常是共用實體或邏輯磁碟上的分割區。

mounted.ocfs2

偵測並列出叢集系統上的所有 OCFS2 磁碟區。偵測並列出掛接 OCFS2 裝置的系統上之所有節點,或列出所有 OCFS2 裝置。

tunefs.ocfs2

變更 OCFS2 檔案系統參數,包括磁碟區標籤、節點插槽數量、所有節點插槽的日至大小,以及磁碟區大小。

18.3 設定 OCFS2 服務和 STONITH 資源

建立 OCFS2 磁碟區之前,您必須先將 DLM 及 STONITH 資源設定為叢集中的服務。

下面的程序將使用 crm 外圍程序來設定叢集資源。或者,您也可以依第 18.6 節 「使用 Hawk 設定 OCFS2 資源2」所述,使用 Hawk2 來設定資源。

程序 18.1︰ 設定 STONITH 資源
注意
注意:需要 STONITH 裝置

您需要設定一部圍籬區隔裝置。如果沒有設定合適的 STONITH 機制 (如 external/sbd),組態將失敗。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 程序 11.3 「啟始化 SBD 裝置」 所述建立一個 SBD 分隔區。

  3. 執行 crm configure

  4. external/sbd 設定為圍籬區隔裝置,並且 /dev/sdb2 做為共享儲存上的專用分割區,用於活動訊號與圍籬區隔操作:

    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
      params pcmk_delay_max=30 meta target-role="Started"
  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

如需為 DLM 設定資源群組的詳細資料,請參閱程序 17.1 「設定 DLM 的基礎群組」

18.4 建立 OCFS2 磁碟區

依照第 18.3 節 「設定 OCFS2 服務和 STONITH 資源」所述設定 DLM 叢集資源後,將系統設定為使用 OCFS2,並建立 OCFs2 磁碟區。

注意
注意:應用程式與資料檔案使用的 OCFS2 磁碟區

一般情況下,建議您將應用程式檔案與資料檔案儲存在不同的 OCFS2 磁碟區中。如果您的應用程式磁碟區和資料磁碟區對於掛接有不同的要求,請務必將它們儲存到不同的磁碟區中。

開始之前,請先準備要用於 OCFS2 磁碟區的區塊裝置。將裝置留為可用空間。

然後按程序 18.2 「建立並格式化 OCFS2 磁碟區」 中所述,使用 mkfs.ocfs2 建立並格式化 OCFS2 磁碟區。此指令最重要的參數列於表格 18.2 「OCFS2 的重要參數」。如需詳細資訊及指令語法,請參閱 mkfs.ocfs2 man 頁面。

表 18.2︰ OCFS2 的重要參數

OCFS2 參數

描述與建議

磁碟區標籤 (-L)

磁碟區的描述性名稱可讓其掛接於不同節點時易於辨識。使用 tunefs.ocfs2 公用程式依需要修改標籤。

叢集大小 (-C)

叢集大小是配置給持有資料的檔案之空間最小單位。如需可用選項及建議,請參閱 mkfs.ocfs2 man 頁面。

節點插槽數量 (-N)

可同時掛接磁碟區的最大節點數量。OCFS2 會分別為每個節點建立系統檔案,例如日誌。存取磁碟區的節點可以是小 endian 架構 (如 AMD64/Intel 64) 和大 endian 架構 (如 S/390x) 的組合。

節點特定的檔案稱為本地檔案。節點插槽號碼會附加至本機檔案。例如,journal:0000 隸屬於指派至插槽 0 的任一節點。

建立磁碟區時,請根據您希望同時掛接磁碟區的節點數量,設定節點插槽的最大磁碟區數量。使用 tunefs.ocfs2 公用程式可以視需要增加節點數。請注意,此值只能增加,不能減少。

如果未指定 -N 參數,系統會根據檔案系統的大小確定插槽數。

區塊大小 (-b)

檔案系統可定址的空間最小單位。請在建立磁碟區時指定區塊大小。如需可用選項及建議,請參閱 mkfs.ocfs2 man 頁面。

開啟/關閉特定功能 (--fs-features)

可提供以逗號分隔的功能標籤清單,mkfs.ocfs2 會根據此清單嘗試建立具有這些功能集的檔案系統。若要開啟功能,請在清單中包含該功能。若要關閉功能,則在名稱前預增 no

如需所有可用標記的綜覽,請參閱 mkfs.ocfs2 man 頁面。

預定義功能 (--fs-feature-level)

可讓您從一組預定義檔案系統功能中進行選擇。如需可用選項,請參閱 mkfs.ocfs2 man 頁面。

使用 mkfs.ocfs2 建立並格式化磁碟區時,如果不指定任何功能,則預設會啟用下列功能:backup-supersparseinline-dataunwrittenmetaeccindexed-dirsxattr

程序 18.2︰ 建立並格式化 OCFS2 磁碟區

在其中個叢集節點上執行下列步驟。

  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 使用 mkfs.ocfs2 公用程式建立並格式化磁碟區。如需此指令的語法資訊,請參閱 mkfs.ocfs2 man 頁面。

    例如,若要在 /dev/sdb1 上建立最多支援 32 個叢集節點的新 OCFS2 檔案系統,請輸入以下指令:

    root #  mkfs.ocfs2 -N 32 /dev/sdb1

18.5 掛接 OCFS2 磁碟區

您可以按程序 18.4 「使用叢集資源管理員掛接 OCFS2 磁碟區」 中所述,手動或使用叢集管理員掛接 OCFS2 磁碟區。

程序 18.3︰ 手動掛接 OCFS2 磁碟區
  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 從指令行掛接磁碟區,請使用 mount 指令。

警告
警告:手動掛接的 OCFS2 裝置

如果您為了測試目的手動掛接了 OCFS2 檔案系統,則在開始將其做為叢集資源使用之前,務必要將其卸載恢復原狀。

程序 18.4︰ 使用叢集資源管理員掛接 OCFS2 磁碟區

若要使用 High Availability 軟體掛接 OCFS2 磁碟區,請在叢集中設定 ocfs2 檔案系統資源。下面的程序將使用 crm 外圍程序來設定叢集資源。或者,您也可以依第 18.6 節 「使用 Hawk 設定 OCFS2 資源2」所述,使用 Hawk2 來設定資源。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 執行 crm configure

  3. 設定 Pacemaker 以在叢集中的各節點上掛接 OCFS2 檔案系統:

    crm(live)configure# primitive ocfs2-1 ocf:heartbeat:Filesystem \
      params device="/dev/sdb1" directory="/mnt/shared" \
      fstype="ocfs2" options="acl" \
      op monitor interval="20" timeout="40" \
      op start timeout="60" op stop timeout="60" \
      meta target-role="Started"
  4. ocfs2-1 基本資源新增至您在程序 17.1 「設定 DLM 的基礎群組」中建立的 g-storage 群組。

    crm(live)configure# modgroup g-storage add ocfs2-1

    add 子指令預設會附加新的群組成員。鑒於基礎群組的內部並存與順序條件約束,Pacemaker 只會在其上也有 dlm 資源在執行的節點上啟動 ocfs2-1 資源。

  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

18.6 使用 Hawk 設定 OCFS2 資源2

除了使用 crm 外圍程序手動為 OCFS2 設定 DLM 和檔案系統資源以外,您還可以使用 Hawk2 設定精靈中的 OCFS2 範本。

重要
重要:手動設定與使用 Hawk2 的差別

設定精靈中的 OCFS2 範本包含 STONITH 資源的組態。如果使用該精靈,仍需在共享儲存上建立 SBD 分割區,並依照程序 18.1 「設定 STONITH 資源」所述設定一個 STONITH 資源。

使用 Hawk2 設定精靈中的 OCFS2 範本還會導致資源組態與程序 17.1 「設定 DLM 的基礎群組」程序 18.4 「使用叢集資源管理員掛接 OCFS2 磁碟區」中所述的手動組態略有不同。

程序 18.5︰ 使用 Hawk2 的精靈設定 OCFS2 資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取精靈

  3. 展開檔案系統類別,然後選取 OCFS2 檔案系統

  4. 按照螢幕上的指示執行操作。如需關於某個選項的資訊,按一下該選項即可在 Hawk2 中顯示簡要說明文字。在最後一個設定步驟之後,驗證所輸入的值。

    精靈會顯示將套用於 CIB 的組態代碼片段以及任何其他變更 (如果需要)。

    Image
  5. 檢查建議的變更。如果一切都符合您的預期,請套用變更。

    如果動作成功,螢幕上會顯示一則訊息。

18.7 在 OCFS2 檔案系統上使用定額

若要在 OCFS2 檔案系統上使用定額,請分別使用以下相應的定額功能或掛接選項來建立和掛接檔案系統:ursquota (個別使用者的定額) 或 grpquota (群組的定額)。您也可在以後使用 tunefs.ocfs2 在解下的檔案系統上啟用這些功能。

檔案系統啟用相應的定額功能後,將會在中繼資料中追蹤每個使用者 (或群組) 使用的空間量和檔案數量。由於 OCFS2 將定額資訊視為檔案系統內部的中繼資料,因此,您不需要執行 quotacheck(8) 程式。fsck.ocfs2 和檔案系統驅動程式自身中已內建所有功能。

若要對每個使用者或群組強制實施限制,請執行 quotaon(8),就像對其他任何檔案系統執行該指令一樣。

出於效能的考量,每個叢集每隔 10 秒會在本地執行一次定額計算,並將此資訊同步至通用中央儲存。您可以使用 tunefs.ocfs2、選項 usrquota-sync-intervalgrpquota-sync-interval 來調整此間隔。因此,定額資訊並非一直都是精確的,所以,當使用者或群組同時操作多個叢集節點時,可能會略微超出其定額限制。

18.8 更多資訊

如需有關 OCFS2 的詳細資訊,請參閱下列連結的內容:

https://ocfs2.wiki.kernel.org/

OCFS2 專案首頁。

http://oss.oracle.com/projects/ocfs2/

Oracle 上的原 OCFS2 專案首頁。

http://oss.oracle.com/projects/ocfs2/documentation

專案的原文件首頁。

19 GFS2

全域檔案系統 2 (GFS2) 是適用於 Linux 電腦叢集的共享磁碟檔案系統。GFS2 允許所有節點同時直接存取同一個共享區塊儲存。GFS2 不提供斷線操作模式,也沒有用戶端角色或伺服器角色。GFS2 叢集中的所有節點以對等形式運作。GFS2 最多支援 32 個叢集節點。在叢集中使用 GFS2 需要透過硬體來存取共享儲存,並需要透過一個鎖定管理員來控制對儲存的存取。

如果效能是您的主要考量之一,SUSE 建議為您的叢集環境使用 OCFS2,而不要使用 GFS2。我們的測試表明,與採用此類設定的 GFS2 相比,OCFS2 的表現更好。

19.1 GFS2 套件與管理公用程式

若要使用 GFS2,請確定在叢集的每個節點上安裝您核心適用的 gfs2-utils 套件和相符的 gfs2-kmp-* 套件。

每則訊息前的 gfs2-utils 套件提供下列用於管理 GFS2 磁碟區的公用程式。如需有關語法的資訊,請參閱其 man 頁面。

表 19.1︰ GFS2 公用程式

GFS2 公用程式

描述

fsck.gfs2

檢查檔案系統是否有錯誤,並選擇性修復錯誤。

gfs2_jadd

將更多記錄新增至 GFS2 檔案系統。

gfs2_grow

產生一個 GFS2 檔案系統。

mkfs.gfs2

在裝置上建立一個 GFS2 檔案系統,通常是一個共享裝置或分割區。

tunegfs2

用於檢視和控制 GFS2 檔案系統參數,例如 UUIDlabellockprotolocktable

19.2 設定 GFS2 服務和 STONITH 資源

在可以建立 GFS2 磁碟區之前,必須先設定 DLM 和 STONITH 資源。

程序 19.1︰ 設定 STONITH 資源
注意
注意:需要 STONITH 裝置

您需要設定一部圍籬區隔裝置。如果沒有設定合適的 STONITH 機制 (如 external/sbd),組態將失敗。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 程序 11.3 「啟始化 SBD 裝置」 所述建立一個 SBD 分隔區。

  3. 執行 crm configure

  4. external/sbd 設定為圍籬區隔裝置,並且 /dev/sdb2 做為共享儲存上的專用分割區,用於活動訊號與圍籬區隔操作:

    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
        params pcmk_delay_max=30 meta target-role="Started"
  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

如需為 DLM 設定資源群組的詳細資料,請參閱程序 17.1 「設定 DLM 的基礎群組」

19.3 建立 GFS2 磁碟區

依照第 19.2 節 「設定 GFS2 服務和 STONITH 資源」所述將 DLM 設定為叢集資源後,將系統設定為使用 GFS2,並建立 GFS2 磁碟區。

注意
注意:用於應用程式與資料檔案的 GFS2 磁碟區

一般情況下,建議您將應用程式檔案與資料檔案儲存在不同的 GFS2 磁碟區中。如果您的應用程式磁碟區和資料磁碟區對於掛接有不同的要求,請務必將它們儲存到不同的磁碟區中。

開始之前,請先準備您計劃用於 GFS2 磁碟區的區塊裝置。將裝置留為可用空間。

然後依照程序 19.2 「建立並格式化 GFS2 磁碟區」所述,使用 mkfs.gfs2 建立並格式化 GFS2 磁碟區。此指令最重要的參數列於表格 19.2 「GFS2 的重要參數」。如需詳細資訊及指令語法,請參閱 mkfs.gfs2 man 頁面。

表 19.2︰ GFS2 的重要參數

GFS2 參數

描述與建議

鎖定通訊協定名稱 (-p)

要使用的鎖定通訊協定的名稱。可接受的鎖定通訊協定包括 lock_dlm (用於共享儲存);如果您將 GFS2 用做本地檔案系統 (只有 1 個節點),則可以指定 lock_nolock 通訊協議。如果未指定此選項,將採用 lock_dlm 通訊協定。

鎖定表名稱 (-t)

對應於所用鎖定模組的鎖定表欄位。該欄位的格式為叢集名稱:檔案系統名稱叢集名稱必須與叢集組態檔案 /etc/corosync/corosync.conf 中的叢集名稱相符。只有此叢集的成員才允許使用此檔案系統。檔案系統名稱是唯一的檔案系統名稱 (1 到 16 個字元),用於將此 GFS2 檔案系統與建立的其他檔案系統區分開。

記錄數量 (-j)

要為 gfs2_mkfs 建立的記錄數量。將要掛接該檔案系統的每台機器至少需要有一個記錄。如果未指定此選項,系統會建立一個記錄。

程序 19.2︰ 建立並格式化 GFS2 磁碟區

在其中個叢集節點上執行下列步驟。

  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 使用 mkfs.gfs2 公用程式建立並格式化磁碟區。如需此指令語法的資訊,請參閱 mkfs.gfs2 man 頁面。

    例如,若要在 /dev/sdb1 上建立最多支援 32 個叢集節點的新 GFS2 檔案系統,請使用以下指令:

    root # mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/sdb1

    hacluster 名稱與檔案 /etc/corosync/corosync.conf 中的項目 cluster_name 相關 (此為預設設定)。

19.4 掛接 GFS2 磁碟區

您可以手動掛接 GFS2 磁碟區,也可以依照程序 19.4 「使用叢集管理員掛接 GFS2 磁碟區」所述使用叢集管理員來掛接。

程序 19.3︰ 手動掛接 GFS2 磁碟區
  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 從指令行掛接磁碟區,請使用 mount 指令。

警告
警告:手動掛接的 GFS2 裝置

如果您為了測試目的手動掛接了 GFS2 檔案系統,則在開始將其做為叢集資源使用之前,務必要將其卸載恢復原狀。

程序 19.4︰ 使用叢集管理員掛接 GFS2 磁碟區

若要使用高可用性軟體掛接 GFS2 磁碟區,請在叢集中設定 OCF 檔案系統資源。下面的程序將使用 crm 外圍程序來設定叢集資源。或者,您也可以使用 Hawk2 來設定資源。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 執行 crm configure

  3. 設定 Pacemaker 以在叢集中的各節點上掛接 GFS2 檔案系統:

    crm(live)configure# primitive gfs2-1 ocf:heartbeat:Filesystem \
      params device="/dev/sdb1" directory="/mnt/shared" fstype="gfs2" \
      op monitor interval="20" timeout="40" \
      op start timeout="60" op stop timeout="60" \
      meta target-role="Stopped"
  4. 建立一個基礎群組,該群組包含您在程序 17.1 「設定 DLM 的基礎群組」中建立的 dlm 基本資源,以及 gfs2-1 基本資源。複製群組:

    crm(live)configure# group g-storage dlm  gfs2-1
         clone cl-storage g-storage \
         meta interleave="true"

    鑒於基礎群組的內部並存與順序條件約束,Pacemaker 只會在其上已有 dlm 資源在執行的節點上啟動 gfs2-1 資源。

  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

20 DRBD

分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。

20.1 概念綜覽

DRBD 能在將資料從主要裝置複製到次要裝置時,確保兩份資料保持一致。您可以將其視為網路 RAID 1。它會即時執行資料的鏡像複製,因此其複製會持續進行。應用程式無須知曉其資料實際上儲存在其他磁碟上。

DRBD 是 Linux 核心模組,位於下層的 I/O 規劃程式和上層的檔案系統之間,請參閱圖形 20.1 「DRBD 在 Linux 中的位置」。若要與 DRBD 通訊,使用者需使用高階指令 drbdadm。為最大限度地提升靈活性,DRBD 隨附有低階工具 drbdsetup

DRBD 在 Linux 中的位置
圖 20.1︰ DRBD 在 Linux 中的位置
重要
重要:未加密資料

鏡像複製間的資料流量不會加密。為了保證資料交換的安全,您應該為連接部署虛擬私人網路 (VPN) 解決方案。

藉由 DRBD,使用者可以使用 Linux 支援的任何區塊裝置,通常包括:

  • 分割區或完整硬碟

  • 軟體 RAID

  • 邏輯磁碟區管理 (Logical Volume Manager,LVM)

  • 企業卷冊管理系統 (EVMS)

依預設,DRBD 使用 7788 及更高的 TCP 埠來處理 DRBD 節點之間的通訊。請確定您的防火牆不會阻止所用連接埠上的通訊。

您必須先對 DRBD 裝置進行設定,然後才能在其上建立檔案系統。所有與使用者資料相關的操作都只應透過 /dev/drbdN 裝置執行,不能在原始裝置上執行,因為 DRBD 會將原始裝置最後的部分用於儲存中繼資料。使用原始裝置會導致資料不一致。

借助 udev 整合,您還可以獲得 /dev/drbd/by-res/RESOURCES 格式的符號連結,這種連結更易於使用,而且還能預防在記錯裝置次要編號的情況下出現安全問題。

例如,如果原始裝置的大小為 1024 MB,則 DRBD 裝置只能使用 1023 MB 來儲存資料,另有大約 70 KB 隱藏留做儲存中繼資料之用。透過原始磁碟存取其餘 KB 的任何嘗試都會失敗,因為這些空間不用於儲存使用者資料。

20.2 安裝 DRBD 服務

依照第 I 部分 「安裝、設定與升級」所述,在網路叢集中的兩台 SUSE Linux Enterprise Server 機器上都安裝 High Availability Extension。安裝 High Availability Extension 時會安裝 DRBD 程式檔案。

如果您不需要完整的叢集堆疊,而只想使用 DRBD,請安裝套件 drbddrbd-kmp-FLAVORdrbd-utilsyast2-drbd

若要簡化 drbdadm 的使用,可以使用 Bash 補完支援。如果要在目前的外圍程序工作階段中將其啟用,請插入以下指令:

root # source /etc/bash_completion.d/drbdadm.sh

若要將其永久用於 root,請建立或延伸檔案 /root/.bashrc,並插入上面的指令行。

20.3 設定 DRBD 服務

注意
注意:所需的調整

下面的程序使用伺服器名稱 alice 與 bob,以及叢集資源名稱 r0。它會將 alice 設定為主要節點,並使用 /dev/sda1 儲存資料。請務必修改指示,以使用您自己的節點與檔案名稱。

以下章節假設您擁有 alice 與 bob 兩個節點,並且它們應使用 TCP 連接埠 7788。請確定您的防火牆中已開啟此連接埠。

  1. 準備系統:

    1. 確定 Linux 節點中的區塊裝置已就緒並已分割 (如果需要)。

    2. 如果磁碟包含您已不再需要的檔案系統,請使用以下指令損毀檔案系統結構:

      root # dd if=/dev/zero of=YOUR_DEVICE count=16 bs=1M

      如果有多個檔案系統需要摧毀,請在您希望包含到 DRBD 設定中的所有裝置上重複此步驟。

    3. 如果叢集已在使用 DRBD,請將叢集置於維護模式:

      root # crm configure property maintenance-mode=true

      如果叢集已在使用 DRBD,而您跳過了此步驟,即時組態中的語法錯誤會導致服務關閉。

      或者,也可以使用 drbdadm -c 檔案來測試組態檔案。

  2. 使用所選的方法來設定 DRBD:

  3. 如果您之前已設定 Csync2 (這應該是預設設定),則 DRBD 組態檔案現已包含在需要同步的檔案清單中。若要同步化這些檔案,請使用:

    root # csync2 -xv /etc/drbd.d/

    如果您未設定或不想使用 Csync2,請手動將 DRBD 組態檔案複製到另一個節點:

    root # scp /etc/drbd.conf bob:/etc/
    root # scp /etc/drbd.d/*  bob:/etc/drbd.d/
  4. 執行啟始同步 (請參閱第 20.3.3 節 「啟始化和格式化 DRBD 資源」)。

  5. 重設叢集的維護模式旗標:

    root # crm configure property maintenance-mode=false

20.3.1 手動設定 DRBD

注意
注意:自動升級功能支援受限

DRBD9 的自動升級功能可以使用複製和檔案系統資源,而非主要/從屬連接。如果使用此功能時正在掛接某個檔案系統,DRBD 會自動變為主要模式。

目前,自動升級功能僅具有受限支援。使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。

若要手動設定 DRBD,請執行下列步驟:

程序 20.1︰ 手動設定 DRBD

從 DRBD 版本 8.3 開始,以前的組態檔案會分割為多個獨立檔案,位於 /etc/drbd.d/ 目錄下。

  1. 開啟檔案 /etc/drbd.d/global_common.conf。該檔案中已包含一些全域預定義值。轉至 startup 區段,並插入以下幾行:

    startup {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout
        # wait-after-sb;
        wfc-timeout 100;
        degr-wfc-timeout 120;
    }

    這些選項可用於減少開機過程中的逾時,詳細資料請參閱 https://docs.linbit.com/docs/users-guide-9.0/#ch-configure

  2. 建立檔案 /etc/drbd.d/r0.res。依據具體情況變更以下幾行,然後儲存:

    resource r0 { 1
      device /dev/drbd0; 2
      disk /dev/sda1; 3
      meta-disk internal; 4
      on alice { 5
        address  192.168.1.10:7788; 6
        node-id 0; 7
      }
      on bob { 5
        address 192.168.1.11:7788; 6
        node-id 1; 7
      }
      disk {
        resync-rate 10M; 8
      }
      connection-mesh { 9
        hosts alice bob;
      }
    }

    1

    方便與需要資源的服務建立某種關聯的 DRBD 資源名稱。例如 nfshttpmysql_0postgres_wal,等等。本文中使用更普遍的名稱 r0

    2

    DRBD 的裝置名稱及其次要編號。

    上面的範例為 DRBD 使用了次要編號 0。Udev 整合程序檔將會為您提供一個符號連結 /dev/drbd/by-res/nfs/0。或者,在組態中省略裝置節點名稱,改為使用下行:

    drbd0 minor 0 (/dev/ 為選擇性) 或 /dev/drbd0

    3

    在兩個節點間複製的原始裝置。請注意,本範例中兩個節點上的裝置是相同的。如果您需要不同的裝置,請將 disk 參數移至 on 主機。

    4

    meta-disk 參數通常包含值 internal,但您也可以指定具體的裝置來儲存中繼資料。如需相關資訊,請參閱 https://docs.linbit.com/docs/users-guide-9.0/#s-metadata

    5

    On 區段指定要對其套用此組態陳述式的主機。

    6

    各節點的 IP 位址與埠號。每個資源都需要各自的連接埠,通常從 7788 開始。DRBD 資源的兩個連接埠必須相同。

    7

    設定兩個以上的節點時,需要節點 ID。該 ID 是用於區分不同節點的唯一非負整數。

    8

    同步速率。將其設定為磁碟空間和網路頻寬中較小者的三分之一。此設定只能限制重新同步操作,對複製不起作用。

    9

    定義網格的所有節點。hosts 參數包含共用相同 DRBD 設定的所有主機名稱。

  3. 檢查組態檔案的語法。若以下指令傳回錯誤,請檢查您的檔案:

    root # drbdadm dump all
  4. 繼續執行第 20.3.3 節 「啟始化和格式化 DRBD 資源」

20.3.2 使用 YaST 設定 DRBD

可以使用 YaST 來啟動 DRBD 的啟始設定。建立 DRBD 設定後,可以手動微調產生的檔案。

但是,當變更組態檔案後,請不要再使用 YaST DRBD 模組。DRBD 模組僅支援有限的一組基本組態。如果您再次使用該模組,它很有可能不會顯示所做的變更。

若要使用 YaST 來設定 DRBD,請執行以下步驟:

程序 20.2︰ 使用 YaST 設定 DRBD
  1. 啟動 YaST 並選取組態模組高可用性 ›  DRBD。如果您已設定了 DRBD 組態,YaST 會向您發出警告。YaST 將會變更您的組態,並將原來的 DRBD 組態檔案另存為 *.YaSTsave

  2. 啟動組態 › 開機中的開機旗標保留原樣 (預設為 off);請不要變更該設定,因為 Pacemaker 會管理此服務。

  3. 如果有防火牆在執行,則啟用在防火牆中開啟埠

  4. 移至資源組態項目。按新增建立新資源 (請參閱圖形 20.2 「資源組態」)。

    資源組態
    圖 20.2︰ 資源組態

    需要設定以下參數:

    資源名稱

    DRBD 資源的名稱 (強制)

    名稱

    相關節點的主機名稱

    位址:埠

    相應節點的 IP 位址和連接埠號 (預設為 7788)

    裝置

    用於存取所複製資料的區塊裝置路徑。如果裝置包含次要編號,則關聯的區塊裝置通常命名為 /dev/drbdX,其中,X 是裝置次要編號。如果裝置不包含次要編號,請務必在裝置名稱後面新增 minor 0

    磁碟

    在兩個節點間複製的原始裝置。如果您使用 LVM,請插入 LVM 裝置名稱。

    中繼磁碟

    中繼磁碟可設定為 internal 值,或指定由索引定義的具體裝置,以存放 DRBD 所需的中繼資料。

    也可為多重 DRBD 資源使用一個真實裝置。例如,如果第一個資源使用的中繼磁碟/dev/sda6[0],您可以將 /dev/sda6[1] 用於第二個資源。不過,此磁碟上必須為每個資源至少預留 128 MB 的空間。固定中繼資料大小會限制您可複製的最大資料大小。

    上述所有選項在 /usr/share/doc/packages/drbd/drbd.conf 檔案與 drbd.conf(5) 線上文件中都以範例進行了說明。

  5. 按一下儲存

  6. 按一下新增以輸入第二個 DRBD 資源,然後按一下儲存完成。

  7. 依次按一下確定完成關閉資源組態。

  8. 如果您在 DRBD 中使用 LVM,則需要在 LVM 組態檔案中變更一些選項 (請參閱 LVM 組態項目)。YaST DRBD 模組可自動完成此項變更。

    LVM 過濾器將會拒絕 DRBD 資源的 localhost 磁碟名稱和預設過濾器。只能在 /dev/drbd 中掃描 LVM 裝置。

    例如,如果將 /dev/sda1 用做 DRBD 磁碟,則會插入裝置名稱做為 LVM 過濾器中的第一個項目。若要手動變更過濾器,請按一下自動修改 LVM 裝置過濾器核取方塊。

  9. 按一下完成儲存您的變更。

  10. 繼續執行第 20.3.3 節 「啟始化和格式化 DRBD 資源」

20.3.3 啟始化和格式化 DRBD 資源

準備系統並設定 DRBD 後,請執行磁碟的首次啟始化:

  1. 在 alice 和 bob 這兩個節點上,啟始化中繼資料儲存:

    root # drbdadm create-md r0
    root # drbdadm up r0
  2. 若要縮短 DRBD 資源的初始重新同步時間,請檢查以下項目:

    • 如果所有節點上的 DRBD 裝置都具有相同資料 (例如,透過使用第 20.3 節 「設定 DRBD 服務」中所述的 dd 指令損毀檔案系統結構),則請在這兩個節點上使用以下指令跳過初始重新同步步驟:

      root # drbdadm new-current-uuid --clear-bitmap r0/0

      狀態將為 Secondary/Secondary UpToDate/UpToDate

    • 否則,請繼續下一步。

  3. 在主要節點 alice 上,啟動重新同步程序:

    root # drbdadm primary --force r0
  4. 使用以下指令檢查狀態:

    root # drbdadm status r0
    r0 role:Primary
      disk:UpToDate
      bob role:Secondary
      peer-disk:UpToDate
  5. 在您的 DRBD 裝置上建立檔案系統,例如:

    root # mkfs.ext3 /dev/drbd0
  6. 掛接檔案系統並投入使用:

    root # mount /dev/drbd0 /mnt/

20.4 從 DRBD 8 移轉到 DRBD 9

從 DRBD 8 (隨附於 SUSE Linux Enterprise High Availability Extension 12 SP1 中) 到 DRBD 9 (隨附於 SUSE Linux Enterprise High Availability Extension 12 SP2 中),中繼資料格式已發生變化。DRBD 9 不會自動將之前的中繼資料檔案轉換為新格式。

移轉到 12 SP2 之後,在啟動 DRBD 之前,請先將 DRBD 中繼資料手動轉換為版本 9 格式。請使用 drbdadm create-md 執行此操作。不需要變更任何組態。

注意
注意:支援受限

使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。

DRBD 9 將會退回到與版本 8 相容的狀態。如果有三個或更多節點,您需要重新建立中繼資料才能使用 DRBD 版本 9 的特定選項。

如果具有堆疊式 DRBD 資源,另請參閱第 20.5 節 「建立堆疊式 DRBD 裝置」瞭解詳細資訊。

若要保留資料並允許在無需重新建立新資源的情況下新增新的節點,請執行以下操作:

  1. 將一個節點設定為待命模式。

  2. 更新所有節點上的所有 DRBD 套件,請參閱第 20.2 節 「安裝 DRBD 服務」

  3. 將新節點資訊新增至資源組態中:

    • node-id (針對每個 on 區段)。

    • connection-mesh 區段在 hosts 參數中包含所有主機名稱。

    請參閱程序 20.1 「手動設定 DRBD」中的範例組態。

  4. 在使用 internal 做為 meta-disk 索引鍵時增大 DRBD 磁碟的空間。使用支援增大空間的裝置,例如 LVM。或者,更換為用於中繼資料的外部磁碟,並使用 meta-disk 裝置;

  5. 根據新組態重新建立中繼資料:

    root # drbdadm create-md RESOURCE
  6. 取消待命模式。

20.5 建立堆疊式 DRBD 裝置

堆疊式 DRBD 裝置包含兩部其他裝置,其中至少有一部裝置也是 DRBD 資源。換言之,DRBD 在一個現有 DRBD 資源的基礎上又另外新增了一個節點 (請參閱圖形 20.3 「資源堆疊」)。此類複製設定可用於備份和災難備援用途。

資源堆疊
圖 20.3︰ 資源堆疊

三向複製使用了非同步 (DRBD 通訊協定 A) 和同步複製 (DRBD 通訊協定 C)。非同步部分用於堆疊的資源,而同步部分用於備用資源。

您的線上環境使用堆疊裝置。例如,如果您有一個 DRBD 裝置 /dev/drbd0 和一個堆疊在其上的裝置 /dev/drbd10,則將會在 /dev/drbd10 上建立檔案系統 (請參閱範例 20.1 「三節點堆疊 DRBD 資源的組態」瞭解更多詳細資料)。

範例 20.1︰ 三節點堆疊 DRBD 資源的組態
# /etc/drbd.d/r0.res
resource r0 {
  protocol C;
  device    /dev/drbd0;
  disk      /dev/sda1;
  meta-disk internal;

  on amsterdam-alice {
    address    192.168.1.1:7900;
  }

  on amsterdam-bob {
    address    192.168.1.2:7900;
  }
}

resource r0-U {
  protocol A;
  device     /dev/drbd10;

  stacked-on-top-of r0 {
    address    192.168.2.1:7910;
  }

  on berlin-charlie {
    disk       /dev/sda10;
    address    192.168.2.2:7910; # Public IP of the backup node
    meta-disk  internal;
  }
}

20.6 使用資源層級圍籬區隔

當 DRBD 複製連結中斷時,Pacemaker 會嘗試將 DRBD 資源升級至另一個節點。為防止 Pacemaker 使用過時的資料啟動服務,請依範例 20.2 「使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態」中所示,在 DRBD 組態檔案中啟用資源層級圍籬區隔。

範例 20.2︰ 使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態
resource RESOURCE {
  net {
    fencing resource-only;
    # ...
  }
  handlers {
    fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh";
    after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh";
    # ...
  }
  ...
}

如果 DRBD 複製連結中斷,DRBD 會執行以下操作:

  1. DRBD 會呼叫 crm-fence-peer.9.sh 程序檔。

  2. 該程序檔會聯絡叢集管理員。

  3. 該程序檔會確定與此 DRBD 資源關聯的 Pacemaker 資源。

  4. 該程序檔會確定 DRBD 資源不再升級至其他任何節點。DRBD 資源將保留在目前使用中的節點上。

  5. 如果複製連結恢復連接並且 DRBD 完成了其同步程序,則會移除該條件約束。現在,叢集管理員可以不受約束地升級資源。

20.7 測試 DRBD 服務

如果安裝與組態程序按預期執行,您現在就可以執行基本的 DRBD 功能測試。此測試也有助於瞭解軟體的工作原理。

  1. 測試 alice 上的 DRBD 服務。

    1. 開啟終端機主控台,然後以 root 身分登入。

    2. 在 alice 上建立掛接點,如 /srv/r0

      root # mkdir -p /srv/r0
    3. 掛接 drbd 裝置:

      root # mount -o rw /dev/drbd0 /srv/r0
    4. 從主要節點建立檔案:

      root # touch /srv/r0/from_alice
    5. 卸載 alice 上的磁碟:

      root # umount /srv/r0
    6. 在 alice 上輸入以下指令,將 alice 上的 DRBD 服務降級:

      root # drbdadm secondary r0
  2. 測試 bob 上的 DRBD 服務。

    1. 在 bob 上開啟終端機主控台,然後以 root 身分登入。

    2. 在 bob 上將 DRBD 服務升級為主要服務:

      root # drbdadm primary r0
    3. 在 bob 上檢查 bob 是否為主要節點:

      root # drbdadm status r0
    4. 在 bob 上建立掛接點,如 /srv/r0

      root # mkdir /srv/r0
    5. 在 bob 上掛接 DRBD 裝置:

      root # mount -o rw /dev/drbd0 /srv/r0
    6. 驗證您在 alice 上建立的檔案是否存在:

      root # ls /srv/r0/from_alice

      此時應列出 /srv/r0/from_alice 檔案。

  3. 如果服務在兩個節點上都可執行,即表示 DRBD 設定已完成。

  4. 再次將 alice 設為主要節點。

    1. 在 bob 上輸入以下指令,卸下 bob 上的磁碟:

      root # umount /srv/r0
    2. 在 bob 上輸入以下指令,將 bob 上的 DRBD 服務降級:

      root # drbdadm secondary r0
    3. 在 alice 上將 DRBD 服務升級為主要服務:

      root # drbdadm primary r0
    4. 在 alice 上檢查 alice 是否為主要節點:

      root # drbdadm status r0
  5. 若要讓服務在伺服器出現問題時自動啟動並容錯移轉,您可以使用 Pacemaker/Corosync 將 DRBD 設定為高可用性服務。如需關於如何安裝和設定 SUSE Linux Enterprise 15 SP2 的資訊,請參閱第 II 部分 「組態與管理」

20.8 監控 DRBD 裝置

DRBD 隨附了可提供即時監控的公用程式 drbdmon。該公用程式會顯示所有已設定的資源及其問題。

drbdmon 顯示了一個正常的連接
圖 20.4︰ drbdmon 顯示了一個正常的連接

如果出現問題,drbdadm 會顯示錯誤訊息:

drbdmon 顯示了一個錯誤的連接
圖 20.5︰ drbdmon 顯示了一個錯誤的連接

20.9 調整 DRBD

調整 DRBD 的方法有多種:

  1. 使用外部磁碟儲存中繼資料。這可能會有所幫助,不過會降低維護方便性。

  2. 透過 sysctl 變更接收和傳送緩衝區設定,以調整網路連接。

  3. 在 DRBD 組態中變更 max-buffers 和/或 max-epoch-size

  4. 根據您的 IO 模式增大 al-extents 值。

  5. 如果您有一個配備了 BBU (電池備份單元) 的硬體 RAID 控制器,設定 no-disk-flushesno-disk-barrier 和/或 no-md-flushes 可能會有所幫助。

  6. 根據工作負載啟用讀取平衡。請參閱 https://www.linbit.com/en/read-balancing/,以取得詳細資料。

20.10 DRBD 疑難排解

DRBD 設定涉及眾多元件,因此導致問題發生的原因多種多樣。以下各節將介紹幾種常見的情況並提供了多種解決方案。

20.10.1 組態

如果初始的 DRBD 設定未依預期運作,則可能是由於組態有問題。

若要獲取有關組態的資訊,請執行下列步驟:

  1. 開啟終端機主控台,然後以 root 身分登入。

  2. 執行 drbdadm (含 -d 選項),測試組態檔案。輸入下列指令:

    root # drbdadm -d adjust r0

    adjust 選項的試執行 (dry run) 期間,drbdadm 會將 DRBD 資源的實際組態與 DRBD 組態檔案進行比較,但不會執行呼叫。檢閱輸出,以確定您瞭解所有錯誤的來源及原因。

  3. 如果檔案 /etc/drbd.d/*drbd.conf 中存在錯誤,請更正後再繼續。

  4. 如果分割區與設定均正確,請再次執行 drbdadm (不含 -d 選項)。

    root # drbdadm adjust r0

    此指令會將組態檔案套用於 DRBD 資源。

20.10.2 主機名稱

與核心中儲存的主機名稱相比 (請參閱 uname -n 輸出),DRBD 的主機名稱區分大小寫 (Node0 是不同於 node0 的主機)。

如果您擁有多個網路裝置,並希望使用專屬的網路裝置,主機名稱可能不會解析成所使用的 IP 位址。在這種情況下,可以使用參數 disable-ip-verification

20.10.3 TCP 埠 7788

如果您的系統無法連接至對等系統,可能是因為本地防火牆有問題。依預設,DRBD 使用 TCP 埠 7788 存取其他節點。請確定在兩個節點上均可存取此連接埠。

20.10.4 DRBD 裝置在重新開機後損毀

如果 DRBD 不知道存放最新資料的真實裝置,就會導致電腦分裂狀態。在這種情況下,各個 DRBD 子系統將會做為次要項目出現,並且不會相互連接。在這種情況下,可以在記錄資料中尋找以下訊息:

Split-Brain detected, dropping connection!

若要解決此問題,請在要丟棄資料的節點上輸入以下指令:

root # drbdadm secondary r0

如果狀態為 WFconnection,請先中斷連接:

root # drbdadm disconnect r0

在含有最新資料的節點上,輸入以下指令:

root # drbdadm connect  --discard-my-data r0

如此會將一個節點的資料覆寫為對等節點的資料,因此兩個節點上的檢視窗將會保持一致,從而使問題得到解決。

20.11 更多資訊

下列開放原始碼資源適用於 DRBD:

  • 專案首頁 http://www.drbd.org

  • 請參閱Article “Highly Available NFS Storage with DRBD and Pacemaker”

  • http://clusterlabs.org/wiki/DRBD_HowTo_1.0,由 Linux Pacemaker Cluster Stack Project 提供。

  • 套裝作業系統中包含 DRBD 的以下man 頁面:drbd (8)drbdmeta (8)drbdsetup (8)drbdadm (8)drbd.conf (5)

  • /usr/share/doc/packages/drbd-utils/drbd.conf.example 中提供了註解的 DRBD 範例組態。

  • 此外,為了更方便地在整個叢集中進行儲存管理,請參閱 https://www.linbit.com/en/drbd-manager/ 上關於 DRBD-Manager 的最新宣告。

21 叢集邏輯磁碟區管理員 (叢集 LVM)

管理叢集上的共享儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Logical Volume Manager 2 (LVM2) 已進行延伸,現可支援對整個叢集中的磁碟區群組進行透明管理。在多個主機之間共享的磁碟區群組可使用與本地儲存相同的指令進行管理。

21.1 概念綜覽

系統透過不同的工具來協調叢集 LVM:

分散式鎖定管理員 (DLM)

透過全叢集鎖定來協調對多個主機間共享資源的存取。

邏輯磁碟區管理員 (LVM2)

LVM2 提供磁碟空間的虛擬池,允許將一個邏輯磁碟區靈活分佈到多個磁碟。

叢集邏輯磁碟區管理員 (叢集 LVM)

叢集 LVM 一詞表示叢集環境中使用 LVM2。這需要進行一些組態調整,以保護共享儲存上的 LVM2 中繼資料。自 SUSE Linux Enterprise 15 起,叢集延伸使用 lvmlockd 取代了眾所周知的 clvmd。如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令 的 man 頁面 (man 8 lvmlockd)。

磁碟區群組和邏輯磁碟區

磁碟區群組 (VG) 和邏輯磁碟區 (LV) 都屬於 LVM2 的基本概念。磁碟區群組是多個實體磁碟的儲存池。邏輯磁碟區屬於磁碟區群組,可視為一種彈性磁碟區,您可以在其上建立檔案系統。在叢集環境中,存在共享 VG 的概念,共享 VG 由共享儲存組成,可被多個主機同時使用。

21.2 叢集 LVM 的組態

確定符合以下要求:

  • 有共享儲存裝置可用,例如,該共享儲存裝置可透過光纖通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。

  • 確定已安裝以下套件:lvm2lvm2-lockd

  • 自 SUSE Linux Enterprise 15 起,我們使用 lvmlockd 做為 LVM2 叢集延伸,而不再使用 clvmd。請確定 clvmd 精靈未執行,否則 lvmlockd 將無法啟動。

21.2.1 建立叢集資源

在一個節點上執行以下基本步驟,以在叢集中設定共享 VG:

程序 21.1︰ 建立 DLM 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 檢查叢集資源的目前組態:

    root # crm configure show
  3. 如果您已設定 DLM 資源 (以及對應的基礎群組和基礎複製品),請繼續程序 21.2 「建立 lvmlockd 資源」

    若非如此,請依照程序 17.1 「設定 DLM 的基礎群組」 所述設定 DLM 資源以及對應的基礎群組和基礎複製品。

程序 21.2︰ 建立 lvmlockd 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行以下指令以查看此資源的使用情況:

    root # crm configure ra info lvmlockd
  3. 依如下所示設定 lvmlockd 資源:

    root # crm configure primitive lvmlockd ocf:heartbeat:lvmlockd \
      op start timeout="90" \
      op stop timeout="100" \
      op monitor interval="30" timeout="90"
  4. 為了確定在每個節點上都啟動 lvmlockd 資源,請將基本資源新增至您在程序 21.1 「建立 DLM 資源」中為儲存建立的基礎群組:

    root # crm configure modgroup g-storage add lvmlockd
  5. 複查所做的變更:

    root # crm configure show
  6. 檢查資源是否正常執行:

    root # crm status full
程序 21.3︰ 建立共享 VG 和 LV
  1. 啟動外圍程序並以 root 身分登入。

  2. 假設您已有兩個共享磁碟,並使用它們建立共享 VG:

    root # vgcreate --shared vg1 /dev/sda /dev/sdb
  3. 建立 LV 但一開始不啟用它:

    root # lvcreate -an -L10G -n lv1 vg1
程序 21.4︰ 建立 LVM 啟用資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行以下指令以查看此資源的使用情況:

    root # crm configure ra info LVM-activate

    此資源負責管理 VG 的啟用。在共享 VG 中,有兩種不同的 LV 啟用模式:獨佔模式和共享模式。獨佔模式是預設模式,通常應在 ext4 等本地檔案系統使用 LV 時使用。共享模式僅應用於 OCFS2 等叢集檔案系統。

  3. 設定資源以管理您 VG 的啟用。根據您的案例,選擇下列其中一個選項:

    • 對於本地檔案系統使用,請使用獨佔啟用模式:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
    • 對於 OCFS2,請使用共享啟用模式,並將其新增至複製的 g-storage 群組:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd activation_mode=shared \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
      root # crm configure modgroup g-storage add vg1
  4. 檢查資源是否正常執行:

    root # crm status full

21.2.2 案例:在 SAN 上將叢集 LVM 與 iSCSI 搭配使用

以下案例將使用兩個 SAN Box,它們會將 iSCSI 目標輸出至多個用戶端。圖形 21.1 「使用叢集 LVM 設定共享磁碟」 中說明了一般的情況。

使用叢集 LVM 設定共享磁碟
圖 21.1︰ 使用叢集 LVM 設定共享磁碟
警告
警告:資料損失

以下程序將損毀您磁碟上的資料!

開始請只設定一個 SAN Box。每個 SAN Box 需要輸出自己的 iSCSI 目標。請執行下列步驟:

程序 21.5︰ 設定 iSCSI 目標 (SAN)
  1. 執行 YaST,然後按一下 網路服務 ›  iSCSI LIO 目標 ,啟動 iSCSI 伺服器模組。

  2. 如果您希望電腦每次開機時啟動 iSCSI 目標,請選擇開機時,否則請選擇手動

  3. 如果有防火牆在執行,則啟用在防火牆中開啟埠

  4. 切換至全域索引標籤。如果需要驗證,請啟用內送及/或外送驗證。在本例中,我們選取的是無驗證

  5. 新增新的 iSCSI 目標:

    1. 切換至目標索引標籤。

    2. 按一下新增

    3. 輸入目標名稱。名稱需要採用以下格式:

      iqn.DATE.DOMAIN

      如需該格式的詳細資訊,請參閱第 3.2.6.3.1 節「Type "iqn." (iSCSI Qualified Name)」(「iqn.」(iSCSI 合格名稱) 類型),網址為:http://www.ietf.org/rfc/rfc3720.txt

    4. 如果您想使用更具描述性的名稱,可以變更名稱,只要確保每個目標的識別碼都是唯一的即可。

    5. 按一下新增

    6. 路徑中輸入裝置名稱,並使用Scsiid

    7. 按兩次下一步

  6. 出現警告對話方塊時,按一下加以確認。

  7. 開啟組態檔案 /etc/iscsi/iscsid.conf,並將參數 node.startup 變更為 automatic

接著,按如下所示設定 iSCSI 啟動器:

程序 21.6︰ 設定 iSCSI 啟動器
  1. 執行 YaST,然後按一下網路服務 ›  iSCSI 啟動器

  2. 如果您要在電腦開機時啟動 iSCSI 啟動器,請選擇開機時,否則請設定手動

  3. 切換至探查索引標籤,然後按一下探查按鈕。

  4. 新增 iSCSI 目標的 IP 位址和連接埠 (請參閱程序 21.5 「設定 iSCSI 目標 (SAN)」)。一般不用變更連接埠,使用其預設值即可。

  5. 如果使用驗證,請插入內送及外送的使用者名稱和密碼,否則請啟用無驗證

  6. 選取下一步。清單中會顯示找到的連線。

  7. 按一下完成繼續。

  8. 開啟外圍程序,以 root 身分登入。

  9. 測試 iSCSI 啟動器是否已正常啟動:

    root # iscsiadm -m discovery -t st -p 192.168.3.100
    192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
  10. 建立工作階段:

    root # iscsiadm -m node -l -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]: successful

    使用 lsscsi 查看裝置名稱:

    ...
    [4:0:0:2]    disk    IET      ...     0     /dev/sdd
    [5:0:0:1]    disk    IET      ...     0     /dev/sde

    尋找第三欄中含有 IET 的項目。在本例中,裝置分別是 /dev/sdd/dev/sde

程序 21.7︰ 建立共享磁碟區群組
  1. 在其中一個您於 程序 21.6 「設定 iSCSI 啟動器」 中執行了 iSCSI 啟動器的節點上開啟 root 外圍程序。

  2. 在磁碟 /dev/sdd/dev/sde 上建立共享磁碟區群組:

    root # vgcreate --shared testvg /dev/sdd /dev/sde
  3. 根據需要建立邏輯磁碟區:

    root # lvcreate --name lv1 --size 500M testvg
  4. 使用 vgdisplay 檢查磁碟區群組:

      --- Volume group ---
          VG Name               testvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          Clustered             yes
          Shared                no
          MAX LV                0
          Cur LV                0
          Open LV               0
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               1016,00 MB
          PE Size               4,00 MB
          Total PE              254
          Alloc PE / Size       0 / 0
          Free  PE / Size       254 / 1016,00 MB
          VG UUID               UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD

建立磁碟區並啟動資源後,/dev/testvg 下會顯示新的裝置名稱,例如 /dev/testvg/lv1。這表示 LV 已啟用,可供使用。

21.2.3 案例:將叢集 LVM 與 DRBD 搭配使用

如果您的資料中心分佈在城市、國家甚至大陸的不同位置,可以參照以下案例。

程序 21.8︰ 使用 DRBD 建立叢集感知磁碟區群組
  1. 建立主要/次要 DRBD 資源:

    1. 首先,如程序 20.1 「手動設定 DRBD」 中所述將一部 DRBD 裝置設定成主要或次要裝置。確定兩個節點上的磁碟狀態均為最新。使用 drbdadm status 確認是否如此。

    2. 在組態檔案 (通常類似於 /etc/drbd.d/r0.res) 中新增以下選項:

      resource r0 {
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 將變更後的組態檔案複製到另一個節點,例如:

      root # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 兩個節點上執行以下指令:

      root # drbdadm disconnect r0
      root # drbdadm connect r0
      root # drbdadm primary r0
    5. 檢查節點的狀態:

      root # drbdadm status r0
  2. 將 lvmlockd 資源做為複製品包含在 Pacemaker 組態中,並使它依賴於 DLM 複製品。如需詳細指示,請參閱程序 21.1 「建立 DLM 資源」。繼續之前,請先確定已在叢集中成功啟動這些資源。您可以使用 crm status 或 Web 介面檢查執行中的服務。

  3. 使用 pvcreate 指令為 LVM 備妥實體磁碟區。例如,在 /dev/drbd_r0 裝置上使用如下指令:

    root # pvcreate /dev/drbd_r0
  4. 建立共享磁碟區群組:

    root # vgcreate --shared testvg /dev/drbd_r0
  5. 根據需要建立邏輯磁碟區。您有時可能想要變更邏輯磁碟區的大小。例如,使用以下指令建立一個 4 GB 的邏輯磁碟區:

    root # lvcreate --name lv1 -L 4G testvg
  6. 現在,VG 中的邏輯磁碟區便可做為掛接的檔案系統或原始用途使用。請確保使用它們的服務具有正確的相依性,這樣才能在啟動 VG 後對它們進行並存和排序處理。

完成這些組態設定步驟後,便能像在任何獨立工作站上一般進行 LVM2 組態設定。

21.3 明確設定適合的 LVM2 裝置

如果看似有多部裝置共享同一個實體磁碟區簽名 (多路徑裝置或 DRBD 就有可能發生這種情況),建議明確設定 LVM2 掃描 PV 的裝置。

例如,如果指令 vgcreate 使用實體裝置而非鏡像區塊裝置,則 DRBD 會產生混亂。進而導致 DRBD 出現電腦分裂情況。

若要停用 LVM2 的單一裝置,請執行以下操作:

  1. 編輯 /etc/lvm/lvm.conf 檔案並搜尋以 filter 開頭的行。

  2. 該處的模式將被視為正規表示式進行處理。前置 a 表示接受要掃描的裝置模式,前置 r 表示拒絕依照該裝置模式的裝置。

  3. 若要移除名為 /dev/sdb1 的裝置,請將下列表示式新增至過濾器規則:

    "r|^/dev/sdb1$|"

    完整的過濾器行如下所示:

    filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]

    接受 DRBD 和 MPIO 裝置但拒絕其他所有裝置的過濾器行如下所示:

    filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
  4. 寫入組態檔案並將其複製到所有叢集節點。

21.4 從鏡像 LV 線上移轉至叢集 MD

SUSE Linux Enterprise High Availability Extension 15 開始,叢集 LVM 中的 cmirrord 已被取代。我們強烈建議將叢集中的鏡像邏輯磁碟區移轉至叢集 MD。叢集 MD 表示「叢集多裝置」,是適用於叢集的軟體式 RAID 儲存解決方案。

21.4.1 移轉之前的範例設定

假設您採用以下範例設定:

  • 您有一個雙節點叢集,它由節點 alicebob 組成。

  • 名為 test-lv 的鏡像邏輯磁碟區是從名為 cluster-vg2 的磁碟區群組建立的。

  • 磁碟區群組 cluster-vg2 由磁碟 /dev/vdb/dev/vdc 組成。

root # lsblk
NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                                   253:0    0   40G  0 disk
├─vda1                                253:1    0    4G  0 part [SWAP]
└─vda2                                253:2    0   36G  0 part /
vdb                                   253:16   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_0 254:0    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_0      254:3    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
vdc                                   253:32   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_1 254:1    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_1      254:4    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
重要
重要:避免移轉失敗

在啟動移轉程序之前,請檢查邏輯磁碟區和實體磁碟區的容量與使用率。如果邏輯磁碟區使用了 100% 的實體磁碟區容量,則移轉可能會失敗,並在目標磁碟區上顯示可用空間不足錯誤。如何防止這種移轉失敗取決於鏡像記錄所用的選項:

  • 鏡像記錄本身是否已鏡像 (mirrored 選項),並且已在鏡像根所在的同一個裝置上進行配置?: (例如,如果您依照 這些版本的《管理指南》 所述,為 SUSE Linux Enterprise High Availability Extension 11 或 12 上的 cmirrord 設定建立了邏輯磁碟區,則可能符合這種情況)。

    依預設,mdadm 會在裝置開頭與陣列資料開頭之間保留一定的空間容量。在移轉期間,您可以檢查未使用的填補空間,並使用 data-offset 選項減小此空間,如步驟 1.d 和下文所述。

    data-offset 必須在裝置上保留足夠的空間,使叢集 MD 能夠將其中繼資料寫入裝置。另一方面,偏移量必須足夠小,使裝置的剩餘容量可以容納所移轉磁碟區的所有實體磁碟區範圍。由於磁碟區可能已跨越整個裝置但不包括鏡像記錄,因此,偏移量必須小於鏡像記錄的大小。

    我們建議將 data-offset 設定為 128 KB。如果未指定偏移量的值,其預設值為 1 KB (1024 位元組)。

  • 鏡像記錄是已寫入不同的裝置 (disk 選項),還是保留在記憶體中 (core 選項)?: 在開始移轉之前,請增大實體磁碟區的大小,或減小邏輯磁碟區的大小 (以便為實體磁碟區釋放更多的空間)。

21.4.2 將鏡像 LV 移轉至叢集 MD

以下程序以第 21.4.1 節 「移轉之前的範例設定」為基礎。請根據設定調整指令,並相應地取代 LV、VG、磁碟和叢集 MD 裝置的名稱。

移轉程序完全不會造成停機。在移轉期間仍可掛接檔案系統。

  1. 在節點 alice 上執行以下步驟:

    1. 將鏡像邏輯磁碟區 test-lv 轉換為線性邏輯磁碟區:

      root # lvconvert -m0 cluster-vg2/test-lv /dev/vdc
    2. 從磁碟區群組 cluster-vg2 中移除實體磁碟區 /dev/vdc

      root # vgreduce cluster-vg2 /dev/vdc
    3. 從 LVM 中移除以下實體磁碟區:

      root # pvremove /dev/vdc

      如果現在就執行 lsblk,您將會看到:

      NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                     253:0    0   40G  0 disk
      ├─vda1                  253:1    0    4G  0 part [SWAP]
      └─vda2                  253:2    0   36G  0 part /
      vdb                     253:16   0   20G  0 disk
      └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
      vdc                     253:32   0   20G  0 disk
    4. 使用磁碟 /dev/vdc 建立叢集 MD 裝置 /dev/md0

      root # mdadm --create /dev/md0 --bitmap=clustered \
      --metadata=1.2 --raid-devices=1 --force --level=mirror \
      /dev/vdc --data-offset=128

      如需為何要使用 data-offset 選項的詳細資料,請參閱重要:避免移轉失敗

  2. 在節點 bob 上組合以下 MD 裝置:

    root # mdadm --assemble md0 /dev/vdc

    如果您的叢集由兩個以上的節點組成,請在該叢集中的所有剩餘節點上執行此步驟。

  3. 回到節點 alice

    1. 將 MD 裝置 /dev/md0 啟始化為可與 LVM 搭配使用的實體磁碟區:

      root # pvcreate /dev/md0
    2. 將 MD 裝置 /dev/md0 新增至磁碟區群組 cluster-vg2

      root # vgextend cluster-vg2 /dev/md0
    3. 將磁碟 /dev/vdb 中的資料移至 /dev/md0 裝置:

      root # pvmove /dev/vdb /dev/md0
    4. 從磁碟區群組 group cluster-vg2 中移除實體磁碟區 /dev/vdb

      root # vgreduce cluster-vg2 /dev/vdb
    5. 從裝置中移除標籤,使 LVM 不再將該裝置識別為實體磁碟區:

      root # pvremove /dev/vdb
    6. /dev/vdb 新增至 MD 裝置 /dev/md0

      root # mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb

21.4.3 移轉之後的範例設定

如果現在就執行 lsblk,您將會看到:

NAME                      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
vda                       253:0    0   40G  0 disk
├─vda1                    253:1    0    4G  0 part  [SWAP]
└─vda2                    253:2    0   36G  0 part  /
vdb                       253:16   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
vdc                       253:32   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm

21.5 更多資訊

如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令 的 man 頁面 (man 8 lvmlockd)。

完整資訊可參閱 Pacemaker 郵寄清單 (網址為 http://www.clusterlabs.org/wiki/Help:Contents)。

22 叢集多裝置 (叢集 MD)

叢集多裝置 (叢集 MD) 是一項基於軟體的叢集 RAID 儲存解決方案。目前,叢集 MD 為叢集提供了 RAID1 鏡像的備援。在 SUSE Linux Enterprise High Availability Extension 15 SP2 中,隨附了 RAID10 做為技術預覽。如果您想嘗試 RAID10,請在相關的 mdadm 指令中使用 10 取代 mirror。本章介紹如何建立和使用叢集 MD。

22.1 概念綜覽

叢集 MD 提供了在叢集環境中使用 RAID1 的支援。每個節點都會存取叢集 MD 使用的磁碟或裝置。如果叢集 MD 的一部裝置失敗,則在執行時期可以由另一部裝置取代它,並且系統會對其進行重新同步以提供相同量的備援。叢集 MD 需要使用 Corosync 和分散式鎖定管理員 (DLM) 進行協調和通訊。

叢集 MD 裝置不會如同其他常規 MD 裝置一般在開機時自動啟動。需要使用資源代辦來啟動叢集裝置,以便確定 DLM 資源已啟動。

22.2 建立叢集 MD RAID 裝置

要求
  • 一個安裝了 Pacemaker 的執行中叢集。

  • DLM 的資源代辦 (請參閱程序 17.1 「設定 DLM 的基礎群組」瞭解如何設定 DLM)。

  • 至少兩個共用磁碟裝置。您可以使用另外一部裝置做為備用裝置,該備用裝置會在裝置失敗時自動進行容錯移轉。

  • 一個已安裝的套件 cluster-md-kmp-default

  1. 請確認 DLM 資源在叢集的每個節點上都正常執行,並使用以下指令檢查資源狀態:

    root # crm_resource -r dlm -W
  2. 建立叢集 MD 裝置:

    • 如果您沒有現有的常規 RAID 裝置,請使用以下指令在執行 DLM 資源的節點上建立叢集 MD 裝置:

      root # mdadm --create /dev/md0 --bitmap=clustered \
         --metadata=1.2 --raid-devices=2 --level=mirror /dev/sda /dev/sdb

      由於叢集 MD 只能與 1.2 版的中繼資料配合使用,因此建議使用 --metadata 選項來指定版本。如需其他有用選項的資訊,請參閱 mdadm man 頁面。在 /proc/mdstat 中監控重新同步進度。

    • 如果您有現有的常規 RAID,請先清除現有點陣圖,然後再建立叢集點陣圖:

      root # mdadm --grow /dev/mdX --bitmap=none
      root # mdadm --grow /dev/mdX --bitmap=clustered
    • (選擇性) 若要建立帶有備用裝置 (用於自動容錯移轉) 的叢集 MD 裝置,請在一個叢集節點上執行以下指令:

      root # mdadm --create /dev/md0 --bitmap=clustered --raid-devices=2 \
            --level=mirror --spare-devices=1 /dev/sda /dev/sdb /dev/sdc --metadata=1.2
  3. 獲取 UUID 以及相關的 MD 路徑:

    root # mdadm --detail --scan

    該 UUID 必須與超級區塊中儲存的 UUID 相符。如需 UUID 的詳細資料,請參閱 mdadm.conf man 頁面。

  4. 開啟 /etc/mdadm.conf 並新增 MD 裝置名稱及與其關聯的裝置。使用上一步中獲得的 UUID:

    DEVICE /dev/sda /dev/sdb
    ARRAY /dev/md0 UUID=1d70f103:49740ef1:af2afce5:fcf6a489
  5. 開啟 Csync2 的組態檔案 /etc/csync2/csync2.cfg,並新增 /etc/mdadm.conf

    group ha_group
    {
       # ... list of files pruned ...
       include /etc/mdadm.conf
    }

22.3 設定資源代辦

依如下所示設定 CRM 資源:

  1. 建立 Raid1 基本資源:

    crm(live)configure# primitive raider Raid1 \
      params raidconf="/etc/mdadm.conf" raiddev=/dev/md0 \
      force_clones=true \
      op monitor timeout=20s interval=10 \
      op start timeout=20s interval=0 \
      op stop timeout=20s interval=0
  2. raider 資源新增至您為 DLM 建立的儲存基礎群組:

    crm(live)configure# modgroup g-storage add raider

    add 子指令預設會附加新的群組成員。

    如果尚未複製 g-storage 群組,請執行該操作,以使其在所有節點上執行:

    crm(live)configure# clone cl-storage g-storage \
        meta interleave=true target-role=Started
  3. 使用 show 檢閱所做的變更。

  4. 如果所有組態正確無誤,請使用 commit 提交您的變更。

22.4 新增裝置

若要將某部裝置新增到現有的使用中叢集 MD 裝置,請先使用指令 cat /proc/mdstat 確認該裝置在每個節點上均可見。如果裝置不可見,則指令將會失敗。

在一個叢集節點上使用以下指令:

root # mdadm --manage /dev/md0 --add /dev/sdc

新增的新裝置的行為取決於叢集 MD 裝置的狀態:

  • 如果只有一個鏡像裝置處於使用中狀態,則新裝置將會成為鏡像裝置中的第二部裝置,並且會啟動復原程序。

  • 如果叢集 MD 裝置的兩部裝置都處於使用中狀態,則新增的裝置將會成為備用裝置。

22.5 重新新增暫時發生故障的裝置

故障常常是短暫發生的,並且僅限於一個節點。如果在 I/O 操作期間有任何節點發生了故障,則會針對整個叢集將該裝置標示為失敗。

例如,其中一個節點發生纜線故障,可能就會出現這種情況。修正此問題後,您可以重新新增該裝置。與新增新裝置會同步整部裝置不同,這樣只會同步過時的部件。

若要重新新增裝置,請在一個叢集節點上執行以下指令:

root # mdadm --manage /dev/md0 --re-add /dev/sdb

22.6 移除裝置

在執行時期移除裝置以將其取代之前,請執行以下操作:

  1. 檢查 /proc/mdstat 以確定裝置處於失敗狀態。尋找裝置前面有無 (F)

  2. 在一個叢集節點上執行以下指令,以使裝置失敗:

    root # mdadm --manage /dev/md0 --fail /dev/sda
  3. 在一個叢集節點上使用以下指令移除失敗的裝置:

    root # mdadm --manage /dev/md0 --remove /dev/sda

23 Samba 叢集

叢集化 Samba 伺服器為您的異質網路提供了高可用性解決方案。本章介紹了一些背景知識並說明如何設定叢集化 Samba 伺服器。

23.1 概念綜覽

Samba 使用 Trivial Database (TDB) 已有多年。TDB 允許多個應用程式同時執行寫入操作。為了確保所有寫入操作成功執行且彼此不發生衝突,TDB 使用了內部鎖定機制。

Cluster Trivial Database (CTDB) 是現有 TDB 的一個小延伸功能。專案將 CTDB 描述為Samba 和其他專案用於儲存暫存資料之 TDB 資料庫的叢集實作

每個叢集節點都執行一個本地 CTDB 精靈。Samba 會與其本地 CTDB 精靈通訊,而不是直接寫入其 TDB。精靈透過網路交換中繼資料,但實際的讀寫操作是在一個具有快速儲存的本地副本上執行的。CTDB 的概念請參閱圖形 23.1 「CTDB 叢集的結構」

注意
注意:CTDB 僅用於 Samba

目前實作的 CTDB 資源代辦將 CTDB 設定為僅管理 Samba。包括 IP 容錯移轉在內的其他內容應使用 Pacemaker 進行設定。

只有完全同質的叢集支援 CTDB。例如,叢集中的所有節點都需要具有相同的架構。不能混用 x86 與 AMD64。

CTDB 叢集的結構
圖 23.1︰ CTDB 叢集的結構

叢集化的 Samba 伺服器必須共享某些資料:

  • 將 Unix 使用者及群組 ID 與 Windows 使用者及群組相關聯的對應表。

  • 使用者資料庫必須在所有節點之間同步。

  • Windows 網域中成員伺服器的加入資訊必須在所有節點上都可用。

  • 中繼資料 (例如使用中 SMB 工作階段、共享連接以及各類鎖定) 需在所有節點上都可用。

目的是讓擁有 N+1 個節點的叢集化 Samba 伺服器快於僅有 N 個節點的 Samba 伺服器。一個節點不會慢於一部未叢集化的 Samba 伺服器。

23.2 基本組態

注意
注意:變更的組態檔案

CTDB 資源代辦會自動變更 /etc/sysconfig/ctdb。使用 crm ra info CTDB 可列出可以為 CTDB 資源指定的所有參數。

若要設定叢集化的 Samba 伺服器,請執行下列步驟:

程序 23.1︰ 設定基本的叢集化 Samba 伺服器
  1. 準備叢集:

    1. 繼續操作前,請確定已安裝下列套件: ctdb, tdb-toolssamba (smbnmb 資源需要這些套件)。

    2. 依本指南中的第 II 部分 「組態與管理」所述設定叢集 (Pacemaker、OCFS2)。

    3. 設定共用檔案系統 (例如 OCFS2) 並予以掛接,例如,掛接至 /srv/clusterfs。如需相關資訊,請參閱第 18 章 「OCFS2

    4. 如果想要開啟 POSIX ACL,則將其啟用:

      • 對於新 OCFS2 檔案系統,使用:

        root # mkfs.ocfs2 --fs-features=xattr ...
      • 對於現有的 OCFS2 檔案系統,使用:

        root # tunefs.ocfs2 --fs-feature=xattr DEVICE

        確定在檔案系統資源中指定了 acl 選項。按如下所示使用 crm 外圍程序:

        crm(live)configure# primitive ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
    5. 確定 ctdbsmbnmb 服務已停用:

      root # systemctl disable ctdb
      root # systemctl disable smb
      root # systemctl disable nmb
    6. 在所有節點上開啟防火牆的連接埠 4379。這是為了使 CTDB 能夠與其他叢集節點通訊。

  2. 在共享檔案系統上建立一個 CTDB 鎖定目錄:

    root # mkdir -p /srv/clusterfs/samba/
  3. /etc/ctdb/nodes 中插入包含叢集中每個節點之全部私人 IP 位址的所有節點:

    192.168.1.10
    192.168.1.11
  4. 設定 Samba。在 /etc/samba/smb.conf[global] 區段中新增以下行。使用所選的主機名稱取代「CTDB-SERVER」(叢集中的所有節點將顯示為一個此名稱的大節點,以方便操作):

    [global]
        # ...
        # settings applicable for all CTDB deployments
        netbios name = CTDB-SERVER
        clustering = yes
        idmap config * : backend = tdb2
        passdb backend = tdbsam
        ctdbd socket = /var/lib/ctdb/ctdb.socket
        # settings necessary for CTDB on OCFS2
        fileid:algorithm = fsid
        vfs objects = fileid
        # ...
  5. 使用 csync2 將組態檔案複製到所有節點:

    root # csync2 -xv

    如需詳細資訊,請參閱程序 4.6 「使用 Csync2 同步組態檔案」

  6. 將 CTDB 資源新增至叢集:

    root # crm configure
    crm(live)configure# primitive ctdb ocf:heartbeat:CTDB params \
        ctdb_manages_winbind="false" \ 
        ctdb_manages_samba="false" \
        ctdb_recovery_lock="/srv/clusterfs/samba/ctdb.lock" \
        ctdb_socket="/var/lib/ctdb/ctdb.socket" \ 
          op monitor interval="10" timeout="20" \
          op start interval="0" timeout="90" \
          op stop interval="0" timeout="100"
    crm(live)configure# primitive nmb systemd:nmb \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# primitive smb systemd:smb \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# group g-ctdb ctdb nmb smb
    crm(live)configure# clone cl-ctdb g-ctdb meta interleave="true"
    crm(live)configure# colocation col-ctdb-with-clusterfs Mandatory: cl-ctdb cl-clusterfs
    crm(live)configure# order o-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdb
    crm(live)configure# commit
  7. 新增叢集化 IP 位址:

    crm(live)configure# primitive ip ocf:heartbeat:IPaddr2 params ip=192.168.2.222 \
        unique_clone_address="true" \
        op monitor interval="60" \
        meta resource-stickiness="0"
    crm(live)configure# clone cl-ip ip \
        meta interleave="true" clone-node-max="2" globally-unique="true"
    crm(live)configure# colocation col-ip-with-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# order o-ip-then-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# commit

    如果 unique_clone_address 設定為 true,IPaddr2 資源代辦會向指定的位址新增一個複製品 ID,從而導致出現三個不同的 IP 位址。這些位址通常是不需要的,但有助於實現負載平衡。如需有關此主題的詳細資訊,請參閱第 14.2 節 「使用 Linux 虛擬伺服器設定負載平衡」

  8. 提交您的變更:

    crm(live)configure# commit
  9. 檢查結果:

    root # crm status
    Clone Set: cl-storage [dlm]
         Started: [ factory-1 ]
         Stopped: [ factory-0 ]
    Clone Set: cl-clusterfs [clusterfs]
         Started: [ factory-1 ]
         Stopped: [ factory-0 ]
     Clone Set: cl-ctdb [g-ctdb]
         Started: [ factory-1 ]
         Started: [ factory-0 ]
     Clone Set: cl-ip [ip] (unique)
         ip:0       (ocf:heartbeat:IPaddr2):       Started factory-0
         ip:1       (ocf:heartbeat:IPaddr2):       Started factory-1
  10. 從用戶端機器執行測試。在 Linux 用戶端上執行以下指令,確定是否可以將檔案複製到系統或從系統複製檔案:

    root # smbclient //192.168.2.222/myshare

23.3 加入 Active Directory 網域

Active Directory (AD) 是適用於 Windows 伺服器系統的目錄服務。

下面的指示概述了如何將 CTDB 叢集加入 Active Directory 網域:

  1. 程序 23.1 「設定基本的叢集化 Samba 伺服器」 所述建立 CTDB 資源。

  2. 安裝 samba-winbind 套件中可用。

  3. 停用 winbind 服務:

    root # systemctl disable winbind
  4. 定義 winbind 叢集資源:

    root # crm configure
    crm(live)configure# primitive winbind systemd:winbind \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# commit
  5. 編輯 g-ctdb 群組,並在 nmbsmb 資源之間插入 winbind

    crm(live)configure# edit g-ctdb

    儲存變更,然後使用 :w (vim) 關閉編輯器。

  6. 查閱 Windows 伺服器文件,以獲取如何設定 Active Directory 網域的指示。在本範例中,我們使用了以下參數:

    AD 和 DNS 伺服器

    win2k3.2k3test.example.com

    AD 網域

    2k3test.example.com

    叢集 AD 成員 NETBIOS 名稱

    CTDB-SERVER
  7. 程序 23.2 「加入 Active Directory」

最後,將您的叢集加入 Active Directory 伺服器:

程序 23.2︰ 加入 Active Directory
  1. 確定下列檔案包含在要在所有叢集主機上安裝的 Csync2 組態中。

    /etc/samba/smb.conf
    /etc/security/pam_winbind.conf
    /etc/krb5.conf
    /etc/nsswitch.conf
    /etc/security/pam_mount.conf.xml
    /etc/pam.d/common-session

    您也可以使用 YaST 的設定 Csync2模組來完成此任務,請參閱第 4.5 節 「將組態傳輸至所有節點」

  2. 執行 YaST 並從網路服務項目中開啟Windows 網域成員模組。

  3. 輸入網域或工作群組設定,然後按一下確定完成操作。

23.4 對叢集化 Samba 進行除錯與測試

若要對叢集化 Samba 伺服器進行除錯,可以使用下列適用於不同層級的工具:

ctdb_diagnostics

執行此工具可以診斷叢集化 Samba 伺服器。詳細的除錯訊息可協助您追蹤出現的任何問題。

ctdb_diagnostics 指令會搜尋下列檔案,這些檔案必須在所有節點上均可用:

/etc/krb5.conf
/etc/hosts
/etc/ctdb/nodes
/etc/sysconfig/ctdb
/etc/resolv.conf
/etc/nsswitch.conf
/etc/sysctl.conf
/etc/samba/smb.conf
/etc/fstab
/etc/multipath.conf
/etc/pam.d/system-auth
/etc/sysconfig/nfs
/etc/exports
/etc/vsftpd/vsftpd.conf

如果存在 /etc/ctdb/public_addresses/etc/ctdb/static-routes 檔案,則也會對其進行檢查。

ping_pong

使用 ping_pong 可以檢查您的檔案系統是否適用 CTDB。它會對叢集檔案系統執行某些測試,例如連貫性和效能測試 (請參閱 http://wiki.samba.org/index.php/Ping_pong),讓您瞭解叢集在高負載下的表現。

send_arp 工具與 SendArp 資源代辦

SendArp 資源代辦位於 /usr/lib/heartbeat/send_arp (或 /usr/lib64/heartbeat/send_arp)。send_arp 工具會送出無故 ARP (位址解析通訊協定) 封包,可以用來更新其他機器的 ARP 表。這有助於確認容錯移轉程序完成後的通訊問題。如果節點對 Samba 顯示了叢集 IP 位址,而您卻無法連接到節點或 ping 通此節點,請使用 send_arp 指令測試節點是否只需要 ARP 表更新。

如需詳細資訊,請參閱http://wiki.wireshark.org/Gratuitous_ARP

若要對叢集檔案系統的某些方面進行測試,請執行下列步驟:

程序 23.3︰ 測試叢集檔案系統的連貫性和效能
  1. 在一個節點上啟動指令 ping_pong 並將預留位址 N 取代為節點數量加 1。該檔案存放於 ABSPATH/data.txt 共享儲存,因此從任何節點上都可存取 (ABSPATH 表示絕對路徑):

    ping_pong ABSPATH/data.txt N

    僅執行一個節點時,鎖定率應該會很高。如果程式未顯示鎖定率,請更換您的叢集檔案系統。

  2. 在另一個節點上啟動第二個 ping_pong,並使用相同的參數。

    鎖定率應該會有明顯的下降。如果您的叢集檔案系統出現以下任何一種情況,請予以更換:

    • ping_pong 未輸出每秒的鎖定率,

    • 兩個例項中的鎖定率相差較大,

    • 啟動第二個例項後,鎖定率未下降。

  3. 啟動第三個 ping_pong。新增其他節點並注意鎖定率的變化。

  4. 逐個停止 ping_pong 指令。在回到單一節點的情況之前,應會看到鎖定率不斷提高。如果未發生預期的情況,請參閱第 18 章 「OCFS2 中的詳細資訊。

23.5 更多資訊

24 使用 Rear (Relax-and-Recover) 進行災難備援

Relax-and-Recover (Rear,本章中縮寫為 Rear) 是供系統管理員使用的災難備援架構。Rear 是一個 Bash 程序檔集合,您需要依據要在發生災難時加以保護的特定線上環境調整這些程序檔。

沒有任何災難備援解決方案能夠現成地解決問題。因此,必須在任何災難發生之前做好準備。

24.1 概念綜覽

以下幾節介紹了一般性的災難備援概念,以及您要使用 Rear 成功復原所需執行的基本步驟。此外,還提供了一些關於 Rear 要求、要注意的一些限制、案例和備份工具的指導。

24.1.1 建立災難備援計畫

在最壞的情況發生之前採取措施:分析 IT 基礎架構是否存在任何重大風險,評估您的預算,並建立災難備援計畫。如果您還沒有現行的災難備援計畫,請先瞭解關於以下每個步驟的一些資訊:

  • 風險分析: 對您的基礎結構進行一次全面的風險分析。列出所有可能存在的威脅並評估其嚴重性。判斷這些威脅發生的可能性,並對它們排列優先順序。建議進行一個簡單的分類:可能性與影響。

  • 預算規劃: 分析的結果會是一個綜覽,告訴您哪些風險可以承受,哪些風險對企業影響很大。問問自己,怎樣才能將風險將至最低、這要付出多大的代價。根據公司的規模大小,將整個 IT 預算的 2% 到 50% 花費在災難備援上。

  • 災難備援計劃開發: 製作檢查清單、測試程序、建立並指定優先順序,以及清查 IT 基礎結構。定義當基礎結構中有服務失敗時,要如何處理問題。

  • 測試: 定義完一份詳細的計劃後,需對其進行測試。一年至少測試一次。所使用的測試硬體應與主要 IT 基礎結構相同。

24.1.2 災難備援意味著什麼?

如果線上環境中的某個系統已經損毀 (可能出於任何原因,例如,硬體損壞、組態不當或軟體問題),您需要重新建立該系統。可以在相同的硬體或者相容的替代硬體上重新建立。重新建立系統並不只是代表著從備份中還原檔案,還包括準備系統的儲存區 (與檔案系統、分割區和掛接點相關),以及重新安裝開機載入程式。

24.1.3 災難備援如何與 Rear 一起運作?

在系統正常運作時建立檔案的備份,並在復原媒體上建立復原系統。該復原系統包含一個復原安裝程式。

當系統已經損毀時,您可以更換受損的硬體 (如果需要),將復原系統從復原媒體開機,然後啟動復原安裝程式。復原安裝程式會重新建立系統:首先,它會準備儲存區 (分割區、檔案系統、掛接點),然後從備份中還原檔案。最後,它會重新安裝開機載入程式。

24.1.4 Rear 要求

若要使用 Rear,您至少需要兩個相同的系統:用來執行線上環境的機器,以及相同的測試機器。這裡所指的相同,舉例而言就是使用相同核心驅動程式的網路卡,可以用其中一個來取代另一個。

警告
警告:需要相同的驅動程式

如果某個硬體元件使用的驅動程式不同於線上環境中所用的驅動程式,則 Rear 不會將該元件視為相同。

24.1.5 Rear 版本更新

SUSE Linux Enterprise High Availability Extension 15 SP2 隨附 Rear 版本 2.3,由以下套件提供: rear23a.

注意
注意:在變更記錄中尋找重要資訊

有關錯誤修復、不相容性及其他問題的任何資訊都可在套件的變更記錄中找到。如果需要重新驗證災難備援程序,建議您另外也要檢閱 Rear 的較新套件版本。

您需要瞭解 Rear 的以下問題:

  • 若要能夠在 UEFI 系統實現災難備援,您至少需要 Rear 1.18.a 版本和套件 ebiso。只有此版本支援新的輔助程式工具 /usr/bin/ebiso。此輔助程式工具用於建立 UEFI 可開機 Rear 系統 ISO 影像。

  • 如果您使用一個 Rear 版本實作的災難備援程序已經過測試並且功能完備,請不要更新 Rear。請保留該 Rear 套件,並且不要變更您的災難備援方法!

  • Rear 的版本更新是以獨立套件的形式提供,這些套件在設計上有意彼此衝突,目的是防止所安裝的版本意外地由另一個版本取代。

在以下情況下,您需要全面重新驗證現有的災難備援程序:

  • 針對每個 Rear 版本更新。

  • 手動更新 Rear 時。

  • 針對 Rear 使用的每個軟體。

  • 更新底層系統元件 (例如 partedbtrfs 及類似元件) 時。

24.1.6 針對 Btrfs 的限制

如果您使用 Btrfs,會存在以下限制。

您的系統包括子磁碟區,但不包括快照子磁碟區

至少需要 Rear 版本 1.17.2.a。此版本支援重新建立正常的 Btrfs 子磁碟區結構 (不包括快照子磁碟區)。

您的系統包括快照子磁碟區
警告
警告

無法像往常一樣使用以檔案為基礎的備份軟體來備份和還原 Btrfs 快照子磁碟區。

雖然 Btrfs 檔案系統上的最新快照子磁碟區幾乎不佔用任何磁碟空間 (因為 Btrfs 具有寫入時複製功能),但在使用以檔案為基礎的備份軟體時,這些檔案將會做為完整檔案進行備份。在備份中,這些檔案的大小為其原始檔案大小的兩倍。因此,也就無法將快照還原到它們以前在原始系統上的狀態。

您的 SLE 系統需要相符的 Rear 組態

例如,SLE12 GA、SLE12 SP1 和 SLE12 SP2 中的設定具有數個不同的不相容 Btrfs 預設結構。因此,使用相符的 Rear 組態檔案至關重要。請參閱範例檔案 /usr/share/rear/conf/examples/SLE12*-btrfs-example.conf

24.1.7 案例和備份工具

Rear 能夠建立可從本地媒體 (例如硬碟、隨身碟、DVD/CD-R) 或透過 PXE 開機的災難備援系統 (包括系統專屬的復原安裝程式)。可以依照範例 24.1所述,將備份資料儲存在網路檔案系統 (例如 NFS) 中。

Rear 不會取代檔案備份,而是對其進行補充。依預設,Rear 支援一般 tar 指令和多種協力廠商備份工具 (例如 Tivoli Storage Manager、QNetix Galaxy、Symantec NetBackup、EMC NetWorker 或 HP DataProtector)。如需將 Rear 與 EMC NetWorker (用做備份工具) 一起使用的範例組態,請參閱範例 24.2

24.1.8 基本步驟

若要在發生災難時使用 Rear 成功復原,需要執行以下基本步驟:

設定 Rear 和您的備份解決方案

這會涉及到一些任務,例如,編輯 Rear 組態檔案、調整 Bash 程序檔,以及設定您要使用的備份解決方案。

建立復原安裝系統

在要保護的系統處於正常運作狀態時,使用 rear mkbackup 指令建立檔案備份,並產生包含系統特定 Rear 復原安裝程式的復原系統。

測試復原程序

每當使用 Rear 建立災難備援媒體後,都要全面測試災難備援程序。所用測試機器上的硬體,必須與線上環境中的硬體相同。如需詳細資訊,請參閱第 24.1.4 節 「Rear 要求」

從災難中復原

發生災難後,更換任何受損的硬體 (如果需要)。然後,將 Rear 復原系統開機,並使用 rear recover 指令啟動復原安裝程式。

24.2 設定 Rear 和您的備份解決方案

若要設定 Rear,您至少需要編輯 Rear 組態檔案 /etc/rear/local.conf,此外可以根據需要編輯屬於 Rear 架構一部分的 Bash 程序檔。

具體而言,您需要定義 Rear 應執行的以下任務:

  • 當您的系統是透過 UEFI 開機時: 如果您的系統是透過 UEFI 開機載入程式開機,請安裝套件 ebiso 並將下行新增至 /etc/rear/local.conf

    ISO_MKISOFS_BIN=/usr/bin/ebiso
  • 如何備份檔案以及如何建立和儲存災難備援系統: 這需要在 /etc/rear/local.conf 中設定。

  • 需要重新建立的確切項目 (分割區、檔案系統、掛接點,等等): 這可以在 /etc/rear/local.conf 中定義 (例如,要排除哪個項目)。若要重新建立非標準系統,您可能需要增強 Bash 程序檔。

  • 復原程序的運作方式: 若要變更 Rear 產生復原安裝程式的方式,或者要調整 Rear 復原安裝程式執行的動作,您需要編輯 Bash 程序檔。

若要設定 Rear,請將您的選項新增至 /etc/rear/local.conf 組態檔案中 (以前的組態檔案 /etc/rear/sites.conf 已從套件中移除。但是,如果您有來自以前設定中的此檔案,Rear 將會繼續使用該檔案。)

所有 Rear 組態變數及其預設值都在 /usr/share/rear/conf/default.conf 中設定。Examples 子目錄中提供了一些使用者組態 (例如,/etc/rear/local.conf 中設定的項目) 的範例檔案 (*example.conf)。如需詳細資訊,請參閱 Rear man 頁面。

您應該使用一個相符的範例組態檔案做為範本,然後根據需要對其進行調整,以此建立您的特定組態檔案。從數個範例組態檔案中複製各選項,然後將其貼至與特定系統相符的特定 /etc/rear/local.conf 檔案中。請勿使用原始的範例組態檔案,因為這些檔案提供了可能用於特定設定的變數綜覽。

範例 24.1︰ 使用 NFS 伺服器儲存檔案備份

Rear 可以在多種不同的情況下使用。以下範例使用 NFS 伺服器做為檔案備份的儲存區。

  1. 《SUSE Linux Enterprise Server 15 SP2 管理指南》 中所述,使用 YaST 設定 NFS 伺服器。

  2. /etc/exports 檔案中定義 NFS 伺服器的組態。確定 NFS 伺服器上的目錄 (要儲存備份資料的位置) 具有適當的掛接選項。例如:

    /srv/nfs *([...],rw,no_root_squash,[...])

    用 NFS 伺服器上的備份資料路徑取代 /srv/nfs,並調整掛接選項。您可能需要 no_root_squash,因為 rear mkbackup 指令以 root 身分執行。

  3. 調整各個 BACKUP 參數 (在組態檔案 /etc/rear/local.conf 中),以便 Rear 將檔案備份儲存在相應的 NFS 伺服器上。所安裝系統中的 /usr/share/rear/conf/examples/SLE*-example.conf 下提供了範例。

範例 24.2︰ 使用 EMC NetWorker 等協力廠商備份工具

若要使用協力廠商備份工具代替 tar,您需要在 Rear 組態檔案中進行相應的設定。

以下是 EMC NetWorker 的範例組態。將此組態片段新增至 /etc/rear/local.conf 中,並依據您的設定調整該片段:

BACKUP=NSR
    OUTPUT=ISO
    BACKUP_URL=nfs://host.example.com/path/to/rear/backup
    OUTPUT_URL=nfs://host.example.com/path/to/rear/backup
    NSRSERVER=backupserver.example.com
    RETENTION_TIME="Month"

24.3 建立復原安裝系統

依照第 24.2 節所述設定 Rear 後,使用以下指令建立復原安裝系統 (包括 Rear 復原安裝程式) 和檔案備份:

rear -d -D mkbackup

該指令會執行以下步驟:

  1. 分析目標系統並收集資訊,尤其是關於磁碟配置 (分割區、檔案系統、掛接點) 和開機載入程式的資訊。

  2. 使用第一步收集的資訊建立一個可開機的復原系統。產生的 Rear 復原安裝程式特定於在發生災難時要保護的系統。使用該安裝程式只能重新建立這個特定的系統。

  3. 呼叫設定的備份工具來備份系統和使用者檔案。

24.4 測試復原程序

建立復原系統後,在具有相同硬體的測試機器上測試復原程序。並請參閱第 24.1.4 節 「Rear 要求」。確定測試機器的設定正確,並且可以取代您的主要機器運作。

警告
警告:使用相同的硬體執行全面測試

必須在機器上全面測試災難備援程序。請定期測試復原程序,以確定一切如預期運作。

程序 24.1︰ 在測試機器上執行災難備援
  1. 將您在第 24.3 節中建立的復原系統燒錄到 DVD 或 CD 上,以建立復原媒體。或者,您可以透過 PXE 使用網路開機。

  2. 從復原媒體將測試機器開機。

  3. 從功能表中,選取復原

  4. root 的身分登入 (不需要密碼)。

  5. 輸入以下指令來啟動復原安裝程式:

    rear -d -D recover

    如需 Rear 在此過程中執行之步驟的詳細資料,請參閱復原程序

  6. 完成復原程序後,檢查是否已成功地重新建立系統,並且該系統是否可在線上環境中取代原始系統。

24.5 從災難中復原

如果發生災難,請視需要更換任何受損的硬體。然後依照程序 24.1所述,使用已修復的機器 (或使用已經測試並可取代原始系統運作的相同機器) 繼續操作。

rear recover 指令將執行以下步驟:

復原程序
  1. 還原磁碟配置 (分割區、檔案系統和掛接點)。

  2. 從備份中還原系統和使用者檔案。

  3. 還原開機載入程式。

24.6 更多資訊

第 IV 部分 附錄

  • A 疑難排解
  • 當出現奇怪的現象時,使用者可能會搞不清楚狀況,尤其是剛剛開始使用 High Availability 的使用者。不過,您可以借助幾個公用程式來深入瞭解 High Availability 的內部程序。本章推薦了各種解決方案。

  • B 命名慣例
  • 本指南對叢集節點和名稱、叢集資源與條件約束使用以下命名慣例。

  • C 叢集管理工具 (指令行)
  • High Availability Extension 隨附了一組功能全面的工具,可協助您利用指令行來管理叢集。本章介紹管理 CIB 中的叢集組態與叢集資源所需的工具。附錄 A 「疑難排解 中介紹了管理資源代辦的其他指令行工具和用於對設定進行除錯和疑難排解的工具。

  • D 在沒有 root 存取權限的情況下執行叢集報告
  • 所有叢集節點必須能透過 SSH 互相存取。諸如 crm report (用於疑難排解) 等工具以及 Hawk2 的歷程總管,要求節點之間透過無密碼的 SSH 方式來存取,否則它們只能從目前節點收集資料。

A 疑難排解

當出現奇怪的現象時,使用者可能會搞不清楚狀況,尤其是剛剛開始使用 High Availability 的使用者。不過,您可以借助幾個公用程式來深入瞭解 High Availability 的內部程序。本章推薦了各種解決方案。

A.1 安裝和前期階段的步驟

疑難排解安裝套件或使叢集上線時所遇到的問題。

是否已安裝 HA 套件?

設定和管理叢集所需的套件包含於高可用性安裝模式中,隨 High Availability Extension 一起提供。

依《安裝與設定快速入門》所述,檢查 High Availability Extension 是否已做為 SUSE Linux Enterprise Server 15 SP2 的延伸安裝在每個叢集節點上,以及每部機器上是否安裝了 High Availability 模式。

所有叢集節點的初始組態是否都相同?

為了能夠相互通訊,屬於同一叢集的所有節點均需使用相同的 bindnetaddrmcastaddrmcastport,如第 4 章 「使用 YaST 叢集模組 中所述。

請檢查 /etc/corosync/corosync.conf 中為所有叢集節點設定的通訊通道與選項是否都相同。

若使用加密通訊,請檢查是否所有叢集節點上的 /etc/corosync/authkey 檔案都可使用。

nodeid 以外的所有 corosync.conf 設定都必須相同;所有節點上的 authkey 檔案都必須相同。

防火牆允許透過 mcastport 進行通訊嗎?

若用於在各叢集節點間通訊的 mcastport 被防火牆阻擋,這些節點將無法相互查看。依照第 4 章 「使用 YaST 叢集模組Article “安裝與設定快速入門”中所述使用 YaST 或開機程序檔執行初始設定時,防火牆設定通常會自動進行調整。

若要確保 mcastport 不被防火牆阻擋,請檢查每個節點上的防火牆設定。

每個叢集節點上是否都啟動了 Pacemaker 和 Corosync?

通常,啟動 Pacemaker 也會啟動 Corosync 服務。若要檢查這兩個服務是否在執行,請使用以下指令:

root # crm cluster status

如果它們未在執行,請執行以下指令將其啟動:

root # crm cluster start

A.2 記錄

可以在哪里找到記錄檔案?

Pacemaker 會將其記錄檔案寫入 /var/log/pacemaker 目錄。主要的 Pacemaker 記錄檔案是 /var/log/pacemaker/pacemaker.log。如果您找不到記錄檔案,請查看 /etc/sysconfig/pacemaker 中的記錄記錄設定 (Pacemaker 自己的組態檔案)。如果該組態檔案中設定了 PCMK_logfile,Pacemaker 將使用此參數定義的路徑。

如果您需要一份顯示所有相關記錄檔案的叢集層級報告,請參閱如何建立一份包含所有叢集節點分析資訊的報告?以瞭解詳細資訊。

我已啟用監控,但為何記錄檔案中沒有監控操作的追蹤資訊?

除非有錯誤發生,否則 pacemaker-execd 精靈不會記錄週期性的監控操作。記錄所有週期性操作會產生太多干擾。因此,該精靈只會每小時記錄一次週期性監控操作。

我只收到一則失敗訊息。能取得詳細資訊嗎?

請將 --verbose 參數新增至您的指令。若多次執行此操作,將產生非常詳細的除錯輸出。請參閱記錄資料 (sudo journalctl -n) 以獲取有用提示。

如何取得所有節點和資源的綜覽?

請使用 crm_mon 指令。以下指令將顯示資源操作歷程 (選項 -o) 和非使用中資源 (-r):

root # crm_mon -o -r

狀態變更時,顯示畫面會重新整理 (若要取消此功能,請按 CtrlC )。範例顯示內容如下:

範例 A.1︰ 停止的資源
Last updated: Fri Aug 15 10:42:08 2014
Last change: Fri Aug 15 10:32:19 2014
 Stack: corosync
Current DC: bob (175704619) - partition with quorum
Version: 1.1.12-ad083a8
2 Nodes configured
3 Resources configured
       
Online: [ alice bob ]
       
Full list of resources:
       
my_ipaddress    (ocf:heartbeat:Dummy): Started bob
my_filesystem   (ocf:heartbeat:Dummy): Stopped
my_webserver    (ocf:heartbeat:Dummy): Stopped
       
Operations:
* Node bob: 
    my_ipaddress: migration-threshold=3
      + (14) start: rc=0 (ok)
      + (15) monitor: interval=10000ms rc=0 (ok)
      * Node alice:

http://www.clusterlabs.org/pacemaker/doc/ 上《Pacemaker Explained》(Pacemaker 說明) PDF 檔案中的「How are OCF Return Codes Interpreted?」(如何解譯 OCF 傳回代碼?) 一節介紹了三種不同的復原類型。

如何檢視記錄?

若要詳細檢視叢集中的目前活動,請使用以下指令:

root # crm history log [NODE]

用您要檢查的節點取代 NODE,或將其保留空白。如需更多資訊,請參閱第 A.5 節 「瀏覽記錄」

A.3 資源

如何清理我的資源?

請使用以下指令:

root # crm resource list
crm resource cleanup rscid [node]

如果不指定節點,系統會清理所有節點上的資源。如需詳細資訊,請參閱第 8.4.4 節 「清理資源」

如何列出目前已知的資源?

使用指令 crm resource list 即可顯示目前資源。

我已設定某個資源,但它總是失敗。為什麼?

若要使用 ocf-tester 檢查 OCF 程序檔,例如:

ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \
  /usr/lib/ocf/resource.d/heartbeat/IPaddr

若需納入多個參數,可以使用多個 -o。執行 crm ra info 代辦,可顯示必需參數和可選參數的清單,指令範例如下:

root # crm ra info ocf:heartbeat:IPaddr

在執行 ocf-tester 之前,請確定該資源不受叢集管理。

資源為何不容錯移轉,並且為何沒有發生錯誤?

已終止的節點可能會被視為不正常。如果是這樣,就必須對它進行圍籬區隔。如果 STONITH 資源無法正常運作或者不存在,則另一個節點將會等待發生圍籬區隔。圍籬區隔逾時值通常設定得很大,因此可能經過很長一段時間後才會發生明顯的問題跡象 (如果最終會出現的話)。

另外還有一種可能,那就是此節點上不允許執行某個資源。這可能是因為之前曾發生了失敗,而此失敗尚未得到清理。或者,可能是之前執行了某個管理動作,即新增了分數為負數的位置條件約束。例如,使用 crm resource migrate 指令插入了這樣的位置條件約束。

為何我總是無法確定資源的執行位置?

如果資源不存在位置條件約束,則其投放至的節點 (基本上) 是由系統隨機選擇的。強烈建議您總是為資源指定一個偏好節點。這並不意味著您需要為所有資源指定位置偏好設定。對於一組相關 (並存) 的資源,一個偏好設定就已足夠。節點偏好設定如下所示:

location rsc-prefers-alice rsc 100: alice

A.4 STONITH 和圍籬區隔

我的 STONITH 資源為何不啟動?

啟動 (或啟用) 操作的過程會檢查裝置狀態。如果裝置未就緒,STONITH 資源將無法啟動。

此外,系統會要求 STONITH 外掛程式產生一份主機清單。如果此清單為空,則執行 STONITH 資源將毫無意義,因為這無法關閉任何節點。清單中會過濾掉執行 STONITH 的主機名稱,因為節點不能關閉自身。

如果您想要使用單主機管理裝置 (如無人職守裝置),請確認 STONITH 資源不得在應當圍籬區隔的節點上執行。請使用負無限位置節點偏好設定 (條件約束)。叢集會將 STONITH 資源移至另一個可以啟動該資源的位置,但移動前會向您發出通知。

為何我使用了 STONITH 資源,圍籬區隔仍不發生?

每個 STONITH 資源必須提供一個主機清單。您可以手動將此清單插入 STONITH 資源組態,也可以從裝置自身 (例如,從出口名稱) 擷取。這取決於 STONITH 外掛程式的特性。pacemaker-fenced 使用該清單來確定哪個 STONITH 資源可以圍籬區隔目標節點。僅當目標節點包含在該清單中時,STONITH 資源才會停止 (圍籬區隔) 該節點。

如果 pacemaker-fenced 在 STONITH 資源執行後所提供的任何主機清單中都找不到該節點,它會詢問其他節點上的 pacemaker-fenced 例項。如果其他 pacemaker-fenced 例項的主機清單中也未包含目標節點,則圍籬區隔要求最終會在發出要求的節點上逾時。

為何我的 STONITH 資源有時會失敗?

如果廣播流量過多,電源管理裝置可能無法回應。請增大監控操作的間隔。假設圍籬區隔在一段時間內只需執行一次 (甚至永遠無需執行),每隔幾小時檢查一次裝置狀態就已足夠。

另外,其中的一些裝置可能拒絕同時與多方通訊。如果叢集嘗試測試狀態時,您將終端機或瀏覽器工作階段保持為開啟狀態,這便可能會產生問題。

A.5 瀏覽記錄

如何從發生故障的資源中取回狀態資訊或記錄?

使用 history 指令及其子指令 resource

root # crm history resource NAME1

這只會傳回指定資源的完整狀態轉換記錄。不過,您也可以調查多個資源,在第一個資源名稱的後面附加更多資源名稱即可。

如果您遵循了某種命名慣例 (請參閱一節),則使用 resource 指令可以更輕鬆地調查一組資源。例如,以下指令將會調查以 db 開頭的所有基本資源:

root # crm history resource db*

檢視 /var/cache/crm/history/live/alice/ha-log.txt 中的記錄檔案。

如何減少歷程輸出?

history 指令有兩個選項:

  • 使用 exclude

  • 使用 timeframe

exclude 指令可讓您設定額外的規則運算式,用於從記錄中排除特定的模式。例如,以下指令會排除所有 SSH、systemd 和核心訊息:

root # crm history exclude ssh|systemd|kernel.

使用 timeframe 指令可將輸出限制為特定的範圍。例如,以下指令會顯示 8 月 23 日 12:00 到 12:30 的所有事件:

root # crm history timeframe "Aug 23 12:00" "Aug 23 12:30"
如何儲存工作階段以便日後檢查?

當您遇到錯誤或者需要進一步調查的事件時,儲存所有目前設定的做法非常有用。您可以將儲存的檔案傳送給支援人員,或者使用 bzless 進行檢視。例如:

crm(live)history# timeframe "Oct 13 15:00" "Oct 13 16:00"
crm(live)history# session save tux-test
crm(live)history# session pack
Report saved in '/root/tux-test.tar.bz2'

A.6 Hawk2

取代自行簽署的證書

若要避免在首次啟動 Hawk 時出現關於自行簽署的證書的警告,請以您自己的證書或官方證書管理中心 (CA) 簽署的證書取代自動建立的證書:

  1. 以私用金鑰取代 /etc/hawk/hawk.key

  2. 以 Hawk2 應提供的證書取代 /etc/hawk/hawk.pem

將檔案的擁有權變更為 root:haclient 並使檔案可被群組存取:

chown root:haclient /etc/hawk/hawk.key /etc/hawk/hawk.pem
chmod 640 /etc/hawk/hawk.key /etc/hawk/hawk.pem

A.7 其他

如何在所有叢集節點上執行指令?

請使用 pssh 指令來完成此項任務。如果需要,請安裝 pssh. 建立一個檔案 (例如 hosts.txt),將您要造訪的所有 IP 位址或主機名稱都收集在其中。確定您可以使用 ssh 登入 hosts.txt 檔案中所列的每個主機。如果所有工作均已準備妥當,請依照以下範例執行 pssh 並使用 hosts.txt 檔案 (選項 -h) 和互動模式 (選項 -i):

pssh -i -h hosts.txt "ls -l /corosync/*.conf"
[1] 08:28:32 [SUCCESS] root@venus.example.com
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
[2] 08:28:32 [SUCCESS] root@192.168.2.102
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
我的叢集狀態為何?

若要查看叢集目前的狀態,請使用程式 crm_moncrm status。此時會顯示目前 DC,以及目前節點已知的所有節點與資源。

為何我叢集中的一些節點看不到彼此?

導致的原因有多種:

  • 請先查看組態檔案 /etc/corosync/corosync.conf。檢查叢集內各節點的多點傳播或單點傳播位址是否相同 (使用關鍵字 mcastaddrinterface 區段中尋找)。

  • 檢查防火牆設定。

  • 檢查交換器是否支援多點傳播或單點傳播位址。

  • 檢查節點之間的連接是否中斷。最常見的原因是防火牆設定不正確。這還可能是導致電腦分裂狀況的原因,其中的叢集被分區。

為何無法掛接 OCFS2 裝置?

檢查記錄訊息 (sudo journalctl -n) 中是否包含以下行:

Jan 12 09:58:55 alice pacemaker-execd: [3487]: info: RA output: [...]
  ERROR: Could not load ocfs2_stackglue
Jan 12 16:04:22 alice modprobe: FATAL: Module ocfs2_stackglue not found.

此案例中缺少了核心模組 ocfs2_stackglue.ko。請根據所安裝的核心安裝套件 ocfs2-kmp-defaultocfs2-kmp-paeocfs2-kmp-xen

如何建立一份包含所有叢集節點分析資訊的報告?

在 crm 外圍程序中,可以使用 crm report 建立報告。此工具將會編譯:

  • 整個叢集的記錄檔案

  • 套件狀態

  • DLM/OCFS2 狀態

  • 系統資訊,

  • CIB 歷程

  • 磁心傾印報告的剖析結果 (如果已安裝 debuginfo 套件)

通常需要配合以下指令執行 crm report

root # crm report -f 0:00 -n alice -n bob

該指令會擷取主機 alice 和 bob 中從凌晨 0 點開始的所有資訊,並在目前的目錄中建立一個名為 crm_report-日期.tar.bz2*.tar.bz2 歸檔,例如,crm_report-Wed-03-Mar-2012。如果只需要特定時間範圍的資訊,請使用 -t 選項新增結束時間。

警告
警告:移除敏感性資訊

crm report 工具會嘗試從 CIB 和 PE 輸入檔案中移除所有敏感性資訊,但它並不能包辦一切。如果您還有更多敏感性資訊,請透過 -p 選項 (請參閱 man 頁面) 提供其他模式。記錄檔案以及 crm_monccm_toolcrm_verify 輸出不會被清理。

在以任何方式共享您的資料之前,請先檢查歸檔,並移除您不想公開的所有資訊。

可以使用其他選項自訂指令。例如,如果您有一個 Pacemaker 叢集,那麼您肯定想新增 -A 選項。如果您的另一個使用者有權存取該叢集,請使用 -u 選項並指定此使用者 (不同於 roothacluster 使用者)。如果您有一個非標準 SSH 連接埠,請使用 -X 選項新增該連接埠 (例如,如果連接埠為 3479,則使用 -X "-p 3479")。如需瞭解更多選項,請參閱 crm report 的 man 頁面。

crm report 分析了所有相關記錄檔案並建立了目錄 (或歸檔) 之後,請檢查記錄檔案中是否有大寫的 ERROR 字串。報告的上層目錄中最重要的檔案包括:

analysis.txt

比較檔案,所有節點上都應相同。

corosync.txt

包含 Corosync 組態檔案的副本。

crm_mon.txt

包含 crm_mon 指令的輸出。

description.txt

包含各節點上所有的叢集套件版本。還有一個特定於節點的 sysinfo.txt 檔案。它連結至頂層目錄。

可以使用此檔案做為範本來描述您遇到的問題,然後將它張貼到 https://github.com/ClusterLabs/crmsh/issues

members.txt

所有節點的清單

sysinfo.txt

包含所有相關套件名稱及其版本的清單。此外,還有一個不同於原始 RPM 套件的組態檔案清單。

特定於節點的檔案儲存在以節點名稱命名的子目錄中。其中包含相應節點的 /etc 目錄副本。

如果您需要簡化引數,請在組態檔案 /etc/crm/crm.confreport 部分中設定預設值。更多資訊請參閱 man 頁面 man 8 crmsh_hb_report

A.8 更多資訊

如需有關 Linux 上高可用性的其他資訊,包括設定叢集資源及管理和自訂高可用性叢集,請參閱 http://clusterlabs.org/wiki/Documentation

B 命名慣例

本指南對叢集節點和名稱、叢集資源與條件約束使用以下命名慣例。

叢集節點

叢集節點使用人名:

alice、bob、charlie、doro 和 eris

叢集站點名稱

叢集站點依城市名稱命名:

amsterdam、berlin、canberra、dublin、fukuoka、gizeh、hanoi 和 istanbul

叢集資源

基本資源

無字首

群組

字首 g-

複製品

字首 cl-

可升級複製品

(以前稱為多狀態資源)

字首 ms-

條件約束

順序條件約束

字首 o-

位置條件約束

字首 loc-

並存條件約束

字首 col-

C 叢集管理工具 (指令行)

High Availability Extension 隨附了一組功能全面的工具,可協助您利用指令行來管理叢集。本章介紹管理 CIB 中的叢集組態與叢集資源所需的工具。附錄 A 「疑難排解 中介紹了管理資源代辦的其他指令行工具和用於對設定進行除錯和疑難排解的工具。

注意
注意:使用 crmsh

此工具僅供專家使用。通常情況下,建議您使用 crm 外圍程序 (crmsh) 來管理叢集。

以下清單提供了多項與叢集管理相關的任務,並簡要介紹了用於完成這些任務的工具:

監控叢集狀態

crm_mon 指令可讓您監控叢集狀態與組態。其輸出包括節點數、uname、UUID、狀態、叢集中設定的資源及其各自的目前狀態。crm_mon 的輸出可顯示在主控台中或列印成 HTML 檔案。如果提供無狀態區段的叢集組態檔案,crm_mon 就會建立節點及資源的綜覽 (如檔案中所指定)。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_mon 的 man 頁面。

管理 CIB

cibadmin 指令是用於操作 CIB 的低階管理指令。它可用來傾印、更新及修改所有或部分 CIB,刪除整個 CIB,或執行其他 CIB 管理操作。如需此工具的用途與指令語法的詳細介紹,請參閱 cibadmin 的 man 頁面。

管理組態變更

crm_diff 指令可協助您建立並套用 XML 修補程式。此指令可用於視覺化兩個叢集組態版本之間的變更,或者儲存變更以便在以後使用 cibadmin 套用變更。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_diff 的 man 頁面。

操作 CIB 屬性

crm_attribute 指令可讓您查詢並操作節點屬性和要在 CIB 中使用的叢集組態選項。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_attribute 的 man 頁面。

驗證叢集組態

crm_verify 指令可檢查組態資料庫 (CIB) 的一致性及其他問題。它可檢查檔案是否包含組態或連接正在執行的叢集。它可報告兩類問題。錯誤必須要加以修復,High Availability Extension 才能正常運作,而是否需解決警告問題則由管理員來決定。crm_verify 可協助建立新組態或修改的組態。您可在執行中的叢集中建立 CIB 的本地副本、對其進行編輯,並使用 crm_verify 進行驗證,然後使用 cibadmin 使新組態生效。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_verify 的 man 頁面。

管理資源組態

crm_resource 指令可在叢集上執行各種與資源相關的動作。它可讓您修改已設定資源的定義,啟動和停止資源,或在節點間刪除和移轉資源。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_resource 的 man 頁面。

管理資源失敗計數

crm_failcount 指令會查詢指定節點上每個資源的失敗次數。此工具還可用來重設 failcount,允許資源在失敗次數過多的節點上重新執行。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_failcount 的 man 頁面。

管理節點的待命狀態

crm_standby 指令可操作節點的待命屬性。待命模式下的任何節點都無法再代管資源,且其中的所有資源也都必須移出。執行核心更新等維護任務時,待命模式十分有用。移除節點的待命屬性,可讓其再次成為叢集的完全使用中成員。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_standby 的 man 頁面。

D 在沒有 root 存取權限的情況下執行叢集報告

所有叢集節點必須能透過 SSH 互相存取。諸如 crm report (用於疑難排解) 等工具以及 Hawk2 的歷程總管,要求節點之間透過無密碼的 SSH 方式來存取,否則它們只能從目前節點收集資料。

如果無密碼 SSH root 存取不符合法規要求,您可以使用一種解決方式來執行叢集報告。該解決方式包括以下基本步驟:

  1. 建立專用的本地使用者帳戶 (用於執行 crm report)。

  2. 為該使用者帳戶設定無密碼 SSH 存取 (最好是使用非標準 SSH 埠)。

  3. 為該使用者設定 sudo

  4. 以該使用者的身分執行 crm report

依預設,crm report 在執行時會先以 root 身分嘗試登入遠端節點,如果無法登入,則嘗試以 hacluster 使用者身分登入。但是,如果您的本地安全規則阻止使用 SSH 進行 root 登入,則所有遠端節點上都無法執行程序檔。即使嘗試以 hacluster 使用者身分執行程序檔也會失敗,因為這是一個服務帳戶,其外圍程序設定為 /bin/false,因此會阻止登入。建立專用的本地使用者是在高可用性叢集中所有節點上成功執行 crm report 程序檔的唯一可行做法。

D.1 建立本地使用者帳戶

在以下範例中,我們將透過指令行建立名為 hareport 的本地使用者。密碼可以是符合安全要求的任何值。或者,您也可以使用 YaST 建立使用者帳戶並設定密碼。

程序 D.1︰ 建立用於執行叢集報告的專用使用者帳戶
  1. 啟動外圍程序,然後建立使用者 hareport (其主目錄為 /home/hareport ):

    root # useradd -m -d /home/hareport -c "HA Report" hareport
  2. 為該使用者設定密碼:

    root # passwd hareport
  3. 依照提示輸入該使用者的密碼兩次。

重要
重要:需要在每個叢集節點上使用同一個使用者

若要在所有節點上建立相同的使用者帳戶,請在每個叢集節點上重複上述步驟。

D.2 設定無密碼 SSH 帳戶

程序 D.2︰ 為非標準埠設定 SSH 精靈

SSH 精靈與 SSH 用戶端預設會在埠 22 上通訊和監聽。如果您的網路安全指導方針要求將預設 SSH 埠變更為編號較高的替代埠,則您需要修改精靈的組態檔案 /etc/ssh/sshd_config

  1. 若要修改預設埠,請在該檔案中搜尋 Port 行,取消註解該行,然後視需要進行編輯。例如,可將該行設定為:

    Port 5022
  2. 如果您的組織不允許 root 使用者存取其他伺服器,請在該檔案中搜尋 PermitRootLogin 項目,取消註解該項目,然後將它設定為 no

    PermitRootLogin no
  3. 或者,執行以下指令以在該檔案的末尾新增相應行:

    root # echo “PermitRootLogin no” >> /etc/ssh/sshd_config
    root # echo “Port 5022” >> /etc/ssh/sshd_config
  4. 修改 /etc/ssh/sshd_config 後,重新啟動 SSH 精靈以使新的設定生效:

    root # systemctl restart sshd
重要
重要:需要在每個叢集節點上使用相同的設定

在每個叢集節點上重複上述 SSH 精靈組態。

程序 D.3︰ 為非標準埠設定 SSH 用戶端

若要在叢集中的所有節點上進行 SSH 埠變更,一種有效的做法是修改 SSH 組態檔案 /etc/ssh/sshd_config

  1. 若要修改預設埠,請在該檔案中搜尋 Port 行,取消註解該行,然後視需要進行編輯。例如,可將該行設定為:

    Port 5022
  2. 或者,執行以下指令以在該檔案的末尾新增相應行:

    root # echo “Port 5022” >> /etc/ssh/ssh_config
注意
注意:只需在一個節點上進行設定

只需在要執行叢集報告的節點上設定上述 SSH 用戶端組態。

或者,您可以使用 -X 選項並配合自訂 SSH 埠來執行 crm report,甚至可以將 crm report 指定為預設使用自訂 SSH 埠。如需詳細資料,請參閱程序 D.5 「使用自訂 SSH 埠產生叢集報告」

程序 D.4︰ 設定 SSH 共用金鑰

您可以使用 SSH 來存取其他伺服器,系統不會要求您輸入密碼。這種存取方法看上去似乎並不安全,但其實十分安全,因為使用者只能存取已共用其公用金鑰的伺服器。共用金鑰必須以使用該金鑰的使用者身分來建立。

  1. 使用您為了執行叢集報告而建立的使用者帳戶 (在上述範例中,該使用者帳戶為 hareport) 登入某個節點。

  2. 產生新金鑰:

    hareport > ssh-keygen –t rsa

    此指令預設會產生 2048 位元金鑰。金鑰的預設位置為 ~/.ssh/。系統會提示您在該金鑰中設定一個密碼片語。但請勿輸入密碼片語,因為要進行無密碼登入,就不能對金鑰設定密碼片語。

  3. 產生金鑰之後,將公用金鑰複製到其他每個節點 (包括建立了該金鑰的節點):

    hareport > ssh-copy-id -i ~/.ssh/id_rsa.pub HOSTNAME_OR_IP

    在該指令中,您可以使用每個伺服器的 DNS 名稱、別名或 IP 位址。在複製過程中,系統會要求您接受每個節點的主機金鑰,並且您需要提供 hareport 使用者帳戶的密碼 (這次輸入密碼後,以後不再需要輸入)。

  4. 在所有叢集節點上共用金鑰之後,使用無密碼 SSH 來測試您是否能夠以 hareport 使用者的身分登入其他節點:

    hareport > ssh HOSTNAME_OR_IP

    您應會自動連接到遠端伺服器,而系統不會要求您接受證書或輸入密碼。

注意
注意:只需在一個節點上進行設定

如果您打算每次都從同一個節點執行叢集報告,則在這個節點上執行上述程序便已足夠。否則,您需要在每個節點上重複上述程序。

D.3 設定 sudo

使用 sudo 指令可讓普通使用者在提供或不提供密碼的情況下快速變成 root 和發出指令。可向所有 root 層級指令或者特定的指令授予 Sudo 存取權限。Sudo 通常使用別名來定義整個指令字串。

若要設定 sudo,請使用 visudo (不是 vi) 或 YaST。

警告
警告:不要使用 vi

若要從指令行設定 sudo,必須以 root 身分使用 visudo 來編輯 sudoers 檔案。使用其他任何編輯器可能會導致語法或檔案許可權錯誤,從而阻止 sudo 執行。

  1. root 身分登入。

  2. 若要開啟 /etc/sudoers 檔案,請輸入 visudo

  3. 尋找以下類別:主機別名規格使用者別名規格Cmnd 別名規格Runas 別名規格

  4. 將以下項目新增至 /etc/sudoers 中的相應類別:

    Host_Alias	CLUSTER = alice,bob,charlie 1
    User_Alias HA = hareport 2
    Cmnd_Alias HA_ALLOWED = /bin/su, /usr/sbin/crm report *3
    Runas_Alias R = root 4

    1

    主機別名定義 sudo 使用者有權在哪部伺服器 (或特定範圍內的伺服器) 上發出指令。在主機別名中,可以使用 DNS 名稱或 IP 位址,或者指定整個網路範圍 (例如 172.17.12.0/24)。若要限制存取範圍,應該僅指定叢集節點的主機名稱。

    2

    使用者別名可讓您將多個本地使用者帳戶新增至單一別名。但是,在這種情況下,您可以避免建立別名,因為只會建立一個帳戶。在上述範例中,我們新增了為執行叢集報告而建立的 hareport 使用者。

    3

    指令別名定義該使用者可執行的指令。如果要限制非 root 使用者在使用 sudo 時可以存取的項目,這點將十分有用。在這種情況下,hareport 使用者帳戶需要對指令 crm reportsu 擁有存取權限。

    4

    runas 別名指定指令的執行身分帳戶。在本例中為 root

  5. 搜尋以下兩行:

    Defaults targetpw
    ALL     ALL=(ALL) ALL

    由於這兩行與我們要建立的設定相衝突,因此請將其停用:

    #Defaults targetpw
    #ALL     ALL=(ALL) ALL
  6. 尋找 User privilege specification

  7. 定義上述別名後,接下來可以新增以下規則:

    HA	CLUSTER = (R) NOPASSWD:HA_ALLOWED

    NOPASSWORD 選項確定使用者 hareport 無需提供密碼就能執行叢集報告。

重要
重要:需要在每個叢集節點上使用相同的 sudo 組態

必須在叢集中的所有節點上指定這項 sudo 組態。無需為 sudo 做出其他變更,並且無需重新啟動任何服務。

D.4 產生叢集報告

若要使用上面的設定執行叢集報告,需要以 hareport 使用者的身分登入某個節點。若要啟動叢集報告,請使用 crm report 指令。例如:

root # crm report -f 0:00 -n "alice bob charlie"

此指令將會在指定的節點上擷取從淩晨 0 點開始的所有資訊,並在目前目錄中建立一個名為 pcmk-日期.tar.bz2*.tar.bz2 歸檔。

程序 D.5︰ 使用自訂 SSH 埠產生叢集報告
  1. 使用自訂 SSH 埠時,請搭配使用 -Xcrm report 來修改用戶端的 SSH 埠。例如,如果自訂 SSH 埠為 5022,則使用以下指令:

    root # crm report -X "-p 5022" [...]
  2. 若要為 crm report 永久設定自訂 SSH 連接埠,請啟動互動式 crm 外圍程序:

    crm options
  3. 輸入以下內容:

    crm(live)options#  set core.report_tool_options "-X -oPort=5022"

詞彙表

AutoYaST

AutoYaST 這套系統可在不需使用者互動的情況下自動安裝一或多個 SUSE Linux Enterprise 系統。

bindnetaddr (結合網路位址)

Corosync 執行檔應該結合的網路位址。

boothd (投票間精靈)

Geo 叢集中每個參與的叢集與仲裁方都會執行服務 boothd。該服務會與其他站台上執行的投票間精靈連接並交換連接詳細資料。

CCM (共識叢集成員資格)

CCM 決定由哪些節點組成叢集並在叢集中共享此資訊。任何新的新增項及任何節點或最低節點數的遺失均透過 CCM 傳送。CCM 模組將在叢集的每個節點上執行。

CIB (叢集資訊庫)

表示整個叢集組態與狀態 (叢集選項、節點、資源、條件約束及相互關係)。它以 XML 編寫並存放在記憶體中。主要 CIB 會在DC (指定協調者) 上保留並維護,並複製到其他節點。CIB 上的一般讀寫操作透過主要 CIB 序列化。

conntrack 工具

使用這些工具可與內核連接追蹤系統互動,以對 iptables 啟用陳述封包檢查。High Availability Extension 使用它來在叢集節點之間同步連接狀態。

CRM (叢集資源管理員)

負責協調高可用性叢集中所有非本地互動的管理實體。High Availability Extension 使用 Pacemaker 做為 CRM。CRM 實作為 pacemaker-controld。CRM 與許多元件進行互動,包括所在節點及其他節點上的本地資源管理員、非本地 CRM、管理指令、圍籬區隔功能及成員資格層。

crmsh

指令行公用程式 crmsh 可用於管理叢集、節點和資源。

如需相關資訊,請參閱第 8 章 「設定和管理叢集資源 (指令行)

Csync2

可用於在叢集中的所有節點間,甚至 在Geo 叢集間複製組態檔案的同步工具。

DC (指定協調者)

DC 是從叢集中的所有節點選出的。如果目前沒有 DC,或者目前的 DC 出於任何原因退出叢集,則就會依此方式選出 DC。DC 是叢集中可以決定是否需要執行全叢集變更 (例如圍籬區隔節點或移動資源) 的唯一實體。所有其他節點均從目前 DC 取得其組態和資源配置資訊。

DLM (分散式鎖定管理員)

DLM 會協調叢集檔案系統的磁碟存取,並管理檔案鎖定以提高效能和可用性。

DRBD

DRBD 是專用於建立 High Availability 叢集的區塊裝置。®整個區塊裝置透過專屬網路鏡像,並被視做網路 RAID-1。

Geo 叢集

由多個地理位置分散的站台組成,每個站台都有一個本地叢集。這些站台透過 IP 進行通訊。站台間的容錯移轉由一個更高階的實體 (投票間) 來調節控制。Geo 叢集需要克服有限網路頻寬與高延遲的問題。儲存是以非同步模式複製。

Geo 叢集 (地理位置分散的叢集)

請參閱Geo 叢集

LRM (本地資源管理員)

本地資源管理員位於每個節點上的 Pacemaker 層與資源層之間。它實作為 pacemaker-execd 精靈。透過此精靈,Pacemaker 可以啟動、停止和監控資源。

mcastaddr (多點傳播位址)

Corosync 可執行檔用於多點傳播的 IP 位址。IP 位址可以是 IPv4 或 IPv6。

mcastport (多點傳播連接埠)

用於叢集通訊的連接埠。

Metro 叢集

覆蓋面延伸到多棟大樓或資料中心,並透過光纖通道將所有站台連接起來的單一叢集。網路延遲通常比較低 (距離約為 20 英里時,延遲時間不到 5 毫秒)。對儲存的複製很頻繁 (鏡像複製或同步複製)。

pacemaker-controld (叢集控制器精靈)

CRM 實作為精靈 pacemaker-controld。它在每個叢集節點上都有一個例項。所有叢集決策都是透過一個被選為主要例項的 pacemaker-controld 例項集中做出的。如果選出的 pacemaker-controld 程序 (或它所在的節點) 失敗,系統會建立一個新的 pacemaker-controld 程序。

PE (規則引擎)

規則引擎實作為 pacemaker-schedulerd 精靈。需要叢集轉換時,pacemaker-schedulerd 會依據目前的狀態和組態,計算叢集的下一種預期狀態。它會確定需要排程哪些動作來達到下一種狀態。

RA (資源代辦)

做為代理管理資源 (例如,啟動、停止或監控資源) 的程序檔。High Availability Extension 支援不同類型的資源代辦:如需詳細資料,請參閱第 6.3.2 節 「受支援的資源代辦類別」

Rear (Relax and Recover)

用於建立災難備援影像的管理員工具集。

RRP (備援環狀通訊協定)

允許使用多重備援區域網路,以針對部分或全部網路錯誤提供恢復功能。如此一來,只要有一個網路正常運作,便仍可進行叢集通訊。Corosync 支援 Totem 備援環狀通訊協定。

SBD (STONITH 區塊裝置)

透過經由共享區塊儲存 (SAN、iSCSI、FCoE 等) 交換訊息提供節點圍籬區隔機制。也可以在無磁碟模式下使用。需要在每個節點上安裝一個硬體或軟體監視程式,以確保能真正停止行為異常的節點。

SFEX (共享磁碟檔案排外性)

SFEX 透過 SAN 提供儲存保護。

SPOF (單點故障)

叢集的任一元件若發生故障,將會觸發整個叢集故障。

STONITH

Shoot the other node in the head(關閉另一個節點) 的首字母縮略字。它代表一種圍籬區隔機制,會關閉行為異常的節點以防止其在叢集中造成問題。在 Pacemaker 叢集中,節點層級圍籬區隔的實作為 STONITH。為此,Pacemaker 隨附了一個圍籬區隔子系統 pacemaker-fenced

並行違規

資源原本只應該在叢集中的一個節點上執行,現在在多個節點上執行。

主動/主動、主動/被動

關於服務在節點上的執行情況的概念。主動-被動情境是指有一或多項服務正在主動節點上執行,而被動節點則等待主動節點發生故障。主動-主動表示各節點同時處於主動與被動狀態。例如,該節點上正在執行一些服務,但仍可接管另一個節點中的其他服務。您可與 DRBD 術語中的主要/次要節點和雙重主要節點比較。

仲裁方

Geo 叢集中附加的例項,可協助在跨站點資源容錯移轉等決策方面達成共識。仲裁方是以特殊模式執行一或多個投票間例項的單個機器。

切換

依需求有計劃地將服務轉移到叢集中的其他節點。請參閱容錯移轉

叢集

高效能叢集是指共同分擔應用程式負載以更快獲得結果的一組電腦 (真實或虛擬)。高可用性叢集的主要用途是最大限度地確保服務的可用性。

叢集分割區

當一個或多個節點與叢集其餘節點間的通訊失敗時,就會發生叢集分割。叢集的節點劃分在各分割區中,但仍然處於使用中狀態。它們只能與同一分割區中的節點通訊,不能識別分隔的節點。由於無法確定其他分割區上節點的遺失,因此會出現電腦分裂狀況 (另請參閱電腦分裂)。

單點傳播

一種將訊息傳送至單一網路目的地的技術。Corosync 支援多點傳播與單點傳播。在 Corosync 中,單點傳播是以 UDP 單點傳播 (UDPU) 的形式執行。

圍籬區隔

描述阻止隔離的或發生故障的叢集成員存取共享資源的概念。有兩類圍籬區隔:資源層級圍籬區隔和節點層級圍籬區隔。資源層級圍籬區隔可確保對給定資源的獨佔存取。節點層級圍籬區隔可完全防止故障節點存取共享資源,並可防止資源在狀態不明的節點上執行。這通常可以透過一種簡單但稍嫌粗暴的方法來實現,即重設或關閉節點。

多點傳播

網路內進行一對多通訊所採用的一種技術,可用於叢集通訊。Corosync 支援多點傳播與單點傳播。

容錯移轉

當一台機器上的資源或節點發生故障且受影響的資源將在其他節點上啟動時,會發生此情況。

容錯移轉網域

由數個叢集節點構成的具名子集,這些節點可在某個節點失敗時執行叢集服務。

投票間

負責管理 Geo 叢集中各站點之間的容錯移轉程序的例項。其目標是讓多站點資源在一個且只有一個站點上保持使用中狀態。該目的透過使用所謂的票證實現,這些票證會被視為叢集站台之間的容錯移轉網域,以防站台發生故障。

最低節點數

在叢集中,如果叢集分割區擁有多數節點 (或投票),則其會被定義為具有最低節點數 (即到達法定數目)。最低節點數可準確辨識一個分割區。此部分演算法可阻止多個斷線分割區或節點繼續和導致資料與服務毀損 (電腦分裂)。最低節點數是圍籬區隔的先決條件,而圍籬區隔可確保最低節點數是唯一的。

本地叢集

一個位置中的單一叢集 (例如,所有節點位於一個資料中心)。網路延遲可以忽略。一般而言,所有節點對儲存的存取都是同步的。

災難

由自然因素、人為因素、硬體故障或軟體錯誤引發的重要基礎結構的非預期中斷。

災難備援

災難備援是指用於在發生災難後使業務功能恢復到正常穩定狀態的程序。

災難備援計劃

從災難中復原,並將對 IT 基礎結構的影響降至最小的策略。

現存叢集

現存叢集一詞用於指代至少包含一個節點的任一叢集。現存叢集擁有定義了通訊通道的基本 Corosync 組態,但目前不必擁有資源組態。

票證

在 Geo 叢集中使用的一個元件。票證可授予在特定叢集站台上執行特定資源的權限。一張票證同一時刻只能由一個站台擁有。資源可以依相依性繫結到特定票證。僅當站台上有定義的票證時,相關資源才會啟動。反之亦然,如果移除了票證,依賴於該票證的資源便會自動停止。

節點

任何屬於叢集成員且對使用者不可見的電腦 (真實或虛擬)。

負載平衡

使多個伺服器參與同一個服務並執行相同任務的功能。

資源

Pacemaker 已知的任何類型的服務或應用程式。範例包括 IP 位址、檔案系統或資料庫。

術語資源也適用於 DRBD,表示使用通用連接來執行複製的一組區塊裝置。

電腦分裂

在該情境下,叢集節點將被分成兩個或多個彼此不知的群組 (透過軟體或硬體故障)。STONITH 可以防止電腦分裂狀況對整個叢集產生不良影響。也稱為分割的叢集情境。

DRBD 中也有「電腦分裂」一詞,但表示的是兩個節點包含不同的資料。