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

管理指南

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

出版日期: 2023 年 12 月 11 日

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

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

如需 SUSE 商標,請參閱 http://www.suse.com/company/legal/。所有的協力廠商商標均為其各別擁有廠商的財產。商標符號 (®、™ 等) 表示 SUSE 及其關係企業的商標。星號 (*) 表示協力廠商的商標。

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

前言

1 可用文件

線上文件

可在 https://documentation.suse.com 上查看我們的線上文件。您可瀏覽或下載各種格式的文件。

注意
注意:最新更新

最新的更新通常在本文件的英文版本中提供。

版本說明

如需版本說明,請參閱 https://www.suse.com/releasenotes/

在您的系統中

若要以離線方式使用,請參閱所安裝系統中 /usr/share/doc 下的文件。許多指令的手冊頁中也對相應指令進行了詳細描述。若要檢視手冊頁,請執行 man 後接特定的指令名稱。如果系統上未安裝 man 指令,請使用 sudo zypper install man 予以安裝。

2 改進文件

歡迎您提供針對本文件的回饋及改進建議。您可以透過以下通道提供回饋:

服務要求和支援

如需產品可用的服務與支援選項,請參閱 http://www.suse.com/support/

若要開啟服務要求,需要在 SUSE Customer Center 中註冊訂閱的 SUSE 產品。請移至 https://scc.suse.com/support/requests 並登入,然後按一下新增

錯誤報告

https://bugzilla.suse.com/ 中報告文件問題。

若要簡化此程序,請按一下本文件 HTML 版本中的標題旁邊的報告問題圖示。如此會在 Bugzilla 中預先選取正確的產品和類別,並新增目前章節的連結。然後,您便可以立即開始輸入錯誤報告。

需要一個 Bugzilla 帳戶。

協助改進

若要協助我們改進本文件,請按一下本文件 HTML 版本中的標題旁邊的 Edit source document (編輯來源文件) 圖示。然後您會移至 GitHub 上的原始碼,您可以在其中建立提取要求。

需要一個 GitHub 帳戶。

注意
注意:Edit source document (編輯來源文件) 僅適用於英語版本

Edit source document (編輯來源文件) 圖示僅適用於每個文件的英語版本。對於所有其他語言,請改用報告問題圖示。

如需本文件使用的文件環境的詳細資訊,請參閱儲存庫的讀我檔案(網址:https://github.com/SUSE/doc-sleha)。

郵件

您也可以將有關本文件中的錯誤以及相關回饋傳送至:<>。請在其中包含文件標題、產品版本以及文件發行日期。此外,請包含相關的章節編號和標題 (或者提供 URL),並提供問題的簡要描述。

3 文件慣例

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

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

  • PLACEHOLDER:以實際值取代 PLACEHOLDER

  • PATH:環境變數

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

  • user:使用者或群組的名稱

  • package_name:軟體套件的名稱

  • AltAltF1:按鍵或鍵組合。按鍵以大寫字母顯示,與鍵盤上的相同。

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

  • AMD/Intel 本段內容僅與 AMD64/Intel 64 架構相關。箭頭標示了文字區塊的開頭與結尾。

    IBM Z, POWER 本段內容僅與 IBM ZPOWER 架構相關。箭頭標示了文字區塊的開頭與結尾。

  • Chapter 1, Example chapter:對本指南中其他章節的交叉參考。

  • 必須具有 root 權限才能執行的指令。通常,您也可以在這些指令前加上 sudo 指令,以非特權使用者身分來執行它們。

    # command
    > sudo command
  • 沒有權限的使用者也可以執行的指令。

    > command
  • 在互動式 crm 外圍程序中執行的指令。

    crm(live)# 
  • 注意事項

    警告
    警告:警告通知

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

    重要
    重要:重要通知

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

    注意
    注意:注意通知

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

    提示
    提示:提示通知

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

  • 精簡通知

    注意

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

    提示

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

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

4 支援

下面提供了 SUSE Linux Enterprise High Availability Extension 的支援聲明和有關技術預覽的一般資訊。如需產品生命週期的詳細資料,請參閱 https://www.suse.com/lifecycle

如果您有權獲享支援,可在 https://documentation.suse.com/sles-15/html/SLES-all/cha-adm-support.html 中尋找有關如何收集支援票證所需資訊的詳細資料。

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 的現有叢集,請參閱第 28 章 「升級叢集和更新軟體套件

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

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

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

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 SP5 的延伸提供。

1.2 主要功能

SUSE® Linux Enterprise High Availability Extension 可協助您確保和管理網路資源的可用性。以下各節重點描述一些關鍵功能:

1.2.1 各種叢集情境

High Availability Extension 支援以下情境:

  • 主動/主動組態

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

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

  • 本地叢集

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

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

重要
重要:不支援混合架構

屬於一個叢集的所有節點都應使用相同的處理器平台:x86、IBM Z 或 POWER。支援採用混合架構的叢集。

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

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

SUSE Linux Enterprise High Availability Extension 支援不同的地理情況,包括地理位置分散的叢集 (即 Geo 叢集)。

本地叢集

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

城際叢集

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

Geo 叢集 (多站點叢集)

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

注意
注意:Geo 叢集和 SAP 工作負載

目前,Geo 叢集既不支援 SAP HANA 系統複製,也不支援 SAP S/4HANA 和 SAP NetWeaver 加入佇列複製設定。

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

1.2.6 資源代理程式

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

1.2.7 簡單易用的管理工具

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

YaST

用於一般系統安裝和管理的圖形使用者介面。可用於在 SUSE Linux Enterprise Server 上安裝 High Availability Extension,如Installation and Setup Quick Start所述。YaST 在 High Availability Extension 類別中還提供了以下模組,可以幫助您設定叢集或個別元件:

Hawk2

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

crm 外圍程序

一款功能強大的整合式指令列介面,用於設定資源以及執行所有監控或管理任務。如需詳細資訊,請參閱第 5.5 節 「crmsh 簡介」

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 中的另一個通訊通道。

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

節點圍籬區隔/STONITH

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

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

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

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

2.2 軟體要求

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

  • Basesystem Module 15 SP5

  • Server Applications Module 15 SP5

  • SUSE Linux Enterprise High Availability Extension15 SP5

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

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 機制,則共用儲存還需要符合其他要求。如需詳細資料,請參閱第 13.3 節 「要求」

2.4 其他要求與建議

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

叢集節點數

對於包含兩個以上節點的叢集,強烈建議使用奇數數量的叢集節點,以便具有仲裁能力。如需仲裁的詳細資訊,請參閱第 5.2 節 「仲裁判斷」。一個一般叢集最多只能包含 32 個節點。憑藉 pacemaker_remote 服務,可以將高可用性叢集進行延伸,使其包含超出此限制的額外節點。請參閱 Pacemaker Remote Quick Start,以取得詳細資料。

時間同步

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

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

網路介面卡 (NIC) 名稱

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

主機名稱與 IP 位址
  • 使用靜態 IP 位址。

  • 只支援主要 IP 位址。

  • /etc/hosts 檔案中列出所有叢集節點,包括各自的完全合格主機名稱和簡短主機名稱。叢集的成員必須能夠籍由名稱找到彼此,這是一項基本要求。如果名稱不可用,內部叢集通訊將會失敗。

    如需 Pacemaker 如何取得節點名稱的詳細資料,請參閱 http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-node-name.html

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 的現有叢集,請參閱第 28 章 「升級叢集和更新軟體套件

3.1 手動安裝

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

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

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

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

如需在各種情況下如何使用 AutoYaST 的詳細說明,請參閱 AutoYaST Guide for SUSE Linux Enterprise Server 15 SP5

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

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

如果您需要在不相同的硬體上部署叢集節點,請參閱 SUSE Linux Enterprise Server 15 SP5 Deployment GuideAutomated Installation 一章中的 Rule-Based Autoinstallation 一節。

程序 3.1︰ 使用 AutoYaST 複製叢集節點
  1. 確定已正確安裝並設定要複製的節點。如需詳細資料,請參閱Installation and Setup Quick Start第 4 章 「使用 YaST 叢集模組

  2. 依照 SUSE Linux Enterprise 15 SP5 Deployment Guide 中的概要說明進行簡單的大規模安裝。基本步驟包括以下幾項:

    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.7 節 「將組態傳輸至所有節點」 所述使用 Csync2 將金鑰組態檔案從設定的節點傳輸到複製的節點。

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

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

4 使用 YaST 叢集模組

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

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

您還可以將這兩種設定方法結合起來使用,例如,使用 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

如果在 /etc/corosync/corosync.conf 中明確設定了包含 ringX_addrnodelist,則不一定需要 bindnetaddr

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

由於所有節點上都會使用相同的 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 節 「定義通訊通道」

重要
重要:備援通訊路徑

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

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

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

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

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

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

設定 conntrackd (選擇性)

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

服務 (必需)

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

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

注意
注意: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︰ 定義第一個通訊通道 (多點傳送)

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

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

  2. 傳輸通訊協定設定為 Multicast

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

  4. 定義多點傳播位址

  5. 定義連接埠

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

  7. 定義叢集名稱

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

  9. 確認您的變更。

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

YaST 叢集 - 多點傳送組態
圖 4.1︰ YaST 叢集 - 多點傳送組態

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

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

  2. 傳輸通訊協定設定為 Unicast

  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 同步叢集節點間的連接狀態

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

程序 4.5︰ 使用 YaST 設定 conntrackd

使用 YaST 叢集模組設定使用者空間 conntrackd (請參閱圖形 4.4 「YaST 叢集conntrackd)。該工具需要一個不會用於其他通訊通道的專屬網路介面。之後,可透過資源代理程式啟動該精靈。

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

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

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

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

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

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

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

YaST 叢集 — conntrackd
圖 4.4︰ YaST 叢集conntrackd

設定 conntrack 工具後,可對 Linux 虛擬伺服器使用這些工具 (請參閱負載平衡)。

4.6 設定服務

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

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

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

    # crm cluster start
  3. 若要立即啟動或停止叢集服務,請按一下相應按鈕。

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

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

YaST 叢集 - 服務
圖 4.5︰ YaST 叢集 - 服務

4.7 將組態傳輸至所有節點

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

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

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

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

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

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

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

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

4.7.1 使用 YaST 設定 Csync2

程序 4.7︰ 使用 YaST 設定 Csync2
  1. 啟動 YaST 叢集模組,然後切換到 Csync2 類別。

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

    提示
    提示:主機名稱解析

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

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

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

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

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

    # systemctl enable csync2.socket
  7. 按一下 Finish (完成)。YaST 會將 Csync2 組態寫入 /etc/csync2/csync2.cfg

YaST 叢集 - Csync2
圖 4.6︰ YaST 叢集 - Csync2

4.7.2 使用 Csync2 同步變更

首次執行 Csync2 前,需要執行以下準備工作:

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

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

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

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

    # 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. 如果您確定目前節點上的是檔案的最佳版本,可以透過強制使用此檔案並重新同步來解決衝突:

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

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

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

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

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

4.8 使叢集上線

完成初始叢集組態後,啟動所有叢集節點上的叢集服務,以使堆疊上線:

程序 4.10︰ 啟動叢集服務並檢查狀態
  1. 登入現存節點。

  2. 啟動所有叢集節點上的叢集服務:

    # crm cluster start --all
  3. 使用 crm status 指令檢查叢集狀態。如果所有節點都已上線,則輸出應如下所示:

    # crm status
    Cluster Summary:
      * Stack: corosync
      * Current DC: alice (version ...) - partition with quorum
      * Last updated: ...
      * Last change:  ... by hacluster via crmd on bob
      * 2 nodes configured
      * 1 resource instance configured
    
    Node List:
      * Online: [ alice bob ]
    ...

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

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

第 II 部分 組態和管理

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

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

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

  • 7 設定資源條件約束
  • 設定所有資源只是工作的一部分。即使叢集知道所有需要的資源,也可能無法正確處理這些資源。使用資源條件約束可指定能在哪些叢集節點上執行資源、以何順序載入資源,以及特定資源相依於其他哪些資源。

  • 8 管理叢集資源
  • 設定叢集中的資源後,可使用叢集管理工具啟動、停止、清理、移除或移轉資源。本章介紹如何使用 Hawk2 或 crmsh 執行資源管理任務。

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

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

  • 11 監控叢集
  • 本章介紹如何監控叢集的健康情況以及檢視其歷程。

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

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

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

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

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

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

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

  • 14 QDevice 和 QNetd
  • QDevice 和 QNetd 會參與仲裁決定。在仲裁方 corosync-qnetd 的協助下,corosync-qdevice 會提供一個可設定的投票數,以使叢集可以承受大於標準仲裁規則所允許的節點故障數量。我們建議您對節點數為偶數的叢集 (特別是雙節點叢集) 部署 corosync-qnetdcorosync-qdevice

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

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

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

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

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

5 組態和管理基礎

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

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

5.1 使用案例情境

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

  • 雙節點叢集

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

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

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

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

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

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

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

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

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

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

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

5.2 仲裁判斷

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

仲裁不是由 Pacemaker 計算或確定。Corosync 可以直接處理雙節點叢集的仲裁,無需變更 Pacemaker 組態。

仲裁計算方式受以下因素的影響:

叢集節點數

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

N ≥ C/2 + 1

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

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

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

Corosync 組態

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

5.2.1 雙節點叢集的 Corosync 組態

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

範例 5.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
}

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

5.2.2 N 節點叢集的 Corosync 組態

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

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

  • 手動調整 Corosync 組態。

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

範例 5.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。如果三個或更多個節點彼此可見,則叢集分割區將達到法定數量,可以開始運作。

5.3 全域叢集選項

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

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

5.3.1 全域選項 no-quorum-policy

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

可用的值如下:

ignore

如果將 no-quorum-policy 設為 ignore,叢集分割區就會像其具有仲裁一樣運作,即使情況並非如此。叢集分割區可以發出圍籬區隔指令,並繼續進行資源管理。

在 SLES 11 中,建議對雙節點叢集使用此設定。從 SLES 12 開始,ignore 值已過時,不允許使用。Corosync 依據組態和條件為叢集節點或單個節點提供仲裁 — 或者不提供仲裁。

對於雙節點叢集,當節點發生故障時,唯一有意義的行為就是永遠做出回應。第一個步驟永遠應該是嘗試圍籬區隔遺失的節點。

freeze

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

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

stop (預設值)

如果失去仲裁能力,受影響的叢集分割區中的所有資源都會依序停止。

suicide

如果失去仲裁能力,受影響叢集分割區中的所有節點都會被圍籬區隔。此選項只能與 SBD 結合使用,具體請參閱第 13 章 「儲存保護和 SBD

5.3.2 全域選項 stonith-enabled

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

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

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

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

5.4 Hawk2 簡介

若要設定和管理叢集資源,請使用 Hawk2 或 crm 外圍程序 (crmsh) 指令列公用程式。

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

5.4.1 Hawk2 要求

僅當系統符合以下要求後,使用者才能登入 Hawk2:

hawk2 套件

要透過 Hawk2 連接的所有叢集節點都必須已安裝 hawk2 套件。

網頁瀏覽器

在要使用 Hawk2 存取叢集節點的機器上,需要安裝啟用了 JavaScript 和 Cookie 的 (圖形) 網頁瀏覽器才能建立連接。

Hawk2 服務

若要使用 Hawk2,您要透過 Web 介面連接的節點上必須啟動相應的 Web 服務。請參閱程序 5.1 「啟動 Hawk2 服務」

如果您已使用 crm 外圍程序提供的開機程序檔設定叢集,那麼此時 Hawk2 服務已啟用。

每個叢集節點上的使用者名稱、群組和密碼

Hawk2 使用者必須是 haclient 群組的成員。安裝程序會建立名為 hacluster 的 Linux 使用者,該使用者已新增至 haclient 群組中。

使用 crm cluster init 程序檔進行設定時,將為 hacluster 使用者設定預設密碼。在啟動 Hawk2 之前,請將它變更為安全密碼。如果您未使用 crm cluster init 程序檔,請先為 hacluster 設定密碼,或者建立屬於 haclient 群組的新使用者。請在您要使用 Hawk2 與之連接的所有節點上執行此操作。

萬用字元證書處理

萬用字元證書是指對多個子網域有效的公用金鑰證書。例如,*.example.com 的萬用字元證書可以保障 login.example.comwww.example.com 等網域的安全。

Hawk2 支援萬用字元證書及可轉換證書。/srv/www/hawk/bin/generate-ssl-cert 可產生自行簽署的預設私密金鑰和證書。

若要使用您自己的證書 (可轉換或萬用字元證書),請以您自己的證書取代產生的證書 (位於 /etc/ssl/certs/hawk.pem 處)。

程序 5.1︰ 啟動 Hawk2 服務
  1. 在您要與之連接的節點上,開啟外圍程序並以 root 身分登入。

  2. 輸入以下指令檢查服務的狀態

    # systemctl status hawk
  3. 如果服務沒有執行,則使用以下指令將其啟動

    # systemctl start hawk

    如果希望 Hawk2 在開機時自動啟動,請執行以下指令:

    # systemctl enable hawk

5.4.2 登入

Hawk2 Web 介面使用 HTTPS 通訊協定和連接埠 7630

您無需使用 Hawk 登入個別叢集節點,而是可以將一個浮動的虛擬 IP 位址 (IPaddrIPaddr22) 設定為叢集資源。該位址無需任何特殊組態設定。如此,無論 Hawk 服務在哪個實體節點上執行,用戶端都可以連接到該服務。

在使用 crm 外圍程序提供的開機程序檔設定叢集時,系統會詢問您是否設定虛擬 IP 以用於叢集管理。

程序 5.2︰ 登入 Hawk2 Web 介面
  1. 在任一部機器上,啟動網頁瀏覽器並輸入以下 URL:

    https://HAWKSERVER:7630/

    使用執行 Hawk Web 服務的任何叢集節點的 IP 位址或主機名稱取代 HAWKSERVER。如果已設定虛擬 IP 位址以供您使用 Hawk2 進行叢集管理,請使用該虛擬 IP 位址取代 HAWKSERVER

    注意
    注意:證書警告

    當您首次嘗試存取該 URL 時,如果系統顯示證書警告,則表示使用了自行簽署的證書。依預設,自行簽署的證書不被視為可信證書。

    若要驗證證書,請聯絡叢集操作人員獲取證書詳細資料。

    若仍要繼續,您可以在瀏覽器中新增一個例外以略過此警告。

    如需關於如何將自行簽署的證書取代為官方證書管理中心所簽署證書的資訊,請參閱取代自行簽署的證書

  2. 在 Hawk2 登入螢幕中,輸入 hacluster使用者 (或任何屬於群組 haclient的其他使用者) 的使用者名稱密碼

  3. 按一下登入

5.4.3 Hawk2 綜覽:主要元素

登入 Hawk2 後,左側會顯示一個導覽列,右側會顯示一個頂層列,其中包含若干連結。

注意
注意:Hawk2 中的可用功能

依預設,以 roothacluster 身分登入的使用者對於所有叢集組態任務都擁有完整的讀-寫存取權限。不過,您可以使用存取控制清單 (ACL) 來定義精細的存取權限。

如果 CRM 中啟用了 ACL,則 Hawk2 的可用功能取決於指定給您的使用者角色及其所指定的存取權限。Hawk2 中的歷程總管只能由使用者 hacluster 來執行。

5.4.3.1 左側導覽列

監測
  • 狀態:扼要顯示當前的叢集狀態 (與 crmsh 上的 crm status 類似)。如需詳細資料,請參閱第 11.1.1 節 「監控單個叢集」。如果叢集包含 guest nodes (執行 pacemaker_remote 精靈的節點),這些節點也會顯示。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

  • 儀表板:可讓您監控多個叢集 (如果您設定了 Geo 叢集,則這些叢集還可以位於不同站點)。如需詳細資料,請參閱第 11.1.2 節 「監控多個叢集」。如果叢集包含 guest nodes (執行 pacemaker_remote 精靈的節點),這些節點也會顯示。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

疑難排解
  • 歷程:開啟可以用來產生叢集報告的歷程總管。如需詳細資料,請參閱第 11.3 節 「檢視叢集歷程」

  • 指令記錄:可列出近期由 Hawk2 執行的 crmsh 指令。

組態

5.4.3.2 頂層列

Hawk2 的頂層列顯示以下項目:

  • 批次:按一下可切換到批次模式。可用於模擬和分階段進行變更並透過單次交易套用這些變更。如需詳細資料,請參閱第 5.4.7 節 「使用批次模式」

  • USERNAME:可用於設定 Hawk2 的優先設定 (例如,Web 介面的語言,或者是否在 STONITH 處於停用狀態時顯示警告)。

  • 說明:存取 SUSE Linux Enterprise High Availability Extension 文件、閱讀版本說明或報告錯誤。

  • 登出:按一下可登出。

5.4.4 設定全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crmsh 等叢集管理工具來檢視和修改。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:

程序 5.3︰ 修改全域叢集選項
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態

    叢集組態螢幕隨即開啟。它會顯示全域叢集選項及其當前的值。

    若要在螢幕右側顯示參數的簡要描述,請將游標懸停在該參數上。

    Hawk2 - 叢集組態
    圖 5.1︰ Hawk2 - 叢集組態
  3. 檢查 no-quorum-policystonith-enabled 的值,必要時予以調整:

    1. no-quorum-policy 設為適當的值。請參閱 第 5.3.1 節 「全域選項 no-quorum-policy,以取得詳細資料。

    2. 如果出於某種原因需要停用圍籬區隔,請將 stonith-enabled 設定為 no。依預設,該參數設定為 true,因為執行常規的叢集操作必須要使用 STONITH 裝置。依據預設值,如果未設定 STONITH 資源,叢集將拒絕啟動任何資源。

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

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

    3. 若要從叢集組態中移除某個參數,請按一下該參數旁邊的減號圖示。如果某個參數被刪除,叢集會將該參數視為具有預設值。

    4. 若要將新參數新增至叢集組態,請從下拉式方塊中選擇一個參數。

  4. 如果您需要變更資源預設值操作預設值,請執行下列步驟:

    1. 若要調整值,請在下拉式方塊中選取其他值,或直接編輯該值。

    2. 若要新增新的資源預設值或操作預設值,請從空下拉式方塊中選擇一項,然後輸入值。如果已定義預設值,Hawk2 會自動提供這些預設值。

    3. 若要移除某個參數,請按一下該參數旁邊的減號圖示。如果沒有為資源預設值操作預設值指定值,叢集會使用第 6.12 節 「資源選項 (中繼屬性)」第 6.14 節 「資源操作」 中所述的預設值。

  5. 確認您的變更。

5.4.5 顯示目前的叢集組態 (CIB)

叢集管理員有時需要知道叢集組態。Hawk2 可以 crm 外圍程序語法、XML 和圖形形式顯示目前組態。若要檢視 crm 外圍程序語法形式的叢集組態,請從左側導覽列中選取組態 › 編輯組態,並按一下顯示。若要改為以原始 XML 顯示組態,請按一下 XML。按一下圖形會以圖形顯示 CIB 中設定的節點和資源。它還會顯示各資源之間的關係。

5.4.6 使用精靈新增資源

Hawk2 精靈是設定簡單資源 (如虛擬 IP 位址或 SBD STONITH 資源) 的便捷方式。對於包含多個資源的複雜組態 (例如 DRBD 區塊裝置或 Apache Web 伺服器的資源組態) 而言,這種方法也十分有用。精靈會引導您完成所有組態步驟,並提供您需要輸入的參數的相關資訊。

程序 5.4︰ 使用資源精靈
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 精靈

  3. 按一下具體類別旁邊的向下箭頭圖示,藉以擴大該類別,然後選取所需精靈。

  4. 按照螢幕上的指示執行操作。在最後一個設定步驟之後,驗證所輸入的值。

    Hawk2 會顯示它將執行的動作以及設定成果。根據組態,系統可能會提示您要先輸入 root 密碼,才能套用組態。

Hawk2 - Apache Web 伺服器精靈
圖 5.2︰ Hawk2 - Apache Web 伺服器精靈

如需詳細資訊,請參閱第 6 章 「設定叢集資源

5.4.7 使用批次模式

Hawk2 提供批次模式,包括叢集模擬器。該模式可用於以下操作:

  • 對叢集進行分階段變更並透過單次交易套用這些變更,而不是讓每項變更立即生效。

  • 模擬變更和叢集事件,例如,瞭解可能失敗的情況。

例如,在建立相互依賴的資源群組時,可以使用批次模式。透過使用批次模式,您可以避免將中繼或不完整的組態套用到叢集。

啟用批次模式後,您可以新增或編輯資源和條件約束,或變更叢集組態。此外,還可以模擬叢集中的事件,包括變為線上或離線的節點、資源操作,以及要授予或撤銷的票證。如需詳細資料,請參閱程序 5.6 「插入節點、資源或票證事件」

叢集模擬器會在每次變更後自動執行,並在使用者介面上顯示預期效果。舉例而言,這還意味著當您在批次模式下停止某資源時,使用者介面上會將該資源顯示為已停止,但實際上,該資源仍在執行中。

重要
重要:線上系統的精靈和變更

某些精靈包含除純叢集組態以外的其他動作。在批次模式下使用這些精靈時,叢集組態以外的任何其他變更都將立即套用到線上系統。

因此,需要 root 權限的精靈無法在批次模式下執行。

程序 5.5︰ 使用批次模式
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要啟用批次模式,請從頂層列選取批次

    頂層列下方即會另外顯示一列,指出批次模式處於使用中狀態,並會包含指向您可在批次模式下執行的動作的連結。

    Hawk2 批次模式已啟用
    圖 5.3︰ Hawk2 批次模式已啟用
  3. 當批次模式處於使用中狀態時,對叢集執行任意變更,例如新增或編輯資源和條件約束,或編輯叢集組態。

    系統將會模擬變更,並將其顯示在所有螢幕上。

  4. 若要檢視所做變更的詳細資料,請從批次模式列中選取顯示批次模式視窗即會開啟。

    對於任何組態變更,該模式會以 crmsh 語法顯示即時狀態與模擬變更之間的差異:以 - 字元開頭的行表示目前的狀態,而以 + 開頭的行則顯示預期狀態。

  5. 若要插入事件或檢視更多詳細資料,請參閱程序 5.6。否則請關閉視窗。

  6. 選擇是丟棄還是套用模擬的變更,然後確認您的選擇。此操作還會停用批次模式,使您回到正常模式。

在批次模式下執行時,Hawk2 還允許您插入節點事件資源事件

節點事件

可讓您變更節點的狀態。可用的狀態有線上離線不正常

資源事件

可讓您變更資源的一些內容。例如,您可以設定操作 (如 monitorstartstop)、操作要套用到的節點,以及要模擬的預期結果。

票證事件

可讓您測試授予和撤銷票證 (用於 Geo 叢集) 的影響。

程序 5.6︰ 插入節點、資源或票證事件
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 如果批次模式尚未啟動,請按一下頂層列上的批次以切換到批次模式。

  3. 在批次模式列中,按一下顯示以開啟批次模式視窗。

  4. 若要模擬節點的狀態變更:

    1. 按一下插入 › 節點事件

    2. 選取您要操作的節點,並選取其目標狀態

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  5. 若要模擬某個資源作業:

    1. 按一下插入 › 資源事件

    2. 選取要操作的資源和要模擬的操作

    3. 如有必要,請定義一個間隔

    4. 選取要在其上執行該操作的節點以及預期的結果。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

    5. 確認您的變更。

  6. 若要模擬票證動作:

    1. 按一下插入 › 票證事件

    2. 依次選取要操作的票證和要模擬的動作

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  7. 批次模式對話方塊 (圖形 5.4) 會為每個插入的事件顯示新的一行。此處列出的所有事件都會立即被模擬並反映到狀態螢幕上。

    如果您還進行了任何組態變更,線上狀態和模擬變更之間的差異會顯示在所插入事件的下方。

    Hawk2 批次模式 - 插入的事件和組態變更
    圖 5.4︰ Hawk2 批次模式 - 插入的事件和組態變更
  8. 若要移除插入的事件,請按一下該事件旁邊的移除圖示。Hawk2 會相應地更新狀態螢幕。

  9. 若要檢視模擬執行的更多詳細資料,請按一下模擬器並選擇以下選項之一:

    摘要

    顯示詳細的摘要。

    CIB (入)/CIB (出)

    CIB (入) 會顯示初始的 CIB 狀態。CIB (出) 會顯示轉換後 CIB 的情況。

    轉換圖表

    顯示轉換的圖形表示。

    移交

    顯示轉換的 XML 表示。

  10. 如果您已複查模擬的變更,請關閉批次模式視窗。

  11. 若要結束批次模式,請套用丟棄模擬的變更。

5.5 crmsh 簡介

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

本節介紹指令列工具 crmcrm 指令有多個子指令,用於管理資源、CIB、節點、資源代理程式及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。

事件記錄至 /var/log/crmsh/crmsh.log 中。

注意
注意:使用者權限

您需要有足夠的權限方可管理叢集。執行 crm 指令及其子指令的使用者需為 root 使用者或 CRM 擁有者使用者 (通常是使用者 hacluster)。

不過,user 選項可讓您以一般 (非特權) 使用者的身分執行 crm 指令及其子指令,並在需要時使用 sudo 指令變更使用者 ID。例如,在下面的指令中,crm 使用 hacluster 做為授權使用者 ID:

# crm options user hacluster

必須設定 /etc/sudoers,這樣 sudo 就不會要求提供密碼。

提示
提示:互動式 crm 提示符

使用不含引數 (或只含一個 sublevel 引數) 的 crm,crm 外圍程序將進入互動式模式。此模式由以下提示符指示:

crm(live/HOSTNAME)

為了容易閱讀,我們的文件在互動式 crm 提示符中省略了主機名稱。只有當您需要在特定節點 (如 alice) 上執行互動式外圍程序時,我們才會包含主機名稱,例如:

crm(live/alice)

5.5.1 取得說明

可以使用以下幾種方法來存取說明:

  • 若要輸出 crm 及其指令列選項的用法:

    # crm --help
  • 若要列出所有可用指令的清單:

    # crm help
  • 存取其他說明區段,而不僅僅是指令參考:

    # crm help topics
  • 若要檢視 configure 子指令的延伸說明文字:

    # crm configure help
  • 若要列印 groupconfigure 子指令的語法、用法和範例:

    # crm configure help group

    以下指令的作用相同:

    # crm help configure group

基本上 help 子指令 (不要與 --help 選項混淆) 的所有輸出都會開啟一個文字編輯器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。

提示
提示:在 Bash 和互動式外圍程序中使用 Tab 鍵補齊

crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config→| 會補齊文字,就像在互動式外圍程序中一樣。

5.5.2 執行 crmsh 的子指令

crm 指令本身的使用方式如下:

  • 直接:: 將所有子指令與 crm 結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm help ra 可獲取有關 ra 子指令 (資源代理程式) 的資訊。

    可以縮寫子指令,前提是縮寫後的子指令是唯一的。例如,您可以將 status 縮寫為 st,crmsh 可以識別該縮寫。

    另一項功能是縮寫參數。通常,您會透過 params 關鍵字新增參數。如果 params 區段是第一個且是唯一存在的區段,則您可以省略它。例如,以下行:

    # crm primitive ipaddr IPaddr2 params ip=192.168.0.55

    相當於以下行:

    # crm primitive ipaddr IPaddr2 ip=192.168.0.55
  • 做為 crm 外圍程序程序檔:: 外圍程序程序檔包含 crmcrm 的子指令。如需詳細資訊,請參閱 第 5.5.4 節 「使用 crmsh 的外圍程序程序檔」

  • 做為 crmsh 叢集程序檔::這是中繼資料、對 RPM 套件的參照、組態檔案及使用單一描述性名稱同捆之 crmsh 子指令的集合。可以透過 crm script 指令來管理這些內容。

    請不要將它們與 crmsh 外圍程序程序檔相混淆:雖然兩者具有一些共同的目標,但 crm 外圍程序程序檔只包含子指令,而叢集程序檔所包含的遠遠不只是簡單的指令列舉。如需詳細資訊,請參閱 第 5.5.5 節 「使用 crmsh 的叢集程序檔」

  • 做為內部外圍程序互動:: 輸入 crm 可進入內部外圍程序。提示符會切換為 crm(live)。執行 help 可獲取可用子指令的綜覽。由於內部外圍程序有幾種不同層級的子指令,您可以輸入一個子指令並按 Enter進入此層級。

    例如,如果輸入 resource,便會進入資源管理層級。提示符會切換為 crm(live)resource#。若要離開內部外圍程序,請使用 quit 指令。如果需要回到上一個層級,可使用 backupendcd

    輸入 crm 和相應的子指令 (不帶任何選項) 並按 Enter,即可直接進入該層級。

    內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|crm 便會補齊相應的物件。

crmsh 還支援執行同步指令。使用 -w 選項可以啟用該功能。如果已啟動 crm 但未指定 -w,之後可以將使用者首選的 wait 設為 yes (options wait yes) 來啟用它。如果啟用了此選項,crm 會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource start 這樣的指令。

注意
注意:區分管理子指令與組態子指令

crm 工具有管理功能 (子指令 resourcenode),可用於進行組態設定 (configurecib)。

下面的小節概述了 crm 工具的重要方面。

5.5.3 顯示有關 OCF 資源代理程式的資訊

由於您始終都需要在叢集組態中處理資源代理程式,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代理程式的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 6.2 節 「支援的資源代理程式類別」):

# 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 資源代理程式。

5.5.4 使用 crmsh 的外圍程序程序檔

Crmsh 外圍程序程序檔提供了將 crmsh 子指令列舉到檔案中的便捷方式。如此,您便可輕鬆註解特定行或稍後重新執行這些行。請注意,crmsh 外圍程序程序檔只能包含 crmsh 子指令,不允許包含任何其他指令。

您需要先建立包含特定指令的檔案,然後才能使用 crmsh 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單:

範例 5.3︰ 簡單的 crmsh 外圍程序程序檔
# A small example file with some crm subcommands
status
node list

以井字號 (#) 開頭的所有行都是備註,系統會將其忽略。如果某行過長,可在結尾插入反斜線 (\),然後換到下一行。為方便閱讀,建議縮排屬於特定子指令的行。

若要使用此程序檔,請使用以下其中一種方法:

# crm -f example.cli
# crm < example.cli

5.5.5 使用 crmsh 的叢集程序檔

從所有叢集節點收集資訊和部署任何變更是一項關鍵的叢集管理任務。您無需在不同的節點上手動執行相同的程序 (這很容易出錯),而可以使用 crmsh 叢集程序檔。

請不要將它們與 crmsh 外圍程序程序檔相混淆,第 5.5.4 節 「使用 crmsh 的外圍程序程序檔」中對後者進行了介紹。

對比 crmsh 外圍程序程序檔,叢集程序檔另外會執行如下任務:

  • 安裝特定任務所需的軟體。

  • 建立或修改任何組態檔案。

  • 收集資訊並報告叢集的潛在問題。

  • 將變更部署到所有節點。

crmsh 叢集程序檔不會取代其他叢集管理工具,而是提供整合的方式用於在叢集中執行上述任務。如需詳細資訊,請參閱http://crmsh.github.io/scripts/

5.5.5.1 用法

若要取得所有可用叢集程序檔的清單,請執行:

# crm script list

若要檢視程序檔的組成部份,請使用 show 指令和叢集程序檔的名稱,例如:

# 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 的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。

每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。

每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔:

表 5.1︰ 通用參數
參數引數描述
actionINDEX如果設定此參數,則只會執行單一動作 (verify 傳回索引)
dry_runBOOL如果設定此參數,則只會模擬執行 (預設值:no)
nodesLIST列出要對其執行程序檔的節點
portNUMBER要連接到的埠
statefileFILE在以單一步進方式執行時,狀態將會儲存在指定的檔案中
sudoBOOL如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值:no)
timeoutNUMBER以秒為單位的執行逾時 (預設值:600)
userUSER以指定使用者的身分執行程序檔

5.5.5.2 驗證和執行叢集程序檔

在執行某個叢集程序檔之前,請檢查該程序檔將要執行的動作並驗證其參數,以避免出現問題。叢集程序檔可能會執行一系列動作,並且可能會出於各種原因而失敗。因此,在執行程序檔之前驗證參數可幫助避免出現問題。

例如,mailto 資源代理程式需要唯一的識別碼和一個電子郵件地址。若要驗證這些參數,請執行:

# crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed

        mailx

2. Configure cluster resources

        primitive sysadmin 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 指令:

# 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 檢查您的資源是否已整合到叢集:

# crm status
[...]
 Clone Set: c-sysadmin [sysadmin]
     Started: [ alice bob ]

5.5.6 使用組態範本

注意
注意:取代注意事項

組態範本已棄用,日後會被移除。叢集程序檔將取代組態範本。請參閱第 5.5.5 節 「使用 crmsh 的叢集程序檔」

組態範本是可供 crmsh 使用的現成叢集組態。不要將它們與資源範本 (如第 6.8.2 節 「使用 crmsh 建立資源範本」 所述) 混淆。資源範本適用於叢集而非 crm 外圍程序。

組態範本只需略做調整就能符合特定使用者的需求。當某範本建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自訂時編輯該提示。

以下程序說明如何建立一個簡單但功能齊備的 Apache 組態:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    # 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. 指定所需的組態範本。由於現在需要 組態,因此請選取 apacheapache 範本並將其命名為 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 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

如果您瞭解詳細資料,還可以使指令更簡單。您可以在外圍程序中使用以下指令來彙總上述程序:

# 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。

5.5.7 使用陰影組態進行測試

陰影組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。

一般程序如下:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    # 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)# 

5.5.8 組態變更除錯

在將組態變更載入回叢集之前,建議您先使用 ptest 檢閱變更。ptest 指令可顯示提交變更後將發生之動作的圖表。您需要 graphviz 套件才能顯示圖表。以下範例是一份記錄,新增了監控操作:

# 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

5.5.9 叢集圖表

若要輸出叢集圖表,請使用 crm configure graph 指令。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。

如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令:

# crm configure graph dot config.svg svg

5.5.10 管理 Corosync 組態

Corosync 是大多數 HA 叢集的基礎訊息傳送層。corosync 子指令提供用於編輯和管理 Corosync 組態的指令。

例如,若要列出叢集的狀態,可以使用 status

# 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 組態 (如果未另行指定),並列印各節點之間的差異:

# 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

5.5.11 設定獨立於 cib.xml 的密碼

如果叢集組態包含密碼之類的敏感性資訊,應將其儲存在本地檔案中。這樣,支援報告中就絕對不會記錄或洩漏這些參數。

使用 secret 前,請先執行 show 指令瞭解所有資源的概況:

# crm configure show
primitive mydb mysql \
   params replication_user=admin ...

若要為上文的 mydb 資源設定密碼,請使用以下指令:

# crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

您可以使用以下指令取得儲存的密碼:

# crm resource secret mydb show passwd
linux

各節點間的參數需要同步;crm resource secret 指令可用於執行此操作。強烈建議僅使用此指令來管理機密參數。

5.6 更多資訊

http://crmsh.github.io/

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

http://crmsh.github.io/documentation

提供有關 crm 外圍程序的多個文件,包括使用 crmsh 完成基本叢集設定的 Getting Started 教程,以及 crm 外圍程序的綜合性 Manual。後者的網址為 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:包含全面詳細的參考資訊。

  • Colocation Explained

  • Ordering Explained

6 設定叢集資源

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

6.1 資源類型

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

基本資源

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

群組

群組包含一組需放置在一起的資源,這些資源按順序啟動並以相反順序停止。

複製品

複製品是可在多個主機上處於使用中狀態的資源。任何資源都可複製,只要相應的資源代理程式支援複製功能。

可升級複製品 (也稱為多狀態資源) 是一種可以升級的特殊類型複製品資源。

6.2 支援的資源代理程式類別

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

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

Open Cluster Framework (OCF) 資源代理程式

OCF RA 代理程式最適合與高可用性搭配使用,特別是在您需要可升級複製品資源或特殊監控功能的情況下。這些代理程式通常位於 /usr/lib/ocf/resource.d/provider/ 中。它們的功能類似於 LSB 程序檔。但其組態永遠都是透過環境變數進行,這樣方便接受和處理參數。OCF 規格對於動作必須傳回的離開碼有嚴格的定義。請參閱第 10.3 節 「OCF 傳回代碼和故障復原」。叢集完全遵循這些規格。

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

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

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

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

Linux Standards Base (LSB) 程序檔

LSB 資源代理程式一般由作業系統/套裝作業系統提供,位於 /etc/init.d 中。若要與叢集一起使用,它們必須符合 LSB init 程序檔規格。例如,它們必須至少實作了以下幾個動作:reloadstartforce-reloadstoprestartstatus。如需詳細資訊,請參閱 http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

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

systemd

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 可以使用監控外掛程式 (如果有) 來執行遠端監控。如需詳細資訊,請參閱第 9.1 節 「使用監控外掛程式監控遠端主機上的服務」

STONITH (圍籬區隔) 資源代理程式

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

High Availability Extension 隨附的代理程式將寫入 OCF 規格。

6.3 逾時值

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

  • 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 建立基本資源

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

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

可以使用 Hawk2 或 crmsh 來建立基本資源。

注意
注意:不要操作叢集所管理的服務

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

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

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

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

6.4.1 使用 Hawk2 建立基本資源

若要建立最基本的資源類型,請執行下列步驟:

程序 6.2︰ 使用 Hawk2 新增基本資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 基本資源

  3. 輸入唯一的資源 ID

  4. 如果存在可以依據其進行資源組態的資源範本,請選取相應的範本

  5. 選取要使用的資源代理程式類別servicelsbstonithocfsystemd。如需詳細資訊,請參閱第 6.2 節 「支援的資源代理程式類別」

  6. 如果選取了「ocf」類別,請指定 OCF 資源代理程式的提供者。OCF 規格允許多個廠商提供相同的資源代理程式。

  7. 類型清單中,選取要使用的資源代理程式 (例如IPaddrFilesystem)。此資源代理程式的簡要描述即會顯示。

    注意
    注意

    類型清單中顯示的選項取決於您所選的類別(對於 OCF 資源,還取決於提供者)。

    Hawk2 - 基本資源
    圖 6.1︰ Hawk2 - 基本資源
  8. 指定資源基本資訊後,Hawk2 會顯示以下類別。依照 Hawk2 的建議保留這些類別,或根據需要對其進行編輯。

    參數 (例項屬性)

    確定資源控制服務的哪個例項。建立資源時,Hawk2 會自動顯示所有需要的參數。請編輯這些參數以獲得有效的資源組態。

    如需詳細資訊,請參閱第 6.13 節 「例項屬性 (參數)」

    操作

    用於監控資源。建立資源時,Hawk2 會顯示最重要的資源操作 (startmonitorstop)。

    如需詳細資訊,請參閱第 6.14 節 「資源操作」

    中繼屬性

    告訴 CRM 如何處理特定資源。建立資源時,Hawk2 會自動列出該資源的重要中繼屬性,例如,用於定義資源初始狀態的 target-role 屬性。預設設為 Stopped,這樣資源便不會立即啟動)。

    如需詳細資訊,請參閱第 6.12 節 「資源選項 (中繼屬性)」

    使用效益

    告知 CRM 某個資源需從節點獲取的容量。

    如需詳細資訊,請參閱第 7.10.1 節 「使用 Hawk2 根據資源負載影響放置資源」

  9. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

6.4.2 使用 crmsh 建立基本資源

程序 6.3︰ 使用 crmsh 新增基本資源
  1. root 身分登入並啟動 crm 工具:

    # crm configure
  2. 設定基本資源的 IP 位址:

    crm(live)configure# primitive myIP IPaddr \
          params ip=127.0.0.99 op monitor interval=60s

    以上指令設定名為 基本資源myIPIP 位址。您需要選取一個類別 (此處為 ocf)、提供者 (heartbeat) 和類型 (IPaddr)。此外,此基本資源還需要其他參數,例如 IP 位址。將位址變更為您的設定。

  3. 顯示並檢閱已進行的變更:

    crm(live)configure# show
  4. 提交變更,使之生效:

    crm(live)configure# commit

6.5 建立資源群組

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

可以使用 Hawk2 或 crmsh 來建立資源群組。

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

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

群組資源
圖 6.2︰ 群組資源

群組具有以下內容:

啟動和停止

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

相依性

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

目錄

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

條件約束

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

粘性

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

資源監控

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

6.5.1 使用 Hawk2 建立資源群組

注意
注意:空群組

群組至少須包含一個資源,否則組態視為無效。建立群組時,Hawk2 允許您建立多個基本資源並將它們新增至群組。

程序 6.4︰ 使用 Hawk2 新增資源群組
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 群組

  3. 輸入唯一的群組 ID

  4. 若要定義群組成員,請選取子項清單中的一個或多個項目。使用右側的把手圖示將群組成員拖放為需要的順序,以對群組成員重新排序。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 資源群組
圖 6.3︰ Hawk2 - 資源群組

6.5.2 使用 crmsh 建立資源群組

以下範例建立了兩個基本資源 (一個 IP 位址和一個電子郵件資源)。

程序 6.5︰ 使用 crmsh 新增資源群組
  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

6.6 建立複製品資源

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

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

匿名複製品

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

全域唯一的複製品

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

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

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

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

設定資源監控或條件約束時,複製品的要求與簡單資源不同。如需詳細資料,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained

可以使用 Hawk2 或 crmsh 來建立複製品資源。

6.6.1 使用 Hawk2 建立複製品資源

注意
注意:複製品資源的子資源

複製品可以將基本資源或群組做為子資源。在 Hawk2 中,建立複製品時不能建立或修改子資源。請在新增複製品之前建立子資源並視需要對其進行設定。

程序 6.6︰ 使用 Hawk2 新增複製品資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 複製品

  3. 輸入唯一的複製品 ID

  4. 子資源清單中,選取要做為複製品子資源的基本資源或群組。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 複製品資源
圖 6.4︰ Hawk2 - 複製品資源

6.6.2 使用 crmsh 建立複製品資源

若要建立匿名複製品資源,首先要建立一個基本資源,然後使用 clone 指令參考該資源。

程序 6.7︰ 使用 crmsh 新增複製品資源
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm configure
  2. 設定基本資源,例如:

    crm(live)configure# primitive Apache apache
  3. 複製基本資源:

    crm(live)configure# clone cl-apache Apache

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

可升級複製品 (以前稱為多狀態資源) 是一種特殊的複製品。它們可讓例項處於兩種操作模式之一 (主要或次要)。可升級複製品只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,可升級複製品的要求與簡單資源不同。如需詳細資料,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained

可以使用 Hawk2 或 crmsh 來建立可升級複製品。

6.7.1 使用 Hawk2 建立可升級複製品

注意
注意:可升級複製品的子資源

可升級複製品可以包含基本資源或群組做為子資源。在 Hawk2 中,建立可升級複製品時不能建立或修改子資源。新增可升級複製品之前,請先建立子資源並根據需要對其進行設定。請參閱第 6.4.1 節 「使用 Hawk2 建立基本資源」第 6.5.1 節 「使用 Hawk2 建立資源群組」

程序 6.8︰ 使用 Hawk2 新增可升級複製品
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 多狀態

  3. 輸入唯一的多狀態 ID

  4. 子資源清單中,選取要做為多狀態資源的子資源的基本資源或群組。

  5. 需要時可以修改或新增中繼屬性

  6. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

6.7.2 使用 crmsh 建立可升級複製品

若要建立可升級複製品資源,首先要建立一個基本資源,然後再建立可升級複製品資源。可升級複製品資源必須至少支援升級和降級操作。

程序 6.9︰ 使用 crmsh 新增可升級複製品
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm configure
  2. 設定基本資源。視需要變更間隔:

    crm(live)configure# primitive my-rsc ocf:myCorp:myAppl \
        op monitor interval=60 \
        op monitor interval=61 role="Promoted
  3. 建立可升級複製品資源:

    crm(live)configure# clone clone-rsc my-rsc meta promotable=true

6.8 建立資源範本

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

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

可以使用 Hawk2 或 crmsh 來建立資源範本。

6.8.1 使用 Hawk2 建立資源範本

資源範本的設定方式與基本資源類似:

程序 6.10︰ 新增資源範本
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 範本

  3. 輸入唯一的資源 ID

  4. 請遵照程序 6.2 「使用 Hawk2 新增基本資源」中從步驟 5 開始的指示。

6.8.2 使用 crmsh 建立資源範本

請使用 rsc_template 指令熟悉相應語法:

# 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 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

在條件約束中可以參考資源範本,來代表所有由該範本衍生的基本資源。這有助於產生更加簡明、清晰的叢集組態。除了位置條件約束以外,其他所有條件約束中均允許參考資源範本。並存條件約束不可包含一個以上的範本參考。

6.9 建立 STONITH 資源

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

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

依預設,全域叢集選項 stonith-enabled 設定為 true。如果未定義 STONITH 資源,叢集將會拒絕啟動任何資源。設定一或多個 STONITH 資源以完成 STONITH 設定。您也可以按照類似的方式為其他資源設定 STONITH 資源,但其行為在某些方面存在差異。如需詳細資料,請參閱第 12.3 節 「STONITH 資源和組態」

可以使用 Hawk2 或 crmsh 來建立 STONITH 資源。

6.9.1 使用 Hawk2 建立 STONITH 資源

若要為 SBD、libvirt (KVM/Xen) 或 vCenter/ESX 伺服器新增 STONITH 資源,最簡單的方式就是使用 Hawk2 精靈。

程序 6.11︰ 使用 Hawk2 新增 STONITH 資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 基本資源

  3. 輸入唯一的資源 ID

  4. 類別清單中,選取資源代理程式類別stonith

  5. 類型清單中,選取用於控制 STONITH 裝置的 STONITH 外掛程式。此外掛程式的簡要描述即會顯示。

  6. Hawk2 會自動顯示該資源必需的參數。請輸入每個參數的值。

  7. Hawk2 會顯示最重要的資源操作並建議預設值。如果此時不修改任何設定,Hawk2 會在您確認後立即新增建議的操作及其預設值。

  8. 如無變更必要,請保留預設的中繼屬性設定。

    Hawk2 - STONITH 資源
    圖 6.5︰ Hawk2 - STONITH 資源
  9. 確認變更以建立 STONITH 資源。

    螢幕頂部的訊息會顯示動作是否成功。

要完成圍籬區隔組態,請新增條件約束。如需詳細資訊,請參閱 第 12 章 「圍籬區隔與 STONITH

6.9.2 使用 crmsh 建立 STONITH 資源

程序 6.12︰ 使用 crmsh 新增 STONITH 資源
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # 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. In 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

6.10 設定資源監控

若要確定資源是否正在執行,必須設定針對該資源的資源監控。可以使用 Hawk2 或 crmsh 來設定資源監控功能。

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

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

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

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

若不設定資源監控,則不會向您通知資源成功啟動後發生的失敗,並且叢集會永遠將資源顯示為狀況良好。

通常,叢集只會在資源執行時對其進行監控。但是,若要偵測並行存取違規,還需針對停止的資源設定監控。設定資源監控需指定逾時和/或啟動延遲值以及間隔。該間隔會告知 CRM 應檢查資源狀態的頻率。您還可以設定特定參數,例如為 startstop 操作設定 timeout

如需監控操作參數的詳細資訊,請參閱第 6.14 節 「資源操作」

6.10.1 使用 Hawk2 設定資源監控功能

程序 6.13︰ 新增和修改操作
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 6.2 「使用 Hawk2 新增基本資源」所述新增資源,或選取現有的基本資源進行編輯。

    Hawk2 會自動顯示最重要的操作 (monitorstartstop) 並建議預設值。

    若要查看每個所建議的值名下的屬性,請將滑鼠指標懸停在相應的值上方。

    Image
  3. 若要變更針對 startstop 操作建議的 timeout 值,請執行以下操作:

    1. 按一下該操作旁邊的筆型圖示。

    2. 在開啟的對話方塊中為 timeout 參數輸入其他值,例如 10,然後確認變更。

  4. 若要為 操作變更建議的間隔monitor值:

    1. 按一下該操作旁邊的筆型圖示。

    2. 在開啟的對話方塊中,為監控 interval 輸入其他值。

    3. 在資源停止的情況下設定資源監控:

      1. 從下面的空下拉式方塊中選取 role 這一項。

      2. role 下拉式清單中選取 Stopped

      3. 按一下套用確認所做的變更,並關閉操作的對話方塊。

  5. 確認您在資源組態螢幕中所做的變更。螢幕頂部的訊息會顯示動作是否成功。

若要檢視發生的資源故障,請在 Hawk2 中切換至狀態螢幕,然後選取關注的資源。在操作欄中按一下向下箭頭圖示,然後選取最近的事件。隨後開啟的對話方塊會列出對資源執行的最近動作。其中故障顯示為紅色。若要檢視資源詳細資料,請按一下操作欄中的放大鏡圖示。

Hawk2 - 資源詳細資料
圖 6.6︰ Hawk2 - 資源詳細資料

6.10.2 使用 crmsh 設定資源監控功能

若要監控資源,可以使用兩種方法:使用 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
監控已停止的資源

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

crm(live)configure# primitive dummy1 Dummy \
     op monitor interval="300s" role="Stopped" timeout="10s" \
     op monitor interval="30s" timeout="10s"

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

查探

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

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

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

6.11 從檔案載入資源

可從本地檔案或網路 URL 載入部分或全部組態。可定義三種不同方法:

replace

此選項會以新的來源組態取代目前的組態。

update

此選項會嘗試輸入來源組態。它會將新項目新增至目前的組態或更新其現有項目。

push

此選項會將內容從來源輸入到目前組態中 (與 update 相同)。不過,它會移除在新組態中不可用的物件。

若要從檔案 mycluster-config.txt 載入新組態,請使用以下語法:

# crm configure load push mycluster-config.txt

6.12 資源選項 (中繼屬性)

對於新增的每個資源,您都可以定義選項。叢集使用這些選項來決定資源的行為,它們會告知 CRM 如何處理特定的資源。可以使用 crm_resource --meta 指令或 Hawk2 來設定資源選項。

可用的資源選項如下:

priority

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

預設值為 0.

target-role

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

預設值為 Started.

is-managed

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

預設值為 true.

maintenance

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

預設值為 false.

resource-stickiness

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

各複製品例項的預設值為 1,所有其他資源的預設值為 0

migration-threshold

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

預設值為 INFINITY.

multiple-active

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

預設值為 stop_start.

failure-timeout

等待多少秒後才能像未失敗一樣運作 (並在可能的情況下允許資源回到之前失敗的節點上)?

預設值為 0 (停用)。

allow-migrate

是否允許即時移轉支援 migrate_tomigrate_from 動作的資源。如果值設定為 true,則可在不遺失狀態的情況下移轉資源。如果值設定為 false,將會在第一個節點上關閉資源,並在第二個節點上重新啟動該資源。

ocf:pacemaker:remote 資源的預設值為 true,所有其他資源的預設值為 false

remote-node

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

此選項預設為停用狀態。

警告
警告:使用唯一的 ID

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

remote-port

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

預設值為 3121.

remote-addr

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

預設值為 remote-node 設定的值。

remote-connect-timeout

等待中客體連接在多長時間後逾時?

預設值為 60s.

6.13 例項屬性 (參數)

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

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

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

# crm ra info resource_agent

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

注意
注意:群組、複製品或可升級複製品的例項屬性

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

6.14 資源操作

叢集預設不會確保資源仍正常。若要指示叢集確保資源能正常運作,需要將監控操作新增至資源定義中。可為所有類別或資源代理程式新增監控作業。

監控操作可能具有以下內容:

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

操作的描述。

7 設定資源條件約束

設定所有資源只是工作的一部分。即使叢集知道所有需要的資源,也可能無法正確處理這些資源。使用資源條件約束可指定能在哪些叢集節點上執行資源、以何順序載入資源,以及特定資源相依於其他哪些資源。

7.1 條件約束類型

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

資源位置

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

資源並存

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

資源順序

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

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

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

7.2 分數和 infinity

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

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

  • 任何值 + INFINITY = INFINITY

  • 任何值 - INFINITY = -INFINITY

  • INFINITY - INFINITY = -INFINITY

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

7.3 資源範本和條件約束

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

  • 順序條件約束

  • 並存條件約束

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

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

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

7.4 新增位置條件約束

位置條件約束決定了資源在哪些節點上可以執行、優先執行或禁止執行。舉例而言,位置條件約束可以設為與特定資料庫相關的所有資源都在同一個節點上執行。可以為每個資源多次新增此類條件約束。系統會對指定的資源評估所有位置條件約束。

可以使用 Hawk2 或 crmsh 來新增位置條件約束。

7.4.1 使用 Hawk2 新增位置條件約束

程序 7.1︰ 新增位置條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 位置

  3. 輸入唯一的條件約束 ID

  4. 資源清單中選取要為之定義條件約束的一個或多個資源。

  5. 輸入分數。分數表示您要指定給此資源條件約束的值。正值表示資源可以在您下一步中指定的節點上執行。負值表示資源不應在該節點上執行。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在該節點上執行,請按一下箭頭圖示並選取 Always。這會將分數設為 INFINITY

    • 若要禁止資源在該節點上執行,請按一下箭頭圖示並選取 Never。如此會將分數設定為 -INFINITY,表示資源不得在該節點上執行。

    • 若要將分數設定為 0,請按一下箭頭圖示並選取 Advisory。這樣便會停用條件約束。如果您想設定資源發現,又不想對資源進行條件約束,即可採用這個辦法。

  6. 選取一個節點

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 位置條件約束
圖 7.1︰ Hawk2 - 位置條件約束

7.4.2 使用 crmsh 新增位置條件約束

location 指令定義資源可在、不可在或偏好在哪些節點上執行。

下面的簡單範例中,將在名為 fs1 的節點上執行資源 alice 的優先設定設為 100:

crm(live)configure# location loc-fs1 fs1 100: alice

另一個範例是使用 ping 的位置:

crm(live)configure# primitive ping ping \
    params name=ping dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# clone cl-ping ping meta interleave=true
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule ping: defined ping

參數 host_list 是要 ping 和計數的主機的空格分隔清單。位置條件約束的另一個使用案例是將基本資源分組為一個資源集。例如,如果多個資源依存於某個 ping 屬性來獲得網路連接,則此功能會十分有用。以前,需要在組態中複製 -inf/ping 規則數次,因而不必要地增加了複雜性。

下面的範例會建立參考虛擬 IP 位址 loc-alicevip1 的資源集 vip2

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

在某些情況下,為 location 指令使用資源模式會有效且方便得多。資源模式是兩個斜線之間的規則運算式。例如,使用以下指令可使上述的虛擬 IP 位址全部都相符:

crm(live)configure# location loc-alice /vip.*/ inf: alice

7.5 新增並存條件約束

並存條件約束告知叢集哪些資源可以或不可以在同一個節點上執行。由於並存條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立並存條件約束。

可以使用 Hawk2 或 crmsh 來新增並存條件約束。

7.5.1 使用 Hawk2 新增並存條件約束

程序 7.2︰ 新增並存條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 並存

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。分數決定了資源之間的位置關係。正值表示資源應該在同一個節點上執行。負值表示資源不應該在同一個節點上執行。該分數會結合其他因素來決定將資源配置於何處。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在同一個節點上執行,請按一下箭頭圖示並選取 Always。這會將分數設為 INFINITY

    • 若要禁止資源在同一個節點上執行,請按一下箭頭圖示並選取 Never。如此會將分數設定為 -INFINITY,表示資源不得在同一個節點上執行。

  5. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      由於最頂端的資源依賴於下一個資源 (下面的資源依此類推),叢集首先會決定向哪個位置放置最後一個資源,然後根據該決定放置依賴它的資源,依此類推。如果無法符合條件約束要求,叢集可能不允許執行相依資源。

    3. 若要交換共存條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  6. 如果需要,可以為每個資源指定更多參數 (例如 PromoteStartedDemoteStopped)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 並存條件約束
圖 7.2︰ Hawk2 - 並存條件約束

7.5.2 使用 crmsh 新增並存條件約束

colocation 指令用於定義應在相同或不同主機上執行的資源。

您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。

例如,如果希望 resource1resource2 資源永遠在同一個主機上執行,請使用以下條件約束:

crm(live)configure# colocation coloc-2resource inf: resource1 resource2

對於主要從屬組態,除了在本地執行資源以外,還需要瞭解目前的節點是否為主要節點。

7.6 新增順序條件約束

您可以使用順序條件約束,在另一個資源符合特定條件 (例如已啟動、已停止或已升級為主要資源) 之前或之後,立即啟動或停止某項服務。例如,在裝置可用於系統之前,不能掛接檔案系統。由於順序條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立順序條件約束。

可以使用 Hawk2 或 crmsh 來新增順序條件約束。

7.6.1 使用 Hawk2 新增順序條件約束

程序 7.3︰ 新增順序條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取組態 › 新增條件約束 › 順序

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。若分數大於零,則強制執行順序條件約束,否則只是選擇性執行。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要將順序條件約束設為強制規則,請按一下箭頭圖示並選取 Mandatory

    • 如果只想將順序條件約束設為一項建議,請按一下箭頭圖示並選取 Optional

    • Serialize:若要確保不會同時對資源執行兩個停止/啟動操作,請按一下箭頭圖示並選取 Serialize。這樣可以確保只有在一個資源完全啟動後,系統才能啟動其他資源。特別是對於在啟動期間會對主機產生大量負載的資源,通常會使用此方法。

  5. 對於順序條件約束通常可以啟用對稱選項。這會指定資源停止時使用相反順序。

  6. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      最上面的資源最先啟動,然後是第二個資源,依此類推。通常資源會以相反的順序停止。

    3. 若要交換順序條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  7. 如果需要,可以為每個資源指定更多參數 (例如 PromoteStartedDemoteStopped)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。

  8. 確認變更以完成組態設定。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 順序條件約束
圖 7.3︰ Hawk2 - 順序條件約束

7.6.2 使用 crmsh 新增順序條件約束

order 指令定義動作順序。

例如,如果希望 resource1 永遠在 resource2 前面啟動,請使用以下條件約束:

crm(live)configure# order res1_before_res2 Mandatory: resource1 resource2

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

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

可以使用 Hawk2 或 crmsh 來設定資源集。

7.7.1 使用 Hawk2 透過資源集定義條件約束

程序 7.4︰ 在條件約束中使用資源集
  1. 若要在位置條件約束中使用資源集:

    1. 依照程序 7.1 「新增位置條件約束」所述操作,但步驟 4 除外。不要選取單個資源,而是在按住 CtrlShift 的同時按下滑鼠來選取多個資源。如此就會在位置條件約束中建立一個資源集。

    2. 若要從位置條件約束中移除某個資源,請在按住 Ctrl 的同時再次按一下該資源即可將其取消選取。

  2. 若要在並存或順序條件約束中使用資源集:

    1. 遵照程序 7.2 「新增並存條件約束」程序 7.3 「新增順序條件約束」中的指示,但用於為條件約束定義資源的步驟除外 (步驟 5.a步驟 6.a):

    2. 新增多個資源。

    3. 若要建立資源集,按一下資源旁邊的鏈結圖示,將其鏈結到上方的資源。屬於資源集的資源四周以框架圍起,以此標示資源集。

    4. 您也可以將多個資源併入某個資源集,或建立多個資源集。

      Hawk2 - 一個並存條件約束中的兩個資源集
      圖 7.4︰ Hawk2 - 一個並存條件約束中的兩個資源集
    5. 若要解除資源與其上方資源之間的鏈結,按一下該資源旁邊的剪刀圖示。

  3. 確認變更以完成條件約束組態。

7.7.2 使用 crmsh 透過資源集定義條件約束

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

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

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

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

範例 7.2︰ 並存資源鏈
<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>

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

範例 7.3︰ 排序資源鏈
<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>

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

範例 7.4︰ 以資源集表示的排序資源鏈
<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 邏輯之間切換。

7.7.3 並存無相依項的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依關係。例如,您要在同一個節點上放置兩個資源,但希望叢集在其中一個資源失敗時重新啟動另一個資源。

可以在 crm 外圍程序中使用 weak-bond 指令實現此目的:

# crm configure assist weak-bond resource1 resource2

weak-bond 指令會使用指定的資源自動建立一個虛構資源和並存條件約束。

7.8 指定資源容錯移轉節點

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

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

可以使用 Hawk2 或 crmsh 來指定資源容錯移轉節點。

範例 7.5︰ 移轉限定值 - 處理流程

例如,假設您已為資源 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),資源將不會移轉。

7.8.1 使用 Hawk2 指定資源容錯移轉節點

程序 7.5︰ 指定容錯移轉節點
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 7.1 「新增位置條件約束」 所述為該資源設定位置條件約束。

  3. migration-threshold中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至該資源,並為該 migration-threshold 輸入一個值。該值應該為小於 INFINITY 的正數。

  4. 若要讓資源的 failcount 自動過期,請依failure-timeout中的程序 6.2: 使用 Hawk2 新增基本資源 所述將 步驟 5 中繼屬性新增至該資源,並為該 輸入一個failure-timeout

    Image
  5. 若要指定具有資源優先設定的其他容錯移轉節點,請建立其他位置條件約束。

您也可以隨時手動清理資源的 failcount,而不是等待資源的 failcount 自動過期。如需詳細資訊,請參閱第 8.5.1 節 「使用 Hawk2 清理叢集資源」

7.8.2 使用 crmsh 指定資源容錯移轉節點

若要判斷資源容錯移轉,請使用 meta 屬性 migration-threshold.如果在所有節點上的失敗計數都超過 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,資源將不會移轉。

7.9 指定資源容錯回復節點 (資源粘性)

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

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

值為 0

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

值大於 0

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

值小於 0

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

值為 INFINITY

資源永遠留在目前的位置,除非因節點不再適合執行資源 (節點關機、節點待命、達到 migration-threshold 或組態變更) 而強制關閉資源。此選項的作用幾乎等同於停用自動容錯回復。

值為 -INFINITY

總是從目前位置移出資源。

7.9.1 使用 Hawk2 指定資源容錯回復節點

程序 7.6︰ 指定資源粘性
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. resource-stickiness 中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至資源。

  3. resource-stickiness 指定介於 -INFINITYINFINITY 之間的值。

    Image

7.10 依據資源負載影響放置資源

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

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

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

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

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

可以使用 Hawk2 或 crmsh 來組態這些設定:

如果一個節點有足夠的可用容量來滿足資源的要求,則認為該節點符合資源要求。若要手動設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。但是,屬性的值必須是整數。

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

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

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

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

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

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

注意
注意:適用於 Xen 和 libvirt 的不同資源代理程式

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

對於 libvirt,請使用 ocf:heartbeat:VirtualDomain 資源代理程式。

除了偵測最低要求外,您還可以透過 VirtualDomain 資源代理程式監控目前的使用率。它可以偵測虛擬機器的 CPU 和 RAM 使用情況。若要使用此功能,請設定類別、提供者和類型如下的資源:ocf:heartbeat:VirtualDomain。可以使用以下例項屬性:

  • autoset_utilization_cpu

  • autoset_utilization_hv_memory (用於 Xen) 或 autoset_utilization_host_memory (用於 KVM)

這些屬性預設為 true。如此,每個監控週期都會更新 CIB 中的使用率值。如需詳細資訊,請參閱crm ra info VirtualDomain

注意
注意:hv_memoryhost_memory

NodeUtilizationVirtualDomain 資源代理程式中,hv_memoryhost_memory 均預設為 true。但 Xen 只需要 hv_memory,KVM 只需要 host_memory。為了避免引起混淆,我們建議停用不需要的屬性。例如:

範例 7.6︰ 在停用 hv_memory 的情況下為 KVM 建立資源代理程式
# crm configure primitive p_nu NodeUtilization \
      params utilization_hv_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_hv_memory=false \
      op monitor timeout=30s interval=10s
範例 7.7︰ 在停用 host_memory 的情況下為 Xen 建立資源代理程式
# crm configure primitive p_nu NodeUtilization \
      params utilization_host_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_host_memory=false \
      op monitor timeout=30s interval=10s

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

default (預設值)

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

utilization

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

minimal

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

balanced

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

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

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

7.10.1 使用 Hawk2 根據資源負載影響放置資源

使用率屬性用於設定資源的要求以及節點提供的容量。您需要先設定節點的容量,然後才能設定資源所需的容量。

程序 7.7︰ 設定節點提供的容量
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態

  3. 節點索引標籤上,選取要設定其容量的節點。

  4. 操作欄中按一下向下箭頭圖示,然後選取編輯

    編輯節點螢幕即會開啟。

  5. 使用率下,將使用率屬性的名稱輸入到空下拉方塊中。

    該名稱可以是任意名稱 (例如 RAM_in_GB)。

  6. 按一下新增圖示以新增屬性。

  7. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

    Image
  8. 新增所需數量的使用率屬性,並為其新增相應的值。

  9. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

程序 7.8︰ 設定資源所需的容量

請在建立基本資源或編輯現有基本資源時,設定特定資源需從節點中獲取的容量。

您需要先依程序 7.7 所述設定叢集節點的使用率屬性,之後才能將使用率屬性新增至資源。

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要將使用率屬性新增至現有資源,請依照第 8.2.1 節 「使用 Hawk2 編輯資源和群組」所述前往管理 › 狀態,然後開啟資源組態對話方塊。

    如果要建立新資源,請前往組態 › 新增資源,然後依照第 6.4.1 節 「使用 Hawk2 建立基本資源」所述繼續操作。

  3. 在資料組態對話方塊中,轉到使用率類別。

  4. 從空下拉方塊中,選取您在程序 7.7 中已為節點設定的其中一個使用率屬性。

  5. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

  6. 新增所需數量的使用率屬性,並為其新增相應的值。

  7. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

設定節點提供的容量以及資源所需的容量之後,請在全域叢集選項中設定位置策略。否則,容量組態不會生效。可以使用幾個策略來排程負載:例如,您可將負載集中於最少的節點上,或在所有可用的節點上平均分攤。

程序 7.9︰ 設定放置策略
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態以開啟相應的螢幕。該螢幕會顯示全域叢集選項和資源,以及操作預設值。

  3. 從螢幕上部的空下拉式方塊中選取 placement-strategy

    依預設,其值會設定為預設,表示不考慮使用率屬性和值。

  4. 根據要求將配置策略設定為適當的值。

  5. 確認您的變更。

7.10.2 使用 crmsh 根據資源負載影響放置資源

若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代理程式 (例如 VirtualDomain) 會自行更新使用率。

在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。

程序 7.10︰ 使用 crm 新增或修改使用率屬性
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm configure
  2. 若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代預留位置 NODE_1

    crm(live)configure# node NODE_1 utilization hv_memory=16384 cpu=8

    透過設定這些值,NODE_1 將會向資源提供 16 GB 記憶體和 8 個 CPU 核心。

  3. 若要指定資源需要的容量,請使用:

    crm(live)configure# primitive xen1 Xen ... \
          utilization hv_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

以下範例展示了含有四個虛擬機器的三節點叢集,其中的各個節點完全相同:

crm(live)configure# node alice utilization hv_memory="4000"
crm(live)configure# node bob utilization hv_memory="4000"
crm(live)configure# node charlie utilization hv_memory="4000"
crm(live)configure# primitive xenA Xen \
    utilization hv_memory="3500" meta priority="10" \
    params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure# primitive xenB Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure# primitive xenC Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure# primitive xenD 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 只有其中之一仍可以放置,並且由於它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

7.11 更多資訊

如需設定條件約束的詳細資訊,以及順序和並存基本概念的詳細背景資訊,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的以下文件:

  • Pacemaker ExplainedResource Constraints 一章

  • Colocation Explained

  • Ordering Explained

8 管理叢集資源

設定叢集中的資源後,可使用叢集管理工具啟動、停止、清理、移除或移轉資源。本章介紹如何使用 Hawk2 或 crmsh 執行資源管理任務。

8.1 顯示叢集資源

8.1.1 使用 crmsh 顯示叢集資源

當管理叢集時,crm configure show 指令會列出叢集組態、全域選項、基本資源等目前 CIB 物件:

# 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 後:

# crm configure show admin_addr
primitive admin_addr IPaddr2 \
       params ip=192.168.2.1 \
       op monitor interval=10 timeout=20

但在某些情況下,您可能希望更精確地限制特定資源的輸出。那麼,您可以使用過濾器。過濾器可將輸出限定到特定元件。例如,若要僅列出節點,可使用 type:node

# crm configure show type:node
node 178326192: alice
node 178326448: bob

如果您還想列出基本資源,請使用 or 運算子:

# 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

此外,若要搜尋以特定字串開頭的物件,請使用以下表示法:

# crm configure show type:primitive and 'admin*'
primitive admin_addr IPaddr2 \
       params ip=192.168.2.1 \
       op monitor interval=10 timeout=20

若要列出所有可用類型,請輸入 crm configure show type:,然後按 →| 鍵。Bash 補齊功能會列出所有類型。

8.2 編輯資源和群組

可以使用 Hawk2 或 crmsh 來編輯資源或群組。

8.2.1 使用 Hawk2 編輯資源和群組

建立資源後,您隨時都可以編輯其組態,視需要調整參數、操作或中繼屬性。

程序 8.1︰ 修改資源或群組
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在 Hawk2 的狀態螢幕中,轉到資源清單。

  3. 操作欄中,按一下要修改的資源或群組旁邊的向下箭頭圖示,然後選取編輯

    資源組態螢幕隨即開啟。

    Hawk2 - 編輯基本資源
    圖 8.1︰ Hawk2 - 編輯基本資源
  4. 在組態螢幕頂部,可以選取要執行的操作。

    如果要編輯基本資源,可以執行以下操作:

    • 複製資源

    • 重新命名資源 (變更其 ID)

    • 刪除資源

    如果要編輯群組,可以執行以下操作:

    • 建立要新增至此群組的新基本資源

    • 重新命名群組 (變更其 ID)

    • 拖動群組成員以變更其排列順序

  5. 若要新增新參數、操作或中繼屬性,請從空白下拉式清單中選取一項。

  6. 若要編輯操作類別中的任意值,請按一下相應項目的編輯圖示,為該操作輸入其他值,然後按一下套用

  7. 完成後,按一下資源組態螢幕中的套用按鈕,以確認對參數、操作或中繼屬性所做的變更。

    螢幕頂部的訊息會顯示動作是否成功。

8.2.2 使用 crmsh 編輯群組

若要變更群組成員的順序,請在 modgroup 子指令中使用 configure 指令。例如,使用下面的指令可將基本資源 Email 移到 Public-IP 前面:

crm(live)configure# modgroup g-mailsvc add Email before Public-IP

若要從群組中移除某個資源 (例如,Email),請使用以下指令:

crm(live)configure# modgroup g-mailsvc remove Email

8.3 啟動叢集資源

啟動叢集資源之前,請先確定該資源已正確設定。例如,如果使用 Apache 伺服器做為叢集資源,請先設定 Apache 伺服器。完成 Apache 組態後再在叢集中啟動相應資源。

注意
注意:不要操作叢集所管理的服務

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

不過,如果您要檢查服務是否正確設定,請手動將其啟動,但務必在 High Availability Extension 接管之前將它再次停止。

若要對叢集目前管理的資源進行干預,請先將資源設定為 maintenance mode。如需詳細資料,請參閱程序 27.5 「使用 Hawk2 將資源置於維護模式」

可以使用 Hawk2 或 crmsh 來啟動叢集資源。

8.3.1 使用 Hawk2 啟動叢集資源

透過 Hawk2 建立資源時,您可以使用 target-role 中繼屬性設定該資源的初始狀態。如果將其值設定為 stopped,則資源建立後不會自動啟動。

程序 8.2︰ 啟動新資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 選取要啟動的資源。在其操作欄中,按一下啟動圖示。若要繼續,請對顯示的訊息進行確認。

資源啟動後,Hawk2 會將資源的狀態變為綠色,並顯示目前執行該資源的節點。

8.3.2 使用 crmsh 啟動叢集資源

若要啟動新叢集資源,需要提供相應的識別碼。

程序 8.3︰ 使用 crmsh 啟動叢集資源
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm
  2. 切換至資源層級:

    crm(live)# resource
  3. 使用 start 啟動資源,然後按 →| 鍵顯示所有已知資源:

    crm(live)resource# start ID

8.4 停止叢集資源

8.4.1 使用 crmsh 停止叢集資源

若要停止一或多個現有叢集資源,需要提供相應的識別碼。

程序 8.4︰ 使用 crmsh 停止叢集資源
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm
  2. 切換至資源層級:

    crm(live)# resource
  3. 使用 stop 停止資源,然後按 →| 鍵顯示所有已知資源:

    crm(live)resource# stop ID

    您一次可以停止多個資源:

    crm(live)resource# stop ID1 ID2 ...

8.5 清理叢集資源

資源失敗時會自動重新啟動,但每次失敗都會增加該資源的失敗計數。

如果為資源設定了 migration-threshold,則當失敗次數達到移轉限定值時,節點將不再執行該資源。

可以自動重設資源的失敗計數 (透過設定資源的 failure-timeout 選項),也可使用 Hawk2 或 crmsh 手動重設。

8.5.1 使用 Hawk2 清理叢集資源

程序 8.5︰ 清理資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取狀態資源清單還會顯示狀態

  3. 轉到資源,進行清理。在操作欄中,按一下向下箭頭按鈕並選取清理。若要繼續,請對顯示的訊息進行確認。

    如此即會執行 crm resource cleanup 指令,並在所有節點上清理該資源。

8.5.2 使用 crmsh 清理叢集資源

程序 8.6︰ 使用 crmsh 清理資源
  1. 開啟外圍程序並以 root 使用者身分登入。

  2. 取得所有資源的清單:

    # crm resource list
      ...
     Resource Group: dlm-clvm:1
             dlm:1  (ocf:pacemaker:controld) Started
             clvm:1 (ocf:heartbeat:lvmlockd) Started
  3. 例如,若要清理資源 dlm

    # crm resource cleanup dlm

8.6 移除叢集資源

若要從叢集中移除資源,請依照下面的 Hawk2 或 crmsh 程序操作,以免出現組態錯誤。

8.6.1 使用 Hawk2 移除叢集資源

程序 8.7︰ 移除叢集資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 依照程序 8.5 「清理資源」 中的說明在所有節點上清理該資源。

  3. 停止資源:

    1. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

    2. 操作欄中,按一下資源旁邊的停止按鈕。

    3. 若要繼續,請對顯示的訊息進行確認。

      資源停止後,狀態欄將會反映此變化。

  4. 刪除資源:

    1. 從左側導覽列中,選取組態 › 編輯組態

    2. 資源清單中前往相應的資源。在操作欄中,按一下資源旁邊的刪除圖示。

    3. 若要繼續,請對顯示的訊息進行確認。

8.6.2 使用 crmsh 移除叢集資源

程序 8.8︰ 使用 crmsh 移除叢集資源
  1. root 身分登入並啟動 crm 互動式外圍程序:

    # 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.7 移轉叢集資源

當軟體或硬體發生故障時,叢集會自動對資源進行容錯移轉 (移轉),具體情況視您可以定義的特定參數 (例如移轉限定值或資源粘性) 而定。您也可以手動將資源移轉至叢集中的其他節點,或將其從目前節點移出,讓叢集決定將資源放置在哪裡。

可以使用 Hawk2 或 crmsh 來移轉叢集資源。

8.7.1 使用 Hawk2 移轉叢集資源

程序 8.9︰ 手動移轉資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 資源清單中選取相應的資源。

  4. 操作欄中,按一下向下箭頭按鈕並選取移轉

  5. 隨後開啟的視窗中會提供以下選項:

    • 從目前節點移出:此選項會為目前節點建立一個分數為 -INFINITY 的位置條件約束。

    • 或者,您也可以將資源移到另一節點上。如此會建立一個位置條件約束,其目的節點的分數為 INFINITY

  6. 確認您的選擇。

若要讓資源回到原來的狀態,請執行下列步驟:

程序 8.10︰ 取消移轉資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態資源清單還會顯示狀態

  3. 資源清單中前往相應的資源。

  4. 操作欄中,按一下向下箭頭按鈕並選取清除。若要繼續,請對顯示的訊息進行確認。

    Hawk2 會使用 crm_resource  --clear 指令。資源可以移回其原始位置,也可以保留在目前的位置 (具體取決於資源粘性)。

如需詳細資訊,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的 Pacemaker Explained。請參閱 Resource Migration 部分。

8.7.2 使用 crmsh 移轉叢集資源

可以使用 move 指令來完成這項任務。例如,若要將資源 ipaddress1 移轉至名為 bob 的叢集節點,請使用以下指令:

# crm resource
 crm(live)resource# move ipaddress1 bob

8.8 使用標記對資源分組

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

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

location loc-db-prefer databases 100: alice

可以使用 Hawk2 或 crmsh 來建立標記。

8.8.1 使用 Hawk2 透過標記對資源分組

程序 8.11︰ 新增標記
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增資源 › 標記

  3. 輸入唯一的標記 ID

  4. 物件清單中選取要與標記關聯的資源。

  5. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 標記
圖 8.2︰ Hawk2 - 標記

8.8.2 使用 crmsh 透過標記對資源分組

例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases 的標記,並將與該資料庫相關的所有資源新增至此標記:

# crm configure tag databases: db1 db2 db3

這樣,只需使用一個指令就能啟動所有這些資源:

# crm resource start databases

同樣,您也可以一次性停止所有這些資源:

# crm resource stop databases

9 管理遠端主機上的服務

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

9.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) 的資源,就是一個典型的使用案例。如果容器的任何資源發生故障,容器會重新啟動。如需組態設定範例,請參閱範例 9.1 「為監控外掛程式設定資源」。或者,若要使用 Nagios 資源代理程式透過網路監控主機或服務,也可以將其設定為一般資源。

範例 9.1︰ 為監控外掛程式設定資源
primitive vm1 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"

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

系統考慮虛擬機器的移轉限定值時,會將服務的失敗計數納入考量。

9.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 個節點的成員數量限制)。

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

10 新增或修改資源代理程式

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

10.1 STONITH 代理程式

叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。

警告
警告:不支援外部 SSH/STONITH

我們無法得知 SSH 對其他系統問題會做出什麼反應。因此,線上環境不支援外部 SSH/STONITH 代理程式 (例如 stonith:external/ssh)。如果您仍要使用此類代理程式來進行測試,請安裝 libglue-devel 套件。

若要取得目前所有可用 STONITH 裝置 (從軟體角度) 的清單,請使用 crm ra list stonith 指令。如果您找不到偏好的代理程式,請安裝 -devel 套件。如需 STONITH 裝置與資源代理程式的詳細資訊,請參閱第 12 章 「圍籬區隔與 STONITH

目前沒有關於如何編寫 STONITH 代理程式的文件。若要撰寫新的 STONITH 代理程式,請參閱 cluster-glue 套件原始碼中提供的範例。

10.2 撰寫 OCF 資源代理程式

所有 OCF 資源代理程式 (RA) 都存放於 /usr/lib/ocf/resource.d/ 中,請參閱第 6.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 指令:

    # crm configure primitive coffee_1 ocf:coffee_machine:kitchen ...
  3. 執行不同的外圍程序函數,並以不同的名稱儲存檔案。

10.3 OCF 傳回代碼和故障復原

根據 OCF 規格,對於動作必須返回的離開碼有著嚴格的定義。叢集會始終根據預期結果檢查傳回代碼。如果結果不符合預期值,則該操作將被視為失敗,並啟動復原動作。失敗復原有三種類型:

表 10.1︰ 故障復原類型

復原類型

描述

叢集採取的動作

軟式

發生暫時錯誤。

重新啟動資源或將其移到新的位置。

硬式

發生非暫時錯誤。該錯誤可能與目前節點有關。

將資源移到別處並阻止其在目前節點上被重試。

嚴重錯誤

發生對於所有叢集節點均相同的非暫時錯誤。這表示指定了錯誤的組態。

停止資源並阻止其在任何叢集節點上啟動。

下表列出了假設一個動作被視為已失敗時的不同 OCF 傳回代碼,另外還顯示了叢集在接收到相應錯誤碼時將啟始的復原類型。

表 10.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 傳回代碼可能需要也可能不需要資源復原,具體取決於預期的資源狀態。如果不是預期情況,則進行 soft 復原。

8

OCF_RUNNING_­PROMOTED

資源正以已升級模式執行。

軟式

9

OCF_FAILED_­PROMOTED

資源處於已升級模式,但已失敗。資源將被降級、停止,然後再次啟動 (還可能升級)。

軟式

其他

自訂錯誤碼。

軟式

11 監控叢集

本章介紹如何監控叢集的健康情況以及檢視其歷程。

11.1 監控叢集狀態

Hawk2 提供不同的螢幕來監控單個叢集和多個叢集:狀態儀表板螢幕。

11.1.1 監控單個叢集

若要監控單個叢集,請使用狀態螢幕。當您登入 Hawk2 後,預設會顯示狀態螢幕。右上角的圖示可讓使用者一目了然地獲悉叢集狀態。如需更多詳細資料,請查看以下類別:

錯誤

如果發生了錯誤,會顯示在頁面頂部。

資源

顯示設定的資源,包括它們的狀態名稱 (ID)、位置 (執行資源的節點) 和資源代理程式類型。在操作欄中,您可以啟動或停止資源,觸發多個動作或檢視詳細資料。可以觸發的動作包括:將資源設定為維護模式 (或移除維護模式)、將其移轉到其他節點、清理資源、顯示任何最近的事件,或編輯資源。

節點

顯示您所登入的叢集站點名下的節點,包括節點狀態名稱。在維護待命欄中,您可以為節點設定或移除 maintenancestandby 旗標。操作列可用於檢視節點的最近事件或其他詳細資料:例如,檢視是否為相應節點設定了 standbyutilizationmaintenance 屬性。

票證

僅當已設定了票證的情況下才顯示 (用於與 Geo 叢集配合使用)。

Hawk2 - 叢集狀態
圖 11.1︰ Hawk2 - 叢集狀態

11.1.2 監控多個叢集

若要監控多個叢集,請使用 Hawk2 儀表板儀表板螢幕中顯示的叢集資訊儲存在伺服器一端。叢集節點之間會同步這些資訊 (如果已設定叢集節點之間的無密碼 SSH 存取權限)。如需詳細資料,請參閱第 D.2 節 「設定無密碼 SSH 帳戶」。不過,執行 Hawk2 的機器甚至不需要屬於任何叢集也可實現該目的,它可以是不相關的獨立系統。

除了一般的 Hawk2 要求之外,還需要符合以下先決條件才能使用 Hawk2 監控多個叢集:

先決條件
  • 要透過 Hawk5 儀表板監控的所有叢集都必須執行 SUSE Linux Enterprise High Availability Extension 15 SP5。

  • 如果您之前未在每個叢集節點上用自己的證書 (或官方證書管理中心簽署的證書) 取代 Hawk2 的自行簽署證書,請執行以下操作:在每個叢集的每個節點上至少登入 Hawk2 一次。驗證證書 (或在瀏覽器中新增一個例外以使警告不再顯示)。否則,Hawk2 將無法連接到叢集。

程序 11.1︰ 使用儀表板監控多個叢集
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 儀表板

    Hawk2 會顯示目前叢集站點的資源和節點綜覽。此外,它還會顯示已設定為與 Geo 叢集配合使用的所有票證。如需有關此檢視中所用圖示的資訊,請按一下圖例。若要搜尋資源 ID,請在搜尋文字方塊中輸入名稱 (ID)。若只想顯示特定節點,請按一下過濾器圖示,並選取一個過濾選項。

    包含一個叢集站點 (amsterdam) 的 Hawk2 儀表板
    圖 11.2︰ 包含一個叢集站點 (amsterdam) 的 Hawk2 儀表板
  3. 若要為多個叢集新增儀表板:

    1. 按一下新增叢集

    2. 輸入用於在儀表板中識別該叢集的叢集名稱。例如 berlin

    3. 輸入第二個叢集中某個節點的完全合格的主機名稱。例如 charlie

      Image
    4. 按一下新增。Hawk2 會為新增的叢集站點顯示另一個索引標籤,提供該叢集站點的節點和資源綜覽。

      注意
      注意:連接錯誤

      如果系統提示您輸入密碼來登入此節點,則表明您可能未連接到此節點,且未取代自行簽署的證書。在此情況下,即使輸入了密碼,連接也將失敗,並顯示以下訊息:Error connecting to server. Retrying every 5 seconds... '

      若要繼續,請參閱取代自行簽署的證書

  4. 若要檢視叢集站點的更多詳細資料或管理叢集站點,請切換到站點的索引標籤並按一下鎖鏈圖示。

    Hawk2 會在新的瀏覽器視窗或索引標籤中開啟此站點的狀態檢視。在此檢視中,您可以管理 Geo 叢集的這部分內容。

  5. 若要從儀表板中移除某個叢集,請按一下該叢集詳細資料右側的 x 圖示。

11.2 驗證叢集健康情況

您可以使用 Hawk2 或 crmsh 來檢查叢集的健康情況。

11.2.1 使用 Hawk2 驗證叢集健康情況

Hawk2 提供了一個精靈用來檢查和偵測叢集存在的問題。分析完成後,Hawk2 會建立包含更多詳細資料的叢集報告。若要驗證叢集健康情況並產生報告,Hawk2 需要具有在節點之間進行無密碼 SSH 存取的權限。否則,它只能從目前的節點收集資料。如果您已使用 crm 外圍程序提供的開機程序檔設定叢集,那麼此時已設定好無密碼 SSH 存取權。如果您需要手動設定,請參閱第 D.2 節 「設定無密碼 SSH 帳戶」

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 精靈

  3. 展開基本類別。

  4. 選取驗證健康情況和組態精靈。

  5. 按一下驗證進行確認。

  6. 輸入叢集的 root 密碼,然後按一下套用。Hawk2 會產生報告。

11.2.2 使用 crmsh 檢查健康狀態

您可以使用所謂的程序檔顯示叢集或節點的健康狀態。程序檔可以執行各種不同的任務,並不局限於顯示健康情況。不過,本小節將重點介紹如何獲得健康狀態資訊。

若要獲得 health 指令的所有詳細資料,請使用 describe

# crm script describe health

該指令會顯示一則描述和所有參數及其預設值的清單。若要執行程序檔,請使用 run

# crm script run health

如果您希望只執行整套指令中的一個步驟,可以使用 describe 指令列出 Steps 類別中的所有可用步驟。

例如,以下指令會執行 health 指令的第一個步驟。輸出會儲存在 health.json 檔案中以供進一步調查:

# crm script run health statefile='health.json'

您也可以使用 crm cluster health 執行以上指令。

如需程序檔的其他資訊,請參閱 http://crmsh.github.io/scripts/

11.3 檢視叢集歷程

Hawk2 提供了以下用於檢視叢集過往事件 (依不同的層級和不同的詳細程度) 的功能:

您也可以使用 crmsh 檢視叢集歷程資訊:

11.3.1 檢視節點或資源的最近事件

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態。它會列出資源節點

  3. 若要檢視資源的最近事件:

    1. 按一下資源並選取相應的資源。

    2. 在資源的操作欄中按一下向下箭頭按鈕,然後選取最近的事件

      Hawk2 會開啟一個新視窗,並顯示最近事件的表格檢視窗。

  4. 若要檢視節點的最近事件:

    1. 按一下節點並選取相應的節點。

    2. 在節點的操作欄中,選取最近的事件

      Hawk2 會開啟一個新視窗,並顯示最近事件的表格檢視窗。

      Image

11.3.2 使用歷程總管產生叢集報告

從左側導覽列中,選取疑難排解 › 歷程,以存取歷程總管歷程總管可讓您建立詳細的叢集報告並檢視轉換資訊。它提供以下選項:

產生

建立特定時間內的叢集報告。Hawk2 會呼叫 crm report 指令來產生報告。

上傳

可讓您上傳直接使用 crm 外圍程序建立的或位於不同叢集上的 crm report 歸檔。

產生或上傳報告後,它們會顯示在報告下方。在報告清單中,您可以顯示報告的詳細資料,或者下載或刪除報告。

Hawk2 - 歷程總管主要檢視
圖 11.3︰ Hawk2 - 歷程總管主要檢視
程序 11.2︰ 產生或上傳叢集報告
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取疑難排解 › 歷程

    歷程總管螢幕會在產生檢視窗中開啟。依預設,報告的建議時間範圍為過去 1 小時。

  3. 若要建立叢集報告:

    1. 若要立即啟動報告,請按一下產生

    2. 若要修改報告的時間範圍,請按一下建議時間範圍的任意位置並從下拉方塊中選取另一個選項。您還可以分別輸入自訂的開始日期、結束日期及小時。若要啟動報告,請按一下產生

      報告產生後會顯示在報告下方。

  4. 若要上傳叢集報告,crm report 歸檔必須位於您可透過 Hawk2 存取的檔案系統中。請執行下列步驟:

    1. 切換到上傳索引標籤。

    2. 瀏覽叢集報告歸檔並按一下上傳

      報告上傳後會顯示在報告下方。

  5. 若要下載或刪除報告,請在操作欄中按一下報告旁邊的相應圖示。

  6. 若要檢視歷程總管中的報告詳細資料,請按一下報告的名稱,或從操作欄中選取顯示

    Image
  7. 按一下報告按鈕返回到報告清單。

歷程總管中的報告詳細資料
  • 報告的名稱。

  • 報告的開始時間。

  • 報告的結束時間。

  • 報告所涵蓋的叢集中的轉換次數以及所有轉換的時間線。若要瞭解如何檢視轉換的更多詳細資料,請參閱第 11.3.3 節

  • 節點事件。

  • 資源事件。

11.3.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-controldpacemaker-schedulerdpacemaker-execd

圖形

顯示轉換的圖形表示。如果您按一下圖形,則會模擬計算 (與 pacemaker-schedulerd 執行的計算完全一樣),並產生圖形視覺效果。

程序 11.3︰ 檢視轉換詳細資料
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取疑難排解 › 歷程

    如果報告已產生或上傳,它們會顯示在報告清單中。否則,請依程序 11.2 所述產生或上傳報告。

  3. 按一下報告的名稱或從操作欄中選取顯示以開啟歷程總管中的報告詳細資料

  4. 若要存取轉換詳細資料,您需要在下面顯示的轉換時間線中選取一個轉換點。使用上一個下一個以及放大縮小圖示尋找您感興趣的轉換。

  5. 若要顯示 pe-input* 的名稱、建立時間以及檔案是在哪個節點是建立的,請將滑鼠指標懸停在時間線的轉換點上。

  6. 若要檢視歷程總管中的轉換詳細資料,請按一下要瞭解其詳細資訊的轉換點。

  7. 若要顯示詳細資料組態差異記錄圖形,請按一下相應的按鈕以顯示歷程總管中的轉換詳細資料中所述的內容。

  8. 若要返回報告清單,請按一下報告按鈕。

11.3.4 使用 crmsh 擷取歷程資訊

調查叢集歷程是一項複雜的任務。為了簡化此項任務,crmsh 提供了 history 指令及其子指令。假設 SSH 已正確設定。

每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history 子指令擷取。

依預設,所有 history 指令顯示的都是最近一小時內發生的事件。若要變更此時間範圍,請使用 limit 子指令。語法是:

# crm history
crm(live)history# limit FROM_TIME [TO_TIME]

以下是一些有效的範例:

limit 4:00pm , limit 16:00

這兩個指令的含意相同,都是指當天下午 4:00。

limit 2012/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

11.4 使用 SysInfo 資源代理程式監控系統健康情況

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

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

程序 11.4︰ 設定系統健康情況監控

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

  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 屬性設定為 redpacemaker-schedulerd 會為該節點的資源分數加 -INF。這樣所有資源都會從此節點移出。STONITH 資源將是最後一個停止的資源,但即使 STONITH 資源不再執行,節點仍可處於圍籬區隔模式。圍籬區隔的節點可以直接存取 CIB 並將繼續工作。

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

  • 執行下列指令:

    # crm node status-attr NODE delete #health_disk
  • 在該節點上重新啟動叢集服務。

  • 將節點重新開機。

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

12 圍籬區隔與 STONITH

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

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

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

12.1 圍籬區隔的類別

有兩類圍籬區隔:資源層級圍籬區隔和節點層級圍籬區隔。後者為本章的主要主題。

資源層級圍籬區隔

資源層級圍籬區隔可確保對給定資源的獨佔存取。此情況的常見範例就是透過 SAN 光纖通道開關 (用於鎖定節點禁止存取其磁碟) 或 SCSI Reserve 之類的方法變更節點的區域。如需範例,請參閱第 13.10 節 「其他儲存保護機制」

節點層級圍籬區隔

節點層級圍籬區隔可完全防止故障節點存取共用資源。這通常可以透過一種簡單但稍嫌粗暴的方法來實現,即重設或關閉節點。

顯示圍籬區隔的不同類型和功能的樹狀結構
圖 12.1︰ 圍籬區隔的類別

12.2 節點層級圍籬區隔

在 Pacemaker 叢集中,節點層級圍籬區隔的實作方式是 STONITH (關閉另一個節點)。High Availability Extension 提供了 stonith 指令列工具,此為一個可擴充介面,用於從遠端關閉叢集中的節點。如需可用選項的綜覽,請執行 stonith --help,如需詳細資訊,請參閱 stonith 的手冊頁。

12.2.1 STONITH 裝置

若要使用節點層級圍籬區隔,首先需要擁有一個圍籬區隔裝置。若要取得 High Availability Extension 支援的 STONITH 裝置清單,請在任何節點上執行下列其中一個指令:

# stonith -L

# crm ra list stonith

STONITH 裝置可分為以下類別:

配電裝置 (PDU)

在管理重要網路、伺服器和資料中心設備的電源容量和功能方面,配電裝置扮演著至關重要的角色。它們可以提供已連接設備的遠端負載監控功能,並可進行個別插座電源控制以實現遠端電能回收。

不斷電供電系統 (UPS)

市電電源中斷時,透過其他來源供電的穩定供電系統可為連接的裝置提供應急電能。

刀鋒電源控制裝置

如果您在一組刀鋒上執行叢集,則刀鋒機箱中的電源控制裝置是圍籬區隔唯一的候選裝置。此裝置必須能夠管理單一刀鋒電腦。

無人職守裝置

無人職守裝置 (IBM RSA、HP iLO、Dell DRAC) 越來越受歡迎,甚至可能會成為現貨電腦的標準裝置。不過,它們略遜於 UPS 裝置,因為它們與其主機 (叢集節點) 共用電源。如果節點斷電,則應該控制該節點的裝置就失去作用。此時,CRM 仍會不斷嘗試圍籬區隔該節點,而所有其他資源操作都需要等待該圍籬區隔/STONITH 操作完成。

測試裝置

測試裝置專用於測試用途。在硬體上,對測試裝置的要求通常比較寬松。在叢集投入運營之前,必須以真正的圍籬區隔裝置取代這些裝置。

選擇何種 STONITH 裝置主要取決於您的預算及所使用的硬體類型。

12.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 通訊協定並可控制支援此通訊協定的任何裝置。

12.3 STONITH 資源和組態

若要設定圍籬區隔,您需要設定一或多個 STONITH 資源,pacemaker-fenced 精靈不需要任何組態設定。所有組態皆儲存在 CIB 中。資源就是類別為 stonithstonith 的資源 (請參閱第 6.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

12.3.1 STONITH 資源組態範例

下面是用 crm 指令列工具的語法撰寫的範例組態。若要套用它們態,請將範例放入文字檔中 (例如,sample.txt),然後執行以下指令:

# crm < sample.txt

如需有關使用 crm 指令列工具設定資源的詳細資訊,請參閱第 5.5 節 「crmsh 簡介」

範例 12.1︰ IBM RSA 無人職守裝置的組態

可按如下所示設定 IBM RSA 無人職守裝置:

# crm configure
crm(live)configure# primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ip_address=192.168.0.101 \
username=USERNAME password=PASSW0RD
crm(live)configure# primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ip_address=192.168.0.102 \
username=USERNAME password=PASSW0RD
crm(live)configure# location l-st-alice st-ibmrsa-1 -inf: alice
crm(live)configure# location l-st-bob st-ibmrsa-2 -inf: bob
crm(live)configure# commit

本範例中使用了位置條件約束,這是因為 STONITH 操作失敗的可能性總是存在,所以,在做為執行者的節點上的 STONITH 操作也不可靠。如果重設節點,它將無法傳送關於圍籬區隔操作結果的通知。想傳送通知的唯一方法是,假設操作即將成功,然後提前傳送通知。但如果操作失敗,可能就會出現問題。因此,依照慣例,pacemaker-fenced 拒絕終止其主機。

範例 12.2︰ UPS 圍籬區隔裝置的組態

UPS 類型圍籬區隔裝置的組態與上述範例相似。此處不做詳述。所有 UPS 裝置都採用相同的機制進行圍籬區隔,而存取裝置的方式卻有所不同。舊式 UPS 裝置只有一個序列埠,通常會使用特殊的序列纜線以 1200 鮑率進行連接。許多新型 UPS 裝置仍然只有一個序列埠,但它們通常還使用 USB 或乙太網路介面。可以使用的連接類型取決於外掛程式所支援的類型。

例如,使用 stonith -t stonith-device-type -n 指令比較 apcmasterapcsmart 裝置:

# 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 產品線皆支援的序列線)。

範例 12.3︰ Kdump 裝置的組態

Kdump 屬於特殊的圍籬區隔裝置,實際上與圍籬區隔裝置相反。該外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行作業時將節點視為已圍籬區隔。

必須以與其他真實的 STONITH 裝置 (例如 external/ipmi) 一致的方式使用 Kdump 外掛程式。若要正常運作圍籬區隔機制,必須在觸發真實的 STONITH 裝置之前,指定 Kdump 已經過檢查。請依以下程序所述,使用 crm configure fencing_topology 來指定圍籬區隔裝置的順序。

  1. 使用 stonith:fence_kdump 資源代理程式 (由 fence-agents 套件提供) 來監控已啟用 Kdump 功能的所有節點。下面提供了資源的組態範例:

    # crm configure
    crm(live)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"
    crm(live)configure# commit

    1

    要監控的節點名稱。如果您需要監控多個節點,請設定更多 STONITH 資源。若要防止特定節點使用圍籬區隔裝置,請新增位置條件約束。

    圍籬區隔動作會在資源逾時後啟動。

  2. 在每個節點上的 /etc/sysconfig/kdump 中,將 KDUMP_POSTSCRIPT 設定為在 Kdump 程序完成後向所有節點傳送通知。例如:

    KDUMP_POSTSCRIPT="/usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie"

    執行 Kdump 的節點會在完成 Kdump 後自動重新啟動。

  3. 執行 systemctl restart kdump.servicemkdumprd。以上每條指令都會偵測到 /etc/sysconfig/kdump 已修改,並會重新產生 initrd,以在啟用網路的情況下包含 fence_kdump_send 程式庫。

  4. 在防火牆中針對 fence_kdump 資源開啟一個連接埠。預設的連接埠是 7410.

  5. 為了能夠在觸發真實的圍籬區隔機制 (例如 external/ipmi) 之前檢查 Kdump,請使用類似以下的組態:

    crm(live)configure# fencing_topology \
      alice: kdump-node1 ipmi-node1 \
      bob: kdump-node2 ipmi-node2

    如需 fencing_topology 的更多詳細資料,請使用以下指令:

    # crm configure help fencing_topology

12.4 監控圍籬區隔裝置

如同任何其他資源一樣,STONITH 類別代理程式也支援用於檢查狀態的監控操作。

注意
注意:監控 STONITH 資源

您應定期監控 STONITH 資源,但不宜過於頻繁。對大多數裝置而言,不低於 1800 秒 (30 分鐘) 的監控間隔應已足夠。

圍籬區隔裝置是 HA 叢集必不可少的一部分,但需要用到它們的情況卻是越少越好。電源管理設備常常會受到大量廣播流量的影響。有些裝置在每分鐘達到十個左右連接時便無法處理。如果兩個用戶端同時嘗試連接,有些裝置還會發生混淆。大部分裝置都不能同時處理多個工作階段。

每隔幾小時檢查一次圍籬區隔裝置的狀態應該足以滿足需求。需要執行圍籬區隔操作以及電源開關發生故障的機率很小。

如需如何使用指令列設定監控操作的詳細資訊,請參閱第 6.10.2 節 「使用 crmsh 設定資源監控功能」

12.5 特殊的圍籬區隔裝置

除了用於處理實際 STONITH 裝置的外掛程式外,我們還提供了一些用於特別目的的 STONITH 外掛程式。

警告
警告:僅用於測試

下面提到的一些 STONITH 外掛程式僅用於演示和測試目的。請不要在實際情況中使用以下任一裝置,否則可能會導致資料毀損以及無法預期的後果:

  • external/ssh

  • ssh

fence_kdump

此外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行操作時將節點視為已圍籬區隔。節點在傾印期間無法執行任何資源。這樣可避免圍籬區隔已關閉但正在傾印的節點,省下相應的時間。外掛程式必須與另一個實際的 STONITH 裝置搭配使用。

如需組態詳細資料,請參閱範例 12.3 「Kdump 裝置的組態」

external/sbd

這是一個自我圍籬區隔裝置。它會對可插入到共用磁碟中的所謂毒藥丸做出反應。當共用儲存的連接中斷時,該裝置會讓節點停止運作。若要瞭解如何使用此 STONITH 代理程式執行基於儲存區的圍籬區隔,請參閱第 13 章程序 13.7 「設定叢集以使用 SBD」

重要
重要: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(我自己不關閉我的主機) 規則的唯一例外。

12.6 基本建議

請查看以下建議清單,以免發生常見錯誤:

  • 不要同時設定多個電源開關。

  • 若要測試您的 STONITH 裝置及其組態,請拔下每個節點上的插頭,並驗證相應節點是否發生圍籬區隔。

  • 在加有負載的情況下測試您的資源,並驗證逾時值是否合適。設定的逾時值太小可能會觸發 (不必要的) 圍籬區隔操作。如需詳細資訊,請參閱第 6.3 節 「逾時值」

  • 針對您的設定使用適當的圍籬區隔裝置。如需詳細資料,另請參閱第 12.5 節 「特殊的圍籬區隔裝置」

  • 設定一或多個 STONITH 資源。依預設,全域叢集選項 stonith-enabled 設定為 true。如果未定義 STONITH 資源,叢集會拒絕啟動任何資源。

  • 由於以下原因,請不要將全域叢集選項 stonith-enabled 設定為 false

    • 系統不支援未啟用 STONITH 的叢集。

    • DLM/OCFS2 不允許永久等待一個永遠不會發生的圍籬區隔操作。

  • 不要將全域叢集選項 startup-fencing 設定為 false。由於以下原因,該選項預設設定為 true:如果節點在叢集啟動期間處於未知狀態,系統將圍籬區隔該節點一次,以確定其狀態。

12.7 更多資訊

/usr/share/doc/packages/cluster-glue

在安裝的系統中,此目錄包含許多 STONITH 外掛程式和裝置的讀我檔案。

http://www.clusterlabs.org/pacemaker/doc/
  • Pacemaker Explained:說明用於設定 Pacemaker 的概念。包含全面詳細的參考資訊。

http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html

說明 HA 叢集中電腦分裂、仲裁和圍籬區隔概念的文章。

13 儲存保護和 SBD

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

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

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

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

13.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 將繼續執行。

13.2 手動設定 SBD 的綜覽

手動設定基於儲存的保護時必須執行下列步驟:必須以 root 身分執行這些步驟。開始執行之前,請查看第 13.3 節 「要求」

  1. 設定監視程式

  2. 根據您的情況,可將 SBD 與一到三部裝置搭配使用,或以無磁碟模式使用。如需綜覽,請參閱第 13.4 節 「SBD 裝置數量」。如需詳細的設定,請參閱:

  3. 測試 SBD 和圍籬區隔

13.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。

13.4 SBD 裝置數量

SBD 支援最多使用三部裝置:

一部裝置

最簡單的實作。這種組態適合所有資料均位於同一共用儲存上的叢集。

兩部裝置

此組態主要用於如下環境:使用基於主機的鏡像,但是沒有第三個儲存裝置可用。如果 SBD 失去對一個鏡像複製方的存取能力,它不會立即終止,以便允許叢集繼續執行。不過,由於 SBD 掌握的情況不夠全面,它無法偵測儲存的不對稱分裂,所以當只有一個鏡像複製方可用時,它不會圍籬區隔另一方。因此,在其中一個儲存陣列已關閉的情況下,它無法自動容許再一次的故障。

三部裝置

最可靠的組態。它具有從一部裝置中斷 (可能是因為發生故障或進行維護) 的情況中復原的能力。只會在有一部以上裝置失去連接以及必要時,SBD 才會自行終止,具體取決於叢集分割區或節點的狀態。如果至少有兩部裝置仍然可存取,便能成功傳輸圍籬區隔訊息。

這種組態適合儲存不限制為單個陣列的較複雜情況。基於主機的鏡像複製解決方案可以在每個鏡像複製方設定一個 SBD (不鏡像複製自身),在 iSCSI 上另外設定一個連接中斷器。

無磁碟

如果您想要建立一個不含共用儲存的圍籬區隔機制,則此組態十分有用。在此無磁碟模式下,SBD 會使用硬體監視程式來圍籬區隔節點,而不依賴於任何共用裝置。不過,無磁碟 SBD 不能處理雙節點叢集的電腦分裂情況。此選項僅適用於具有兩個以上節點的叢集。

13.5 逾時計算

使用 SBD 做為圍籬區隔機制時,必須考慮所有元件的逾時,因為它們之間相互依賴。

監視程式逾時

此逾時在啟始化 SBD 裝置期間設定。它主要取決於您的儲存延遲。必須能夠在此段時間內成功讀取大多數裝置。否則,節點可能會自我圍籬區隔。

注意
注意:多重路徑或 iSCSI 設定

如果 SBD 裝置位於多重路徑設定或 iSCSI 上,則應將逾時設定為偵測到路徑故障並切換到下一個路徑所需的時間。

這還表示 /etc/multipath.confmax_polling_interval 的值必須小於 watchdog 逾時。

msgwait 逾時

此逾時在啟始化 SBD 裝置期間設定。它定義了將訊息寫入 SBD 裝置上的某個節點插槽後經過多長時間會視為已傳遞。該逾時應設定得足夠長,讓節點有時間偵測到其是否需要自我圍籬區隔。

但是,如果 msgwait 逾時較長,已圍籬區隔的叢集節點可能會在圍籬區隔動作傳回之前便又重新加入叢集。可以依SBD_DELAY_START 中的程序 13.4 所述,在 SBD 組態中設定 步驟 4 參數來減少此情況。

CIB 中的 stonith-timeout

此逾時在 CIB 中做為全域叢集內容設定。它定義了等待 STONITH 動作 (重新開機、開啟、關閉) 完成的時間。

CIB 中的 stonith-watchdog-timeout

此逾時在 CIB 中做為全域叢集內容設定。如果未明確設定,則預設值為 0,此值適用於 SBD 與一到三部裝置搭配使用的情況。若要以無磁碟模式使用 SBD,請參閱程序 13.8 「設定無磁碟 SBD」以取得詳細資料。

如果您變更監視程式逾時,則需要同時調整另外兩個逾時。以下公式大致表達了這三個值之間的關係:

範例 13.1︰ 逾時計算公式
Timeout (msgwait) >= (Timeout (watchdog) * 2)
stonith-timeout = Timeout (msgwait) + 20%

例如,如果您將監視程式逾時設定為 120,則請將 msgwait 逾時設定為 240,並將 stonith-timeout 設定為 288

如果您使用 crm 外圍程序提供的開機程序檔設定叢集並啟始化 SBD 裝置,系統會自動考慮這些逾時之間的關係。

13.6 設定監視程式

SUSE Linux Enterprise High Availability Extension 隨附了幾個核心模組用於提供硬體特定的監視程式驅動程式。對於生產環境中的叢集,我們建議使用硬體特定的監視程式驅動程式。不過,如果沒有與您的硬體相符的監視程式,則可以將 softdog 當成核心監視程式模組使用。

High Availability Extension 使用 SBD 精靈做為饋送監視程式的軟體元件。

13.6.1 使用硬體監視程式

找出指定系統的正確監視程式核心模組並非沒有意義。自動查探常常會失敗。因此,載入許多模組後才會載入正確的模組。

表格 13.1 列出了一些常用監視程式驅動程式,但這不是完整的受支援驅動程式清單。如果此處未列出您的硬體,/lib/modules/KERNEL_VERSION/kernel/drivers/watchdog/lib/modules/KERNEL_VERSION/kernel/drivers/ipmi 也為您提供了一系列選擇。或者,您可以諮詢您的硬體或系統廠商,獲取特定於系統的監視程式組態詳細資料。

表 13.1︰ 常用監視程式驅動程式
硬體驅動程式
HPhpwdt
Dell、Lenovo (Intel TCO)iTCO_wdt
Fujitsuipmi_watchdog
IBM z/VM 上的虛擬機器vmwatchdog
Xen VM (DomU)xen_xdt
VMware vSphere 上的虛擬機器wdat_wdt
Genericsoftdog
重要
重要:存取監視程式計時器

有些硬體廠商交付的系統管理軟體 (例如 HP ASR 精靈) 會使用監視程式來進行系統重設。如果 SBD 使用了監視程式,請停用此類軟體。此時不能有任何其他軟體存取監視程式計時器。

程序 13.1︰ 載入正確的核心模組

若要確定載入正確的監視程式模組,請執行如下操作:

  1. 列出已隨核心版本安裝的驅動程式:

    # rpm -ql kernel-VERSION | grep watchdog
  2. 列出核心中目前載入的任何監視程式模組:

    # lsmod | egrep "(wd|dog)"
  3. 如果傳回了結果,請卸載錯誤的模組:

    # rmmod WRONG_MODULE
  4. 啟用與您的硬體相符的監視程式模組:

    # echo WATCHDOG_MODULE > /etc/modules-load.d/watchdog.conf
    # systemctl restart systemd-modules-load
  5. 測試是否已正確載入 監視程式模組:

    # lsmod | grep dog
  6. 驗證監視程式裝置是否可用且可正常運作:

    # ls -l /dev/watchdog*
    # sbd query-watchdog

    如果監視程式裝置無法使用,請在此處停止,並檢查模組名稱和選項。可以考慮使用其他驅動程式。

  7. 驗證監視程式裝置是否可正常運作:

    # sbd -w WATCHDOG_DEVICE test-watchdog
  8. 將機器重新開機,以確定不存在衝突的核心模組。例如,如果您在記錄中找到 cannot register ... 訊息,就表示存在這樣的衝突模組。若要避免載入此類模組,請參閱 https://documentation.suse.com/sles/html/SLES-all/cha-mod.html#sec-mod-modprobe-blacklist

13.6.2 使用軟體監視程式 (softdog)

對於生產環境中的叢集,建議使用硬體特定的監視程式驅動程式。不過,如果沒有與您的硬體相符的監視程式,則可以將 softdog 當成核心監視程式模組使用。

重要
重要:Softdog 限制

Softdog 驅動程式假設至少有一個 CPU 仍然在執行。如果所有 CPU 均已堵塞,則 softdog 驅動程式中應該將系統重新開機的代碼永遠都不會執行。相反地,即使所有 CPU 均已堵塞,硬體監視程式也仍然會繼續運作。

程序 13.2︰ 載入 softdog 核心模組
  1. 啟用 softdog 監視程式:

    # echo softdog > /etc/modules-load.d/watchdog.conf
    # systemctl restart systemd-modules-load
  2. 測試是否已正確載入 softdog 監視程式模組:

    # lsmod | grep softdog

13.7 設定 SBD 與裝置

以下是設定所必需步驟:

在開始之前,請確定要用於 SBD 的一部或多部區塊裝置滿足在第 13.3 節中指定的要求。

設定 SBD 裝置時,您需要考慮幾個逾時值。如需詳細資料,請參閱第 13.5 節 「逾時計算」

如果節點上執行的 SBD 精靈更新監視程式計時器的速度不夠快,節點會自行終止。設定逾時後,請在您的特定環境中予以測試。

程序 13.3︰ 啟始化 SBD 裝置

若要將 SBD 與共用儲存搭配使用,必須先在一到三部區塊裝置上建立訊息佈局。sbd create 指令會將中繼資料標頭寫入指定的一或多部裝置。它還會啟始化最多 255 個節點的訊息插槽。如果不帶任何其他選項執行該指令,該指令將使用預設逾時設定。

警告
警告:覆寫現有資料

確定要用於 SBD 的一部或多部裝置沒有儲存任何重要資料。執行 sbd create 指令時,會直接覆寫指定區塊裝置的大約第一個 MB,而不會發出其他要求或進行備份。

  1. 決定要將哪個區塊裝置或哪些區塊裝置用於 SBD。

  2. 使用下列指令啟始化 SBD 裝置:

    # sbd -d /dev/SBD create

    (請用絕對路徑取代 /dev/SBD,例如 /dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg。)

    若要將多部裝置用於 SBD,請指定 -d 選項多次,例如:

    # sbd -d /dev/SBD1 -d /dev/SBD2 -d /dev/SBD3 create
  3. 如果您的 SBD 裝置位於多重路徑群組上,請使用 -1-4 選項調整要用於 SBD 的逾時。如需詳細資料,請參閱第 13.5 節 「逾時計算」。所有逾時均以秒為單位指定:

    # sbd -d /dev/SBD -4 1801 -1 902 create

    1

    -4 選項用於指定 msgwait 逾時。在上面的範例中,該逾時設定為 180 秒。

    2

    -1 選項用於指定 watchdog 逾時。在上面的範例中,該逾時設定為 90 秒。模擬監視程式的最小允許值為 15 秒。

  4. 檢查已寫入裝置的內容:

    # 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 組態檔案,然後啟用並啟動相應的服務以讓變更生效。

程序 13.4︰ 編輯 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_DEVICE

    該參數指定要監控和要用於交換 SBD 訊息的裝置。

  3. 編輯此行,並使用您的 裝置取代 SBDSBD:

    SBD_DEVICE="/dev/SBD"

    如果您需要在第一行中指定多部裝置,請使用分號分隔各裝置 (裝置順序無關緊要):

    SBD_DEVICE="/dev/SBD1;/dev/SBD2;/dev/SBD3"

    如果無法存取 SBD 裝置,精靈將無法啟動,導致叢集無法啟動。

  4. 搜尋以下參數:SBD_DELAY_START

    啟用或停用延遲。如果 msgwait 很長,但叢集節點開機速度很快,請將 SBD_DELAY_START 設定為 yes。將此參數設定為 yes 可在開機時延遲 SBD 啟動。虛擬機器有時候需要此項延遲。

將您的 SBD 裝置新增至 SBD 組態檔案之後,啟用 SBD 精靈。SBD 精靈是叢集堆疊的重要組成部分。當叢集堆疊正在執行時,需要執行該精靈。因此,每次叢集服務啟動時,sbd 服務也會做為相依項啟動。

程序 13.5︰ 啟用和啟動 SBD 服務
  1. 在每個節點上,啟用 SBD 服務:

    # systemctl enable sbd

    每次叢集服務啟動時,SBD 會與 Corosync 服務一併啟動。

  2. 在每個節點上重新啟動叢集服務:

    # crm cluster restart

    此操作會自動觸發 SBD 精靈的啟動。

下一步是測試 SBD 裝置,請參閱程序 13.6

程序 13.6︰ 測試 SBD 裝置
  1. 以下指令會從 SBD 裝置傾印節點插槽及其目前的訊息:

    # sbd -d /dev/SBD list

    現在,您應該會看到曾隨 SBD 啟動的所有叢集節點都列在此處。例如,如果您擁有雙節點叢集,訊息插槽對於兩個節點都應顯示 clear

    0       alice        clear
    1       bob          clear
  2. 嘗試向其中一個節點傳送一則測試訊息:

    # 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 目前的確在正常執行,並且可以接收訊息。

在最後一個步驟中,您需要調整叢集組態,請參閱程序 13.7

程序 13.7︰ 設定叢集以使用 SBD
  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 執行 crm configure

  3. 輸入以下內容:

    crm(live)configure# property stonith-enabled="true"1
    crm(live)configure# property stonith-watchdog-timeout=02
    crm(live)configure# property stonith-timeout="40s"3

    1

    此為預設組態,因為不支援沒有 STONITH 的叢集。而如果出於測試目的停用了 STONITH,請確定再次將此參數設定為 true

    2

    如果未明確設定,則預設值為 0,此值適用於 SBD 與一到三部裝置搭配使用的情況。

    3

    若要計算 stonith-timeout,請參閱第 13.5 節 「逾時計算」。如果將 SBD 的 stonith-timeout 逾時值設定為 40 秒,則適合將 msgwait 值設定為 30

  4. 設定 SBD STONITH 資源。您無需複製此資源。

    對於雙節點叢集,在電腦分裂情況下,兩個節點都會依預期向對方發出圍籬區隔。為防止兩個節點幾乎同時被重設,建議套用以下圍籬區隔延遲來協助其中一個節點,甚至是偏好節點在圍籬區隔競爭中勝出。對於包含兩個以上節點的叢集,不需要套用這些延遲。

    優先程度圍籬區隔延遲

    priority-fencing-delay 叢集內容預設處於停用狀態。設定延遲值後,如果另一個節點發生故障且其總資源優先程度更高,針對該節點的圍籬區隔將延遲指定的時間。這意味著在電腦分裂狀況下,更重要的節點將在圍籬區隔競爭中勝出。

    可以用優先程度中繼屬性設定重要資源。在計算時,將對每個節點上執行的資源或例項的優先程度值求和來進行計算。升級後的資源例項的優先程度為所設定的基礎優先程度加 1,因此它的優先程度值比任何未升級的例項都高。

    # crm configure property priority-fencing-delay=30

    即使使用了 priority-fencing-delay,我們也仍然建議使用 pcmk_delay_basepcmk_delay_max (如下所述) 來解決節點優先程度恰好相同的所有情況。priority-fencing-delay 的值應顯著大於 pcmk_delay_max/pcmk_delay_base 的最大值,最好是最大值的兩倍。

    可預測的靜態延遲

    此參數用於在執行 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
    動態隨機延遲

    此參數用於為圍籬區隔裝置上的 STONITH 動作新增隨機延遲。參數pcmk_delay_max不會新增針對特定節點的靜態延遲,而是會為使用圍籬區隔資源的任何圍籬區隔都新增一個隨機延遲,以防止雙重重設。與 pcmk_delay_base 不同,此參數可對針對多個節點的統一圍籬區隔資源指定。

    crm(live)configure# primitive stonith_sbd stonith:external/sbd \
    params pcmk_delay_max=30
    警告
    警告:pcmk_delay_max 可能無法防止電腦分裂情況下的雙重重設。

    pcmk_delay_max 的值越低,仍會發生雙重重設的可能性就越高。

    如果您的目標是有可預測的倖存者,請使用優先程度圍籬區隔延遲或可預測的靜態延遲。

  5. 使用 show 檢閱所做的變更。

  6. 使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

資源啟動後,叢集便會成功設定為在出現需要圍籬區隔的節點時使用 SBD。

13.8 設定無磁碟 SBD

SBD 可在無磁碟模式下操作。在此模式下,當發生以下情況時,將使用監視程式裝置來重設節點:遺失仲裁、任何受監督的精靈發生故障且未復原、Pacemaker 決定需要圍籬區隔節點。無磁碟 SBD 基於節點的自我圍籬區隔,取決於叢集的狀態、仲裁和一些合理的假設。CIB 中不需要 STONITH SBD 基本資源。

重要
重要:不要在本地防火牆中封鎖 Corosync 流量

無磁碟 SBD 依賴於重新產生的成員資格和仲裁遺失來實現圍籬區隔。Corosync 流量必須能夠通過所有網路介面 (包括迴路介面),並且本地防火牆不能封鎖該流量。否則,Corosync 將無法重新產生新成員資格,可能導致出現電腦分裂情況,而無磁碟 SBD 圍籬區隔無法處理該情況。

重要
重要:叢集節點數

不要將無磁碟 SBD 用做雙節點叢集的圍籬區隔機制。請僅對包含三個或更多節點的叢集使用無磁碟 SBD。無磁碟模式下的 SBD 無法處理雙節點叢集的電腦分裂情況。如果您想對雙節點叢集使用無磁碟 SBD,請依第 14 章 「QDevice 和 QNetd 所述使用 QDevice。

程序 13.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 裝置啟動任何監看員程序。

    重要
    重要:無磁碟 SBD 和 QDevice 的 SBD_WATCHDOG_TIMEOUT

    如果您將 Qdevice 與無磁碟 SBD 配合使用,SBD_WATCHDOG_TIMEOUT 值必須大於 QDevice 的 sync_timeout 值,否則 SBD 將會逾時並無法啟動。

    sync_timeout 的預設值為 30 秒。因此,請將 SBD_WATCHDOG_TIMEOUT 設定為更大的值,例如 35

  2. 在每個節點上,啟用 SBD 服務:

    # systemctl enable sbd

    每次叢集服務啟動時,SBD 會與 Corosync 服務一併啟動。

  3. 在每個節點上重新啟動叢集服務:

    # crm cluster restart

    此操作會自動觸發 SBD 精靈的啟動。

  4. 檢查參數have-watchdog=true 是否已自動設定:

    # 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=102

    1

    此為預設組態,因為不支援沒有 STONITH 的叢集。而如果出於測試目的停用了 STONITH,請確定再次將此參數設定為 true

    2

    對於無磁碟 SBD,此參數不能為零。它定義了經過多長時間之後可以假定圍籬區隔目標已自我圍籬區隔。因此,其值必須大於等於 /etc/sysconfig/sbd 中的 SBD_WATCHDOG_TIMEOUT 值。如果將 stonith-watchdog-timeout 設定為負值,Pacemaker 將自動計算此逾時,並將其設定為 SBD_WATCHDOG_TIMEOUT 值的兩倍。

  6. 使用 show 檢閱所做的變更。

  7. 使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

13.9 測試 SBD 和圍籬區隔

若要測試 SBD 在節點圍籬區隔方面是否如預期工作,請使用以下其中一種或所有方法:

手動觸發節點圍籬區隔

若要針對節點 NODENAME 觸發圍籬區隔動作,請執行以下操作:

# crm node fence NODENAME

經過 stonith-watchdog-timeout 時間之後,檢查該節點是否已圍籬區隔,以及其他節點是否將該節點視為已圍籬區隔。

模擬 SBD 失敗
  1. 辨識 SBD inquisitor 的程序 ID:

    # 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

    # kill -9 1859

    節點主動自我圍籬區隔。經過 stonith-watchdog-timeout 時間之後,其他節點注意到該節點遺失並將它視為已自我圍籬區隔。

透過監控操作失敗觸發圍籬區隔

對於正常組態,如果資源的停止操作失敗,將會觸發圍籬區隔。若要手動觸發圍籬區隔,您可以產生一個資源停止操作失敗。或者,您可以暫時變更資源監控操作的組態,產生一個監控失敗,如下所示:

  1. 為資源監控操作設定 on-fail=fence 內容:

    op monitor interval=10 on-fail=fence
  2. 讓監控操作失敗 (例如,如果資源與某個服務相關,則可透過終止相應的精靈來實現)。

    此失敗會觸發圍籬區隔動作。

13.10 其他儲存保護機制

除了透過 STONITH 進行節點圍籬區隔之外,還可使用其他方法在資源層級實現儲存保護。例如,SCSI-3 和 SCSI-4 使用持續保留,而 sfex 提供鎖定機制。這兩種方法將在下面的小節中介紹。

13.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):

# 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 身分執行以下指令:

    # 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# clone clone-sg sg \
        meta promotable=true promoted-max=1 notify=true
  3. 測試設定:升級資源後,您可以在執行主要例項的叢集節點上的 /dev/sdc1 中進行掛接和寫入,但無法在執行輔助例項的叢集節點上進行寫入。

  4. 為 Ext4 新增檔案系統基本資源:

    crm(live)configure# primitive ext4 Filesystem \
        params device="/dev/sdc1" directory="/mnt/ext4" fstype=ext4
  5. sg_persist 複製品和檔案系統資源之間新增以下順序關係和並存:

    crm(live)configure# order o-ms-sg-before-ext4 Mandatory: clone-sg:promote ext4:start
    crm(live)configure# colocation col-ext4-with-sg-persist inf: ext4 clone-sg:Promoted
  6. 使用 show changed 指令檢查所有變更。

  7. 提交您的變更。

如需詳細資訊,請參閱 sg_persist 手冊頁。

13.10.2 使用 sfex 確定啟用獨佔儲存

本節介紹的 sfex 是一個附加的低層機制,用於將對共用儲存的存取鎖定給某個節點。請注意,sfex 並不會取代 STONITH。由於 sfex 需要共用儲存,因此建議在儲存的其他分割區上使用上述 SBD 節點圍籬區隔機制。

依照設計,sfex 不能與需要並行的工作負載 (例如 OCFS2) 配合使用。其可做為傳統容錯移轉型工作負載的一層保護。其效果與 SCSI-2 保留類似,但更具一般性。

13.10.2.1 綜覽

在共用儲存環境中,會額外設定一個小分割區,用於儲存一或多個鎖定。

節點必須先取得保護鎖定,才能獲取受保護的資源。此順序由 Pacemaker 強制執行。sfex 元件可確保即使 Pacemaker 遇到電腦分裂情況,系統也不會多次授予鎖定。

系統必須定期重新整理鎖定,這樣即使節點停止回應,也不會永久封鎖鎖定,其他節點仍能繼續處理。

13.10.2.2 設定

下例說明了如何建立用於 sfex 的共用分割區,以及如何在 CIB 中為 sfex 鎖定設定資源。一個 sfex 分割區可保存任意個鎖定,每個鎖定需要配置 1 KB 儲存空間。依預設,sfex_init 會在分割區上建立一個鎖定。

重要
重要:要求
  • sfex 的共用分割區應與您要保護的資料位於同一個邏輯單元上。

  • 共用 sfex 分割區不得使用基於主機的 RAID 或 DRBD。

  • 可以使用 LVM2 邏輯磁碟區。

程序 13.9︰ 建立 sfex 分割區
  1. 建立一個共用分割區用於 sfex。記下此分割區的名稱,並用其取代下面的 /dev/sfex

  2. 使用以下指令建立 sfex 中繼資料:

    # sfex_init -n 1 /dev/sfex
  3. 驗證中繼資料是否已正確建立:

    # sfex_stat -i 1 /dev/sfex ; echo $?

    此指令應傳回 2,因為目前並未鎖定。

程序 13.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 inf: filesystem1 sfex_1
  3. 如果使用群組語法,請將 sfex 資源做為第一個資源新增到群組中:

    crm(live)configure# group LAMP sfex_1 filesystem1 apache ipaddr

13.11 更多資訊

如需更多詳細資料,請參閱 sdb 的手冊頁。

14 QDevice 和 QNetd

QDevice 和 QNetd 會參與仲裁決定。在仲裁方 corosync-qnetd 的協助下,corosync-qdevice 會提供一個可設定的投票數,以使叢集可以承受大於標準仲裁規則所允許的節點故障數量。我們建議您對節點數為偶數的叢集 (特別是雙節點叢集) 部署 corosync-qnetdcorosync-qdevice

14.1 概念綜覽

與計算各叢集節點的配額相比,配合使用 QDevice 和 QNetd 的方法具有以下優點:

  • 發生節點故障時,會提供更好的可持續性。

  • 您可以撰寫自己的啟發程序檔來影響投票。這特別適合用於複雜設定 (例如 SAP 應用程式)。

  • 可讓您設定 QNetd 伺服器來為多個叢集提供投票。

  • 允許為雙節點叢集使用無磁碟 SBD。

  • 可協助節點數為偶數且處於電腦分裂狀況下的叢集 (特別是雙節點叢集) 做出仲裁決定。

使用 QDevice/QNetd 的設定由以下元件和機制構成:

QDevice/QNetd 元件和機制
QNetd (corosync-qnetd)

一個不屬於叢集的 systemd 服務 (精靈,即 QNetd 伺服器)。向 corosync-qdevice 精靈提供投票的 systemd 精靈。

若要提高安全性,可以將 corosync-qnetd 與 TLS 配合使用,以進行用戶端證書檢查。

QDevice (corosync-qdevice)

每個叢集節點上與 Corosync 一併執行的 systemd 服務 (精靈)。這是 corosync-qnetd 的用戶端。其主要用途是讓叢集能夠承受大於標準仲裁規則所允許的節點故障數量。

QDevice 可以與不同的仲裁方配合工作,但目前僅支援與 QNetd 配合工作。

演算法

QDevice 支援多種不同的演算法,而這些演算法決定著如何指派投票的行為。目前提供的演算法如下:

  • FFSplit (fifty-fifty split) 為預設演算法,用於所含節點數為偶數的叢集。如果叢集分裂為兩個相似的部分,此演算法會依據啟發檢查結果和其他因素為其中一個部分提供一個投票。

  • LMS (last man standing) 允許僅剩的那個節點看到 QNetd 伺服器以獲取投票。因此此演算法適用於只有一個使用中節點應達到法定數量的叢集。

啟發

QDevice 支援一組指令 (啟發)。這些指令在叢集服務啟動、叢集成員資格變更、成功連接至 corosync-qnetd 時或 (選擇性) 定期在本地執行。可以使用 quorum.device.heuristics 鍵 (在 corosync.conf 檔案中) 或 --qdevice-heuristics-mode 選項來設定啟發。這兩種方式都可理解 off (預設值)、syncon 值。syncon 之間的區別在於,您可以另外定期執行以上指令。

僅當所有指令都成功執行時,才會視為啟發已通過,否則視為啟發失敗。啟發的結果會傳送到 corosync-qnetd,用於進行計算以確定哪個部分應達到法定數量。

決勝方

此項做為叢集的幾個部分完全均衡且啟發結果相同的情況下的後備措施。它可設定為最小、最大或為特定的節點 ID。

14.2 要求和先決條件

設定 QDevice 和 QNetd 之前,您需要依如下所示準備環境:

  • 除了叢集節點外,您需準備一個單獨的機器,將其做為 QNetd 伺服器。請參閱第 14.3 節 「設定 QNetd 伺服器」

  • 與 Corosync 所使用的實體網路不同的實體網路。建議 QDevice 使用該網路來連接 QNetd 伺服器。理想情況下,QNetd 伺服器應位於與主要叢集不同的機架中,或者至少位於一個單獨的 PSU 上,且不要位於與 Corosync 環狀網路相同的網路區段中。

14.3 設定 QNetd 伺服器

QNetd 伺服器不是叢集堆疊的一部分,也不是叢集的實際成員。因此,您無法將資源轉移到此伺服器。

QNetd 伺服器幾乎無狀態。一般情況下,您無需變更組態檔案 /etc/sysconfig/corosync-qnetd 中的任何內容。依預設,corosync-qnetd 服務以 coroqnetd 群組中的 coroqnetd 使用者身分執行精靈。這可避免以 root 身分執行精靈。

若要建立 QNetd 伺服器,請執行以下步驟:

  1. 在將做為 QNetd 伺服器的機器上,安裝 SUSE Linux Enterprise Server 15 SP5。

  2. 使用 SUSEConnect --list-extensions 中列出的指令啟用 SUSE Linux Enterprise High Availability Extension。

  3. 安裝 corosync-qnetd 套件:

    # zypper install corosync-qnetd

    您不需要手動啟動 corosync-qnetd 服務。當您在叢集上設定 QDevice 時,該服務會自動啟動。

QNetd 伺服器現已準備好接受來自 QDevice 用戶端 corosync-qdevice 的連接。無需進行其他組態。

14.4 將 QDevice 用戶端連接至 QNetd 伺服器

設定好 QNetd 伺服器後,您便可以設定並執行用戶端。您可以在安裝叢集的過程中將用戶端連接至 Qnetd 伺服器,也可以稍後再新增。此程序會講解如何在稍後新增用戶端。

  1. 在所有節點上安裝 corosync-qdevice 套件:

    # zypper install corosync-qdevice
  2. 在其中一個節點上,執行下面的指令以設定 QDevice:

    # crm cluster init qdevice
    Do you want to configure QDevice (y/n)? y
    HOST or IP of the QNetd server to be used []QNETD_SERVER
    TCP PORT of QNetd server [5403]
    QNetd decision ALGORITHM (ffsplit/lms) [ffsplit]
    QNetd TIE_BREAKER (lowest/highest/valid node id) [lowest]
    Whether using TLS on QDevice/QNetd (on/off/required) [on]
    Heuristics COMMAND to run with absolute path; For multiple commands, use ";" to separate []

    y 確認您要設定 QDevice,然後輸入 QNetd 伺服器的主機名稱或 IP 位址。對於其餘欄位,您可以接受預設值,也可以視需要進行變更。

    重要
    重要:無磁碟 SBD 和 QDevice 的 SBD_WATCHDOG_TIMEOUT

    如果您將 Qdevice 與無磁碟 SBD 配合使用,SBD_WATCHDOG_TIMEOUT 值必須大於 QDevice 的 sync_timeout 值,否則 SBD 將會逾時並無法啟動。

    sync_timeout 的預設值為 30 秒。因此,請確定在 /etc/sysconfig/sbd 中將 SBD_WATCHDOG_TIMEOUT 設定為更大的值 (例如 35)。

14.5 使用啟發設定 QDevice

如果您需要對確定投票的方式進行額外的控制,請使用啟發。啟發是一組可同時執行的指令。

為了此目的,crm cluster init qdevice 指令提供了 --qdevice-heuristics 選項。您可以使用絕對路徑傳遞一或多個指令 (以分號分隔)。

例如,如果您自己的啟發檢查指令位於 /usr/sbin/my-script.sh,則可以在其中一個叢集節點上依如下方式執行該指令:

# crm cluster init qdevice --qnetd-hostname=charlie \
     --qdevice-heuristics=/usr/sbin/my-script.sh \
     --qdevice-heuristics-mode=on

您可以採用任何語言撰寫指令,例如 Shell、Python 或 Ruby 語言。如果指令成功執行,將傳回 0 (零),否則會傳回錯誤代碼。

您也可以傳遞一組指令。僅當所有指令都成功完成 (傳回代碼為 0) 後,啟發才會通過。

--qdevice-heuristics-mode=on 選項可讓啟發指令定期執行。

14.6 檢查和顯示仲裁狀態

您可以查詢某個叢集節點上的仲裁狀態,如範例 14.1 「QDevice 的狀態」中所示。該範例顯示了 QDevice 節點的狀態。

範例 14.1︰ QDevice 的狀態
# corosync-quorumtool1
 Quorum information
------------------
Date:             ...
Quorum provider:  corosync_votequorum
Nodes:            2 2
Node ID:          3232235777 3
Ring ID:          3232235777/8
Quorate:          Yes 4

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate Qdevice

Membership information
----------------------
    Nodeid      Votes    Qdevice Name
 3232235777         1    A,V,NMW 192.168.1.1 (local) 5
 3232235778         1    A,V,NMW 192.168.1.2 5
         0          1            Qdevice

1

或者,您也可以使用 crm corosync status quorum 指令獲得相同的結果。

2

我們預計的節點數量。在此範例中,這是一個雙節點叢集。

3

由於 corosync.conf 中未明確指定節點 ID,此 ID 會以 32 位元整數來表示 IP 位址。在此範例中,值 3232235777 表示 IP 位址 192.168.1.1

4

仲裁狀態。在此例中,叢集具有仲裁。

5

每個叢集節點的狀態的含意如下:

A (保持連接) 或 NA (未連接)

顯示 QDevice 與 Corosync 之間的連接狀態。如果 QDevice 與 Corosync 之間存在活動訊號,則會顯示為保持連接 (A)。

V (投票) 或 NV (無投票)

顯示仲裁裝置是否已為節點投票 (字母 V)。字母 V 表示兩個節點可以相互通訊。在電腦分裂情況下,一個節點會設定為 V,另一個節點會設定為 NV

MW (主體獲勝) 或 NMW (不是主體獲勝)

指明是否設定了仲裁裝置 master_wins 旗標。預設不會設定該旗標,因此您會看到 NMW (不是主體獲勝)。請參閱 votequorum_qdevice_master_wins(3) 的手冊頁獲取詳細資訊。

NR (未註冊)

表示叢集未在使用仲裁裝置。

如果您查詢 QNetd 伺服器的狀態,會獲得類似範例 14.2 「QNetd 伺服器的狀態」中所示的輸出:

範例 14.2︰ QNetd 伺服器的狀態
# corosync-qnetd-tool -lv1
Cluster "hacluster": 2
    Algorithm:          Fifty-Fifty split 3
    Tie-breaker:        Node with lowest node ID
    Node ID 3232235777: 4
        Client address:         ::ffff:192.168.1.1:54732
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   ACK (ACK)
    Node ID 3232235778:
        Client address:         ::ffff:192.168.1.2:43016
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   No change (ACK)

1

您也可以在叢集的其中一個節點上使用 crm corosync status qnetd 指令,這種方法會獲得相同的結果。

2

在組態檔案 /etc/corosync/corosync.conftotem.cluster_name 區段中設定的叢集名稱。

3

目前使用的演算法,此範例中為 FFSplit

4

這是 IP 位址為 192.168.1.1 的節點的相應項目。TLS 處於使用中狀態。

14.7 更多資訊

如需 QDevice 和 QNetd 的其他資訊,請參閱 corosync-qdevice(8) 和 corosync-qnetd(8) 的手冊頁。

15 存取控制清單

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

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

注意
注意:CIB 語法驗證版本與 ACL 的差異

僅當您的 CIB 是由 pacemaker-2.0 或更高 CIB 語法版本驗證時,此 ACL 文件才適用。如需關於如何檢查這一點以及升級 CIB 版本的詳細資料,請參閱注意:升級 CIB 語法版本

15.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 也永遠擁有對叢集組態的完整存取權。

15.2 概念綜覽

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

  • 諸如 readwritedeny 的存取權限

  • 定義在何種情況下套用規則的規格。此規格可以是類型、ID 參考或 XPath 運算式。XPath 是一種用於在 XML 文件中選取節點的語言。請參閱 http://en.wikipedia.org/wiki/XPath

通常,便利的做法是將 ACL 綁定到角色,並將特定的角色指定給系統使用者 (ACL 目標)。建立 ACL 角色的方法有以下幾種:

15.3 在叢集中啟用 ACL

在開始設定 ACL 之前,需要先啟用 ACL。若要實現此目的,請在 crmsh 中使用以下指令:

# crm configure property enable-acl=true

或者,依程序 15.1 「使用 Hawk 啟用 ACL」所述使用 Hawk2。

程序 15.1︰ 使用 Hawk 啟用 ACL
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取叢集組態以顯示全域叢集選項及它們目前的值。

  3. 叢集組態下方,按一下空下拉式方塊並選取 enable-acl 以新增該參數。系統即會新增該參數,且將其設為預設值 No

  4. 將其值設定為 Yes,然後套用變更。

15.4 建立唯讀 monitor 角色

以下小節介紹如何使用 Hawk2 或 crm 外圍程序定義 monitor 角色,以設定唯讀存取權。

15.4.1 使用 Hawk2 建立唯讀 monitor 角色

下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權限。您也可以依照程序 15.4 「使用 crmsh 新增 monitor 角色並指定使用者」所述使用 crmsh 來實現此目的。

程序 15.2︰ 使用 Hawk2 新增 monitor 角色
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取角色

  3. 按一下建立

  4. 輸入唯一的角色 ID,例如 monitor

  5. 對於存取權限,選取 Read

  6. Xpath 中,輸入 Xpath 運算式 /cib

    Image
  7. 按一下建立

    如此即會建立名為 monitor 的新角色,為其設定 read 權限,並使用 XPath 運算式 /cib 將此組態套用至 CIB 中的所有元素。

  8. 如果需要,請按一下加號圖示並指定相應參數來新增更多規則。

  9. 使用向上或向下箭頭按鈕對各規則排序。

程序 15.3︰ 使用 Hawk2 將角色指定給目標

若要將我們在程序 15.2 中建立的角色指定給系統使用者 (即目標),請執行以下操作繼續:

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取目標

  3. 若要建立系統使用者 (即 ACL 目標),請按一下建立,然後輸入一個唯一的目標 ID,例如 tux。請確定此使用者屬於 haclient 群組。

  4. 若要將角色指定給目標,請選取一或多個角色

    在本範例中,請選取您在monitor 中建立的 程序 15.2 角色。

    Image
  5. 確認您的選擇。

若要設定對資源或條件約束的存取權限,也可以依照第 15.8 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。

15.4.2 使用 crmsh 建立唯讀 monitor 角色

下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權。

程序 15.4︰ 使用 crmsh 新增 monitor 角色並指定使用者
  1. root 身分登入。

  2. 啟動 crmsh 的互動模式:

    # crm configure
    crm(live)configure# 
  3. 定義 ACL 角色:

    1. 使用 role 指令定義新角色:

      crm(live)configure# role monitor read xpath:"/cib"

      上面的指令會建立名為 monitor 的新角色,為其設定 read 權限,並使用 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

若要設定對資源或條件約束的存取權限,也可以依照第 15.8 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。

15.5 移除使用者

以下小節介紹如何使用 Hawk2 或 crmsh 從 ACL 中移除現有使用者。

15.5.1 使用 Hawk2 移除使用者

若要從 ACL 中移除使用者,請執行以下步驟:

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取目標

  3. 若要移除系統使用者 (ACL 目標),請按一下操作欄下方的垃圾桶圖示。

  4. 在對話方塊中進行確認。

15.5.2 使用 crmsh 移除使用者

若要從 ACL 中移除使用者,請以使用者名稱取代預留位置 USER

# crm configure delete USERNAME

或者,您也可以使用 edit 子指令:

# crm configure edit USERNAME

15.6 移除現有角色

以下小節介紹如何使用 Hawk2 或 crmsh 移除現有角色。

注意
注意:刪除具有參考使用者的角色

請注意,不能有任何使用者屬於此角色。如果角色中仍存在使用者的參考,則不能刪除該角色。請在刪除角色前先刪除使用者的參考。

15.6.1 使用 Hawk2 移除現有角色

若要移除角色,請執行以下步驟:

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取角色

  3. 若要移除角色,請按一下操作欄下方的垃圾桶圖示。

  4. 在對話方塊中進行確認。如果有錯誤訊息顯示,請確定您的角色是空的,沒有參考任何角色。

15.6.2 使用 crmsh 移除現有角色

若要移除現有角色,請以角色名稱取代預留位置 ROLE

# crm configure delete ROLE

15.7 透過 XPath 運算式設定 ACL 規則

若要透過 XPath 管理 ACL 規則,您需要瞭解基礎 XML 的結構。使用以下指令擷取結構,該指令將以 XML 格式顯示您的叢集組態 (請參閱範例 15.1):

# crm configure show xml
範例 15.1︰ XML 格式叢集組態摘要
<cib>
  <!-- ... -->
  <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

做為範例,下面列出了用於建立操作人員角色的 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

檢視叢集的狀態。

15.8 透過縮寫設定 ACL 規則

不想使用 XML 結構的使用者可以採用更簡單的方法。

例如,您可以考慮使用如下 Xpath:

//*[@id="rsc1"]

它會尋找 ID 為 rsc1 的所有 XML 節點。

相應的簡寫語法如下:

ref:"rsc1"

這也適用於條件約束。以下是詳細的 XPath:

//constraints/rsc_location

相應的簡寫語法如下:

type:"rsc_location"

可以在 crmsh 和 Hawk2 中使用簡寫語法。CIB 精靈知道如何將 ACL 規則套用至相符物件。

16 網路裝置結合

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

透過結合模組選項來設定結合裝置。而其行為由結合裝置的模式決定。該模式預設為 mode=active-backup,這表示當主要裝置發生故障時,另一部裝置將會變成使用中裝置。

使用 Corosync 時,結合裝置無法透過叢集軟體管理。因此,必須在可能需要存取結合裝置的每個叢集節點上設定結合裝置。

16.1 使用 YaST 設定結合裝置

若要設定結合裝置,您需要有多個可結集至單個結合裝置的乙太網路裝置。請執行下列步驟:

  1. root 身分啟動 YaST,然後選取系統 › 網路設定

  2. 網路設定中,切換至綜覽索引標籤,其中會顯示可用的裝置。

  3. 檢查要結集至結合裝置的乙太網路裝置是否已經指定了 IP 位址。如果已指定,請加以變更:

    1. 選取要變更的裝置,然後按一下編輯

    2. 在開啟的網路卡設定對話方塊的位址索引標籤中,選取無連結和 IP 設定 (結合連接埠) 選項。

    3. 下一步回到網路設定對話方塊中的綜覽索引標籤。

  4. 若要新增新的結合裝置:

    1. 按一下新增,然後將裝置類型設為Bond。按繼續以繼續。

    2. 選取為結合裝置指定 IP 位址的方法。有三種方法可供您選擇:

      • 無連結和 IP 設定 (結合連接埠)

      • 動態位址 (透過 DHCP 或 Zeroconf)

      • 靜態指定的 IP 位址

      請使用適合您環境的方法。如果是由 Corosync 管理虛擬 IP 位址,請選取靜態指定的 IP 位址,然後為介面指定一個 IP 位址。

    3. 切換到結合連接埠索引標籤。

    4. 若要選取需要加入結合的乙太網路裝置,請選取相應裝置前面的核取方塊。

    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-bondDEVICENUMBER

16.2 將裝置熱插拔到結合中

有時,需要以另一個介面來取代結合中的某個介面 (例如,當相應的網路裝置持續發生故障時)。解決方案是設定熱插拔。此外,還需要變更 udev 規則,以便依匯流排 ID 而不是 MAC 位址比對裝置。這樣,如果有缺陷的硬體 (位於相同插槽中但是具有不同 MAC 位址的網路卡) 允許更換的話,您便可以更換該硬體。

程序 16.1︰ 使用 YaST 將裝置熱插拔到結合中

如果您更喜歡手動設定,請參閱 SUSE Linux Enterprise Server Administration GuideBasic Networking 一章的 Hotplugging of bond ports 一節。

  1. root 身分啟動 YaST,然後選取系統 › 網路設定

  2. 網路設定中,切換至綜覽索引標籤,其中會顯示已設定的裝置。如果已在結合中設定裝置,備註欄中將會指明。

  3. 針對已結集到結合從屬的每個乙太網路裝置,執行以下步驟:

    1. 選取要變更的裝置,然後按一下編輯網路卡設定對話方塊即會開啟。

    2. 切換到一般索引標籤,確定啟動裝置設定為 On Hotplug

    3. 切換至硬體索引標籤。

    4. 針對Udev 規則按一下變更,然後選取匯流排 ID選項。

    5. 按一下確定下一步,回到網路設定對話方塊中的綜覽索引標籤。如果您現在按一下乙太網路裝置項目,下方窗格將會顯示裝置的詳細資料,其中包括匯流排 ID。

  4. 按一下確定確認您的變更並離開網路設定。

開機時,網路設定不會等待熱插拔裝置就緒,而是等待結合就緒,後者至少需要有一部裝置可用。當從系統中移除一個介面 (從 NIC 驅動程式解除結合、執行 NIC 驅動程式的 rmmod 指令或真正移除 PCI 熱插拔) 時,核心會自動從結合中將其移除。當將新卡新增至系統 (更換插槽中的硬體) 時,udev 會套用基於匯流排的永久命名規則將其重新命名,然後為它呼叫 ifup。呼叫 ifup 會自動將新卡加入結合。

16.3 更多資訊

Linux Ethernet Bonding Driver HOWTO》(Linux 乙太網路結合驅動程式 HOWTO) 中詳細說明了所有模式及眾多選項。安裝套件 kernel-source 後,便可在 /usr/src/linux/Documentation/networking/bonding.txt 處找到該檔案。

對於高可用性設定,本指南所述的以下選項特別重要:miimonuse_carrier

17 負載平衡

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

17.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 伺服器會輪流傳回所有這些項目。因此,不同的用戶端將會看到不同的位址。

  • 選取最佳伺服器: 雖然此策略存在一些缺點,但您可以使用第一部做出回應的伺服器負載最低的伺服器方法來實現平衡。

  • 平衡每台伺服器的連接數: 使用者與伺服器之間的負載平衡器可以將一定數量的使用者分散到多台伺服器上。

  • 地理定位: 可以將用戶端導向至附近的伺服器。

以下是一些適用於 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)。如此便能實現對用戶端和伺服器透明的負載平衡器容錯移轉。

17.2 使用 Linux 虛擬伺服器設定負載平衡

以下幾節概要介紹了主要的 LVS 元件和概念。然後,將介紹如何在 High Availability Extension 上設定 Linux 虛擬伺服器。

17.2.1 導向器

LVS 的主要元件是 ip_vs (或 IPVS) 核心代碼。它是預設核心的一部分,在 Linux 核心中實作輸送層負載平衡 (第 4 層交換)。執行包含 IPVS 代碼的 Linux 核心的節點稱為導向器。在導向器上執行的 IPVS 代碼是 LVS 的必要特性。

當用戶端連接至導向器時,系統會在所有叢集節點間對內送要求進行負載平衡。導向器會使用可使 LVS 正常運作的一組修改後路由規則,將封包轉遞到實際的伺服器。也即是,導向器不會發起或終止連接,也不會傳送確認通知等等。導向器的作用相當於專用路由器,它會將來自終端使用者的封包轉遞到實際的伺服器 (執行負責處理要求之應用程式的主機)。

17.2.2 使用者空間控制器和精靈

ldirectord 精靈是一個使用者空間精靈,可在 LVS 負載平衡虛擬伺服器叢集中管理 Linux 虛擬伺服器並監控實際的伺服器。組態檔案 (見下文) 指定虛擬服務及其關聯的實際伺服器,並指示 ldirectord 如何將此伺服器設定為 LVS 重新導向器。啟始化精靈時,會為叢集建立虛擬服務。

ldirectord 精靈透過不時發出已知 URL 請求並檢查回應的方式,監控實際伺服器的健康情況。如果實際的伺服器發生故障,便會從負載平衡器的可用伺服器清單中移除。當服務監控器偵測到這部停止的伺服器已恢復正常並重新運作時,會重新將該伺服器新增到可用伺服器清單中。可以指定一台容錯回復伺服器 (讓 Web 服務重新導向到該伺服器),以防所有實際伺服器都當機。容錯回復伺服器通常是本地主機,它會顯示一個緊急頁面,告知 Web 服務暫時不可用。

ldirectord 使用 ipvsadm 工具 (ipvsadm 套件) 來處理 Linux 核心中的虛擬伺服器表格。

17.2.3 封包轉遞

導向器將用戶端封包傳送至實際伺服器的方式有三種:

網路位址轉譯 (NAT)

內送的要求會送達虛擬的 IP 位址,然後透過將目的地 IP 位址和連接埠變更為所選實際伺服器的 IP 位址和連接埠,將這些要求轉遞至實際伺服器。實際伺服器會將回應傳送至負載平衡器,再由負載平衡器變更目的地 IP 位址,並將回應轉遞回用戶端。因此,終端使用者會從預期的來源收到回覆。由於所有流量都會通過負載平衡器,因此它往往成為叢集的瓶頸。

IP 通道封裝 (IP-IP 封裝)

IP 通道封裝能將定址到某 IP 位址的封包重新導向至另一個位址 (可能位於不同的網路)。LVS 透過 IP 通道將請求傳送至實際的伺服器 (重新導向至不同的 IP 位址),然後實際伺服器使用自己的路由表直接回覆用戶端。叢集成員可以位於不同的子網路。

直接路由

直接將終端使用者的封包轉遞到實際的伺服器。IP 封包並未修改,因此必須將實際伺服器設定為接受送往虛擬伺服器 IP 位址的流量。實際伺服器的回應將直接傳送至用戶端。實際伺服器和負載平衡器需位於相同的實體網路節區。

17.2.4 排程演算法

使用哪一部實際伺服器來處理用戶端請求的新連接,是由不同的演算法決定的。這些演算法以模組的形式提供,可根據特定需求進行調整。如需可用模組的綜覽,請參閱 ipvsadm(8) 手冊頁。從用戶端接收到連接請求後,導向器會依據排程為該用戶端指定實際的伺服器。排程器是 IPVS 核心代碼的一部分,用於決定哪部實際伺服器會獲取下一個新連接。

如需 Linux 虛擬伺服器排程演算法的更詳細描述,請造訪 http://kb.linuxvirtualserver.org/wiki/IPVS。此外,您也可以在 ipvsadm 手冊頁中搜尋 --scheduler

可以在 http://www.haproxy.org/download/1.6/doc/configuration.txt 上找到 HAProxy 的相關負載平衡策略。

17.2.5 使用 YaST 設定 IP 負載平衡

您可以使用 YaST IP 負載平衡模組設定基於核心的 IP 負載平衡。這是 ldirectord 的前端。

若要存取 IP 負載平衡對話方塊,請以 root 身分啟動 YaST,然後選取高可用性 ›  IP 負載平衡。或者在指令列上使用 rootyast2 iplb 身分啟動 YaST 叢集模組。

預設安裝不包括組態檔案 /etc/ha.d/ldirectord.cf。此檔案由 YaST 模組建立。YaST 模組中可用的索引標籤與 /etc/ha.d/ldirectord.cf 組態檔案的結構相對應,用於定義全域選項和虛擬服務的選項。

如需組態以及所產生之負載平衡器與實際伺服器間程序的範例,請參閱範例 17.1 「簡單的 ldirectord 組態」

注意
注意:全域參數和虛擬伺服器參數

如果同時在虛擬伺服器區段和全域區段指定了某個參數,則虛擬伺服器區段中定義的值將覆寫全域區段中定義的值。

程序 17.1︰ 設定全域參數

以下程序介紹如何設定最重要的全域參數。如需個別參數和此處未涉及之參數的詳細資料,請按一下說明或參閱 ldirectord 手冊頁。

  1. 使用檢查間隔時間可定義 ldirectord 連接每部實際伺服器,以檢查它們是否仍在線上的時間間隔。

  2. 使用檢查逾時設定實際伺服器應在上次檢查後的多少時間內給於回應。

  3. 使用失敗計數可以定義在 ldirectord 嘗試向實際伺服器發出多少次要求後即判定檢查失敗。

  4. 使用協議逾時可以定義協議檢查的逾時時間 (秒)。

  5. 容錯回復中,輸入當所有實際伺服器都當機時,Web 服務重新導向到之 Web 伺服器的主機名稱或 IP 位址。

  6. 如果希望系統在與實際伺服器的連接狀態發生變更時傳送警示,請在電子郵件警示中輸入有效的電子郵件地址。

  7. 使用電子郵件警示頻率可以定義當實際伺服器長時間無法存取時,重新傳送電子郵件警示的間隔時間 (秒)。

  8. 電子郵件警示狀態中,指定應在出現哪種伺服器狀態時傳送電子郵件警示。若要定義多種狀態,請使用逗號分隔的清單。

  9. 使用自動重新載入定義 ldirectord 是否應持續監控組態檔案的修改情況。如果設定為 yes,便會在變更後自動重新載入組態。

  10. 使用 Quiescent 參數定義是否要從核心的 LVS 表格中移除發生故障的實際伺服器。如果設定為,則不會移除出現故障的伺服器。而是將其權數設為 0,表示不接受任何新連接。已建立的連接將保持,直到逾時。

  11. 若要使用不同的路徑來記錄,請在記錄檔案中指定記錄的路徑。依預設,ldirectord 會將其記錄檔案寫入 /var/log/ldirectord.log

YaST IP 負載平衡 - 全域參數
圖 17.1︰ YaST IP 負載平衡 - 全域參數
程序 17.2︰ 設定虛擬服務

您可以透過為各項虛擬服務定義一對參數的方式設定一或多個虛擬服務。以下程序介紹如何為虛擬服務設定最重要的全域參數。如需個別參數和此處未涉及之參數的詳細資料,請按一下說明或參閱 ldirectord 手冊頁。

  1. 在 YaST IP 負載平衡模組中,切換至虛擬伺服器組態索引標籤。

  2. 新增新的虛擬伺服器,或編輯現有的虛擬伺服器。此時會出現一個新的對話方塊並顯示可用的選項。

  3. 虛擬伺服器中輸入以 LVS 形式存取負載平衡器和實際伺服器時所使用的共用虛擬 IP 位址 (IPv4 或 IPv6) 及連接埠。也可以指定主機名稱和服務來代替 IP 位址和連接埠號。或者,也可以使用防火牆標記。防火牆標記是將任意一組 VIP:port 服務集結到一個虛擬服務的一種方式。

  4. 若要指定實際伺服器,需要輸入伺服器的 IP 位址 (IPv4、IPv6 或主機名稱)、連接埠 (或服務名稱) 及轉遞方式。轉遞方法必須是 ipipgatemasq,請參閱第 17.2.3 節 「封包轉遞」

    按一下新增按鈕並輸入各個實際伺服器所需的引數。

  5. 檢查類型中,選取測試實際伺服器是否仍在工作時執行的檢查類型。例如,若要傳送要求並檢查回應中是否包含預期字串,請選取 Negotiate

  6. 如果檢查類型已設定為 Negotiate,則還需要定義要監控的服務類型。從服務下拉式方塊中選取所需的服務類型。

  7. 請求中輸入檢查間隔期間向每部實際伺服器所請求之物件的 URI。

  8. 如果要檢查實際伺服器的回應中是否包含某個字串 (I'm alive訊息),請定義要比對的正規表示式。在接收中輸入正規表示式。如果實際伺服器的回應中包含此表示式,說明此實際伺服器正在執行。

  9. 根據您在步驟 6 中選取的服務類型,您還需要指定其他參數以進行驗證。切換至驗證類型索引標籤,然後輸入登入名稱密碼資料庫秘密等詳細資料。如需詳細資訊,請參閱 YaST 說明文字或 ldirectord 手冊頁。

  10. 切換至其他索引標籤。

  11. 選取用於負載平衡的規劃程式。如需可用排程器的資訊,請參閱 ipvsadm(8) 手冊頁。

  12. 選取要使用的協定。如果虛擬服務指定為 IP 位址和連接埠,則必須是 tcpudp 協定。如果虛擬服務指定為防火牆標記,則必須是 fwm 協定。

  13. 根據需要定義其他參數。按一下確定確認您的組態。YaST 會將此組態寫入 /etc/ha.d/ldirectord.cf

YaST IP 負載平衡 - 虛擬服務
圖 17.2︰ YaST IP 負載平衡 - 虛擬服務
範例 17.1︰ 簡單的 ldirectord 組態

圖形 17.1 「YaST IP 負載平衡 - 全域參數」圖形 17.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,這樣便不會接受連至此實際伺服器的新連接。已建立的連接會保持連線,直到逾時。

17.2.6 其他步驟

除了需要使用 YaST 設定 ldirectord 組態之外,您還需要確定以下條件均已符合才能完成 LVS 的設定:

  • 已正確設定實際伺服器以提供所需的服務。

  • 一或多個負載平衡伺服器必須能夠採用 IP 轉遞方式將流量路由到實際伺服器。實際伺服器的網路組態取決於您選擇的封包轉遞方法。

  • 為了防止一或多個負載平衡伺服器成為整個系統的單一故障點,需要設定一或多個負載平衡器的備份。在叢集組態中,設定 ldirectord 的基本資源,這樣在出現硬體故障時,ldirectord 便可容錯移轉到其他伺服器。

  • 由於負載平衡器的備份也需要 ldirectord 組態檔案才能完成其任務,因此請確定 /etc/ha.d/ldirectord.cf 在要用做負載平衡器備份的所有伺服器上均可用。您可以依照第 4.7 節 「將組態傳輸至所有節點」 所述使用 Csync2 同步組態檔案。

17.3 使用 HAProxy 設定負載平衡

下面的部分提供了 HAProxy 的綜覽,並介紹了如何在 High Availability 上進行設定。負載平衡器會將所有要求配送至其後端伺服器。它設定為主動/被動模式,也就是說,當一部伺服器發生故障時,被動伺服器就會變成主動伺服器。在這種情況下,使用者感受不到任何服務中斷的跡象。

在本節中,我們將使用以下設定:

  • IP 位址為 192.168.1.99 的負載平衡器。

  • 一個虛擬浮動 IP 位址 192.168.1.99.

  • 我們的伺服器 (通常用於代管 Web 內容) www.example1.com (IP:192.168.1.200) 和 www.example2.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. 測試組態檔案:

    # haproxy -f /etc/haproxy/haproxy.cfg -c
  4. 將下面一行新增至 Csync2 的組態檔案 /etc/csync2/csync2.cfg 中,以確保包含 HAProxy 組態檔案:

    include /etc/haproxy/haproxy.cfg
  5. 同步該檔案:

    # csync2 -f /etc/haproxy/haproxy.cfg
    # csync2 -xv
    注意
    注意

    Csync2 組態部分假設已使用 crm 外圍程序提供的開機程序檔設定 HA 節點。如需詳細資料,請參閱Installation and Setup Quick Start

  6. 務必在兩個負載平衡器 (alicebob) 上都停用 HAProxy,因為它會由 Pacemaker 啟動:

    # systemctl disable haproxy
  7. 設定新的 CIB:

    # 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

17.4 更多資訊

18 Geo 叢集 (多站點叢集)

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

第 III 部分 儲存和資料複製

  • 19 分散式鎖定管理員 (DLM)
  • 核心中的分散式鎖定管理員 (DLM) 是 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 用於在每個相關層提供主動-主動儲存的基礎元件。

  • 20 OCFS2
  • Oracle Cluster File System 2 (OCFS2) 是一般性用途的日誌檔案系統,自 Linux 2.6 版起便已完全整合到該核心中。OCFS2 可讓您將應用程式二進位檔案、資料檔案和資料庫儲存於裝置上的共用儲存中。叢集中所有節點均同時具有檔案系統的讀取與寫入權限。透過複製品資源管理的使用者空間控制精靈可提供與 HA 堆疊的整合,特別是與 Corosync 和分散式鎖定管理員 (DLM) 的整合。

  • 21 GFS2
  • 全域檔案系統 2 (GFS2) 是適用於 Linux 電腦叢集的共用磁碟檔案系統。GFS2 允許所有節點同時直接存取同一個共用區塊儲存。GFS2 不提供斷線操作模式,也沒有用戶端角色或伺服器角色。GFS2 叢集中的所有節點以對等形式運作。GFS2 最多支援 32 個叢集節點。在叢集中使用 GFS2 需要透過硬體來存取共用儲存,並需要透過一個鎖定管理員來控制對儲存的存取。

    如果效能是您的主要考量之一,SUSE 建議為您的叢集環境使用 OCFS2,而不要使用 GFS2。我們的測試表明,與採用此類設定的 GFS2 相比,OCFS2 的表現更好。

  • 22 DRBD
  • 分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。

  • 23 叢集邏輯磁碟區管理員 (叢集 LVM)
  • 管理叢集上的共用儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Logical Volume Manager 2 (LVM2) 已進行延伸,現可支援對整個叢集中的磁碟區群組進行透明管理。在多個主機之間共用的磁碟區群組可使用與本地儲存相同的指令進行管理。

  • 24 叢集多裝置 (叢集 MD)
  • 叢集多裝置 (叢集 MD) 是一項基於軟體的叢集 RAID 儲存解決方案。目前,叢集 MD 為叢集提供了 RAID1 鏡像的備援。在 SUSE Linux Enterprise High Availability Extension15 SP5 中,隨附了 RAID10 做為技術預覽。如果您想嘗試 RAID,請在相關的 mirror 指令中使用 1010 取代 mdadm。本章介紹如何建立和使用叢集 MD。

  • 25 Samba 叢集
  • 叢集化 Samba 伺服器為您的異質網路提供了高可用性解決方案。本章介紹了一些背景知識並說明如何設定叢集化 Samba 伺服器。

  • 26 使用 ReaR (Relax-and-Recover) 實現災難備援
  • Relax-and-Recover (ReaR) 是供系統管理員使用的災難備援架構。Rear 是一個 Bash 程序檔集合,您需要依據要在發生災難時加以保護的特定線上環境調整這些程序檔。

    沒有任何災難備援解決方案能夠現成地解決問題。因此,必須在災難發生做好準備。

19 分散式鎖定管理員 (DLM)

核心中的分散式鎖定管理員 (DLM) 是 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 用於在每個相關層提供主動-主動儲存的基礎元件。

19.1 用於 DLM 通訊的通訊協定

為了避免單一故障點,非常有必要對高可用性叢集設定備援通訊路徑。對於 DLM 通訊也是如此。如果出於任何原因無法使用網路結合 (連結彙總控制通訊協定,LACP),我們強烈建議在 Corosync 中定義備援通訊通道 (另一個環)。如需詳細資料,請參閱程序 4.3 「定義備援通訊通道」

DLM 可使用 TCP 或 SCTP 通訊協定透過連接埠 21064 進行通訊,具體使用哪個通訊協定取決於 /etc/corosync/corosync.conf 中的組態。

  • 如果 rrp_mode 設定為 none (表示停用備援環組態),則 DLM 會自動使用 TCP。但是,如果未定義備援通訊通道,當 TCP 連接中斷時,DLM 通訊將會失敗。

  • 如果 rrp_mode 設定為 passive (一般會如此設定),並且在 /etc/corosync/corosync.conf 中正確設定了另一個通訊環,DLM 將自動使用 SCTP。在此情況下,DLM 訊息傳送會獲得 SCTP 提供的備援功能。

19.2 設定 DLM 叢集資源

DLM 使用 Pacemaker 提供的並在使用者空間中執行的叢集成員資格服務。因此,需要將 DLM 設定為叢集中每個節點上都存在的複製品資源。

注意
注意:多個解決方案的 DLM 資源

由於 OCFS2、GFS2、叢集 MD 和叢集 LVM (lvmlockd) 全部都使用 DLM,因此為 DLM 設定一個資源便已足夠。由於 DLM 資源在叢集中的所有節點上執行,因此將其設定為複製品資源。

如果您的設定包含 OCFS2 和叢集 LVM,只需為 OCFS2 和叢集 LVM 設定一個 DLM 資源就足夠了。在此情況下,請使用 程序 19.1 「設定 DLM 的基礎群組」 設定 DLM。

但是,如果您需要確保使用 DLM 的資源彼此獨立 (例如多個 OCFS2 掛接點),請使用不同的並存和順序條件約束,而不要使用群組。在此情況下,請使用 程序 19.2 「設定獨立的 DLM 資源」 設定 DLM。

程序 19.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 提交變更,然後使用 quit 離開 crm 即時組態。

注意
注意:停用 STONITH 時會出現故障

系統不支援未啟用 STONITH 的叢集。如果出於測試或疑難排解目的將全域叢集選項 stonith-enabled 設定為 false,則 DLM 資源以及相依於它的所有服務 (例如叢集 LVM、GFS2 和 OCFS2) 將無法啟動。

程序 19.2︰ 設定獨立的 DLM 資源

此組態由一個基本資源和一個複製品構成,但不包含群組:透過新增並存和順序條件約束,可以避免在多個使用 DLM 的資源 (例如多個 OCFS2 掛接點) 之間形成相依關係。

  1. root 或同等身分登入節點。

  2. 執行 crm configure

  3. 為 DLM 建立基本資源:

    crm(live)configure# primitive dlm ocf:pacemaker:controld \
      op start timeout=90 interval=0 \
      op stop timeout=100 interval=0 \
      op monitor interval=60 timeout=60
  4. 複製 dlm 資源,使其在所有節點上執行:

    crm(live)configure#  clone cl-dlm dlm meta interleave=true
  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定均正確無誤,請使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

20 OCFS2

Oracle Cluster File System 2 (OCFS2) 是一般性用途的日誌檔案系統,自 Linux 2.6 版起便已完全整合到該核心中。OCFS2 可讓您將應用程式二進位檔案、資料檔案和資料庫儲存於裝置上的共用儲存中。叢集中所有節點均同時具有檔案系統的讀取與寫入權限。透過複製品資源管理的使用者空間控制精靈可提供與 HA 堆疊的整合,特別是與 Corosync 和分散式鎖定管理員 (DLM) 的整合。

20.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 的支援。

20.2 OCFS2 套件和管理公用程式

CFS2 核心模組 (ocfs2) 會自動安裝到 SUSE® Linux Enterprise Server 15 SP5 上的 High Availability Extension 中。若要使用 OCFS2,請確定已在叢集中的每個節點上安裝以下套件:ocfs2-tools 和與核心相符的 ocfs2-kmp-* 套件。

ocfs2-tools 套件提供以下用於管理 OCFS2 磁碟區的公用程式。如需有關語法的資訊,請參閱其手冊頁。

debugfs.ocfs2

檢查 OCFS2 檔案系統的狀態以進行除錯。

defragfs.ocfs2

減少 OCFS2 檔案系統的碎片。

fsck.ocfs2

檢查檔案系統是否有錯誤,並選擇性修復錯誤。

mkfs.ocfs2

在裝置上建立 OCFS2 檔案系統,通常是共用實體或邏輯磁碟上的分割區。

mounted.ocfs2

偵測並列出叢集系統上的所有 OCFS2 磁碟區。偵測並列出掛接 OCFS2 裝置的系統上之所有節點,或列出所有 OCFS2 裝置。

tunefs.ocfs2

變更 OCFS2 檔案系統參數,包括磁碟區標籤、節點插槽數量、所有節點插槽的日至大小,以及磁碟區大小。

20.3 設定 OCFS2 服務和 STONITH 資源

建立 OCFS2 磁碟區之前,您必須先將 DLM 及 STONITH 資源設定為叢集中的服務。

下面的程序將使用 crm 外圍程序來設定叢集資源。或者,您也可以依第 20.6 節 「使用 Hawk2 設定 OCFS2 資源」所述,使用 Hawk2 來設定資源。

程序 20.1︰ 設定 STONITH 資源
注意
注意:需要 STONITH 裝置

您需要設定一部圍籬區隔裝置。如果沒有設定合適的 STONITH 機制 (如 external/sbd),組態將失敗。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 程序 13.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 提交變更,然後使用 quit 離開 crm 即時組態。

如需為 DLM 設定資源的詳細資料,請參閱第 19.2 節 「設定 DLM 叢集資源」

20.4 建立 OCFS2 磁碟區

依照第 20.3 節 「設定 OCFS2 服務和 STONITH 資源」所述設定 DLM 叢集資源後,將系統設定為使用 OCFS2,並建立 OCFs2 磁碟區。

注意
注意:用於儲存應用程式和資料檔案的 OCFS2 磁碟區

一般情況下,建議您將應用程式檔案與資料檔案儲存在不同的 OCFS2 磁碟區中。如果您的應用程式磁碟區和資料磁碟區對於掛接有不同的要求,請務必將它們儲存到不同的磁碟區中。

開始之前,請先準備要用於 OCFS2 磁碟區的區塊裝置。將裝置留為可用空間。

然後按mkfs.ocfs2 中所述,使用 程序 20.2 「建立並格式化 OCFS2 磁碟區」 建立並格式化 OCFS2 磁碟區。下面列出了此指令最重要的參數。如需詳細資訊及指令語法,請參閱 mkfs.ocfs2 手冊頁。

磁碟區標籤 (-L)

磁碟區的描述性名稱可讓其掛接於不同節點時易於辨識。使用 tunefs.ocfs2 公用程式依需要修改標籤。

叢集大小 (-C)

配置給檔案以儲存資料的最小空間單位。如需可用選項及建議,請參閱 mkfs.ocfs2 手冊頁。

節點插槽數量 (-N)

可同時掛接磁碟區的最大節點數量。OCFS2 會分別為每個節點建立系統檔案,例如日誌。存取磁碟區的節點可以是 little-endian 架構 (如 AMD64/Intel 64) 和 big-endian 架構 (如 S/390x) 的組合。

節點特定的檔案稱為本地檔案。節點插槽號碼會附加至本機檔案。例如,journal:0000 隸屬於指派至插槽 0 的任一節點。

建立磁碟區時,請根據您希望同時掛接磁碟區的節點數量,設定節點插槽的最大磁碟區數量。使用 tunefs.ocfs2 公用程式可以視需要增加節點數。該值不能減小,並且一個節點插槽會佔用 100 MiB 磁碟空間。

如果未指定 -N 參數,系統會根據檔案系統的大小確定節點插槽數。如需預設值,請參閱 mkfs.ocfs2 手冊頁。

區塊大小 (-b)

檔案系統可定址的空間最小單位。請在建立磁碟區時指定區塊大小。如需可用選項及建議,請參閱 mkfs.ocfs2 手冊頁。

開啟/關閉特定功能 (--fs-features)

可提供以逗號分隔的功能旗標清單,mkfs.ocfs2 會嘗試根據此清單建立具有這些功能的檔案系統。若要開啟功能,請在清單中包含該功能。若要關閉功能,則在名稱前預增 no

如需所有可用標記的綜覽,請參閱 mkfs.ocfs2 手冊頁。

預先定義的功能 (--fs-feature-level)

用於從一組預先定義的檔案系統功能中進行選擇。如需可用選項,請參閱 mkfs.ocfs2 手冊頁。

如果使用 mkfs.ocfs2 建立和格式化磁碟區時未指定任何功能,預設會啟用以下功能:unwrittenbackup-supermetaeccsparseindexed-dirsinline-dataxattr

程序 20.2︰ 建立並格式化 OCFS2 磁碟區

在其中個叢集節點上執行下列步驟。

  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 使用 mkfs.ocfs2 公用程式建立並格式化磁碟區。如需此指令語法的資訊,請參閱 mkfs.ocfs2 手冊頁。

    例如,若要在 /dev/sdb1 上建立最多支援 32 個叢集節點的新 OCFS2 檔案系統,請輸入以下指令:

    # mkfs.ocfs2 -N 32 /dev/sdb1

20.5 掛接 OCFS2 磁碟區

您可以按程序 20.4 「使用叢集資源管理員掛接 OCFS2 磁碟區」 中所述,手動或使用叢集管理員掛接 OCFS2 磁碟區。

若要掛接多個 OCFS2 磁碟區,請參閱程序 20.5 「使用叢集資源管理員掛接多個 OCFS2 磁碟區」

程序 20.3︰ 手動掛接 OCFS2 磁碟區
  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 從指令列掛接磁碟區,請使用 mount 指令。

提示
提示:在單個節點上掛接現有的 OCFS2 磁碟區

您可以在單個節點 (不具有功能完備的叢集堆疊) 上掛接 OCFS2 磁碟區:例如,用於快速存取備份中的資料。若要執行此操作,請使用 mount 指令 (帶 -o nocluster 選項)。

警告

此掛接方法缺少針對整個叢集的保護能力。為了避免檔案系統損毀,您必須確保僅將其掛接到一個節點上。

程序 20.4︰ 使用叢集資源管理員掛接 OCFS2 磁碟區

若要使用 High Availability 軟體掛接 OCFS2 磁碟區,請在叢集中設定 OCFS2 檔案系統資源。下面的程序將使用 crm 外圍程序來設定叢集資源。或者,您也可以依第 20.6 節 「使用 Hawk2 設定 OCFS2 資源」所述,使用 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" \
      op monitor interval="20" timeout="40" \
      op start timeout="60" op stop timeout="60" \
      meta target-role="Started"
  4. ocfs2-1 基本資源新增至您在程序 19.1 「設定 DLM 的基礎群組」中建立的 g-storage 群組。

    crm(live)configure# modgroup g-storage add ocfs2-1

    受限於基本群組的內部並存與順序條件約束,ocfs2-1 資源將僅在已有 dlm 資源在執行的節點上啟動。

    重要
    重要:不要為多個 OCFS2 資源使用群組

    若將多個 OCFS2 資源新增至一個群組,會在 OCFS2 磁碟區之間建立相依關係。例如,如果使用 crm configure group g-storage dlm ocfs2-1 ocfs2-2 建立了一個群組,那麼停止 ocfs2-1 也將停止 ocfs2-2,啟動 ocfs2-2 也將啟動 ocfs2-1

    若要在叢集中使用多個 OCFS2 資源,請依照程序 20.5 「使用叢集資源管理員掛接多個 OCFS2 磁碟區」所述使用並存和順序條件約束。

  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定均正確無誤,請使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

程序 20.5︰ 使用叢集資源管理員掛接多個 OCFS2 磁碟區

若要在叢集中掛接多個 OCFS2 磁碟區,請為每個磁碟區設定一個 OCFS2 檔案系統資源,並將其與您在程序 19.2 「設定獨立的 DLM 資源」中建立的 dlm 資源並存。

重要

不要使用 DLM 將多個 OCFS2 資源新增至一個群組。這會在 OCFS2 磁碟區之間建立相依關係。例如,如果 ocfs2-1ocfs2-2 在同一個群組中,那麼停止 ocfs2-1 也將停止 ocfs2-2

  1. root 或同等身分登入節點。

  2. 執行 crm configure

  3. 為第一個 OCFS2 磁碟區建立基本資源:

    crm(live)configure# primitive ocfs2-1 Filesystem \
      params directory="/srv/ocfs2-1" fstype=ocfs2 device="/dev/disk/by-partlabel/ocfs2-1" \
      op monitor interval=20 timeout=40 \
      op start timeout=60 interval=0 \
      op stop timeout=60 interval=0
  4. 為第二個 OCFS2 磁碟區建立基本資源:

    crm(live)configure# primitive ocfs2-2 Filesystem \
      params directory="/srv/ocfs2-2" fstype=ocfs2 device="/dev/disk/by-partlabel/ocfs2-2" \
      op monitor interval=20 timeout=40 \
      op start timeout=60 interval=0 \
      op stop timeout=60 interval=0
  5. 複製 OCFS2 資源,使其可以在所有節點上執行:

    crm(live)configure# clone cl-ocfs2-1 ocfs2-1 meta interleave=true
    crm(live)configure# clone cl-ocfs2-2 ocfs2-2 meta interleave=true
  6. 為兩個 OCFS2 資源新增並存條件約束,使其只能在正在執行 DLM 的節點上執行:

    crm(live)configure# colocation co-ocfs2-with-dlm inf: ( cl-ocfs2-1 cl-ocfs2-2 ) cl-dlm
  7. 為兩個 OCFS2 資源新增順序條件約束,使其只能在 DLM 執行後才能啟動:

    crm(live)configure# order o-dlm-before-ocfs2 Mandatory: cl-dlm ( cl-ocfs2-1 cl-ocfs2-2 )
  8. 使用 show 檢閱所做的變更。

  9. 如果所有設定均正確無誤,請使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

20.6 使用 Hawk2 設定 OCFS2 資源

除了使用 crm 外圍程序手動為 OCFS2 設定 DLM 和檔案系統資源以外,您還可以使用 Hawk2 設定精靈中的 OCFS2 範本。

重要
重要:手動設定與使用 Hawk2 的區別

設定精靈中的 OCFS2 範本包含 STONITH 資源的組態。如果使用該精靈,仍需在共用儲存上建立 SBD 分割區,並依照程序 20.1 「設定 STONITH 資源」所述設定一個 STONITH 資源。

使用 Hawk2 設定精靈中的 OCFS2 範本還會導致資源組態與程序 19.1 「設定 DLM 的基礎群組」程序 20.4 「使用叢集資源管理員掛接 OCFS2 磁碟區」中所述的手動組態略有不同。

程序 20.6︰ 使用 Hawk2 的精靈設定 OCFS2 資源
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取精靈

  3. 展開檔案系統類別,然後選取 OCFS2 File System

  4. 按照螢幕上的指示執行操作。如需關於某個選項的資訊,按一下該選項即可在 Hawk2 中顯示簡要說明文字。在最後一個設定步驟之後,驗證所輸入的值。

    精靈會顯示將套用於 CIB 的組態代碼片段以及任何其他變更 (如果需要)。

    Image
  5. 檢查建議的變更。如果一切都符合您的預期,請套用變更。

    如果動作成功,螢幕上會顯示一則訊息。

20.7 在 OCFS2 檔案系統上使用配額

若要在 OCFS2 檔案系統上使用配額,請分別使用以下相應的配額功能或掛接選項來建立和掛接檔案系統:ursquota (個別使用者的配額) 或 grpquota (群組的配額)。您也可在以後使用 tunefs.ocfs2 在解下的檔案系統上啟用這些功能。

檔案系統啟用相應的配額功能後,將會在中繼資料中追蹤每個使用者 (或群組) 使用的空間量和檔案數量。由於 OCFS2 將配額資訊視為檔案系統內部的中繼資料,因此,您不需要執行 quotacheck(8) 程式。fsck.ocfs2 和檔案系統驅動程式自身中已內建所有功能。

若要對每個使用者或群組強制實施限制,請執行 quotaon(8),就像對其他任何檔案系統執行該指令一樣。

出於效能的考量,每個叢集每隔 10 秒會在本地執行一次配額計算,並將此資訊同步至通用中央儲存。您可以使用 tunefs.ocfs2、選項 usrquota-sync-intervalgrpquota-sync-interval 來調整此間隔。因此,配額資訊並非一直都是精確的,所以,當使用者或群組同時操作多個叢集節點時,可能會略微超出其配額限制。

20.8 更多資訊

如需有關 OCFS2 的詳細資訊,請參閱下列連結的內容:

https://ocfs2.wiki.kernel.org/

OCFS2 專案首頁。

http://oss.oracle.com/projects/ocfs2/

Oracle 上的原 OCFS2 專案首頁。

http://oss.oracle.com/projects/ocfs2/documentation

專案的原文件首頁。

21 GFS2

全域檔案系統 2 (GFS2) 是適用於 Linux 電腦叢集的共用磁碟檔案系統。GFS2 允許所有節點同時直接存取同一個共用區塊儲存。GFS2 不提供斷線操作模式,也沒有用戶端角色或伺服器角色。GFS2 叢集中的所有節點以對等形式運作。GFS2 最多支援 32 個叢集節點。在叢集中使用 GFS2 需要透過硬體來存取共用儲存,並需要透過一個鎖定管理員來控制對儲存的存取。

如果效能是您的主要考量之一,SUSE 建議為您的叢集環境使用 OCFS2,而不要使用 GFS2。我們的測試表明,與採用此類設定的 GFS2 相比,OCFS2 的表現更好。

重要
重要:GFS2 支援

SUSE 僅支援唯讀模式的 GFS2。不支援寫入操作。

21.1 GFS2 套件和管理公用程式

若要使用 GFS2,請確定叢集的每個節點上均已安裝適用於您的核心的 gfs2-utils 和相符的 gfs2-kmp-* 套件。

gfs2-utils 套件提供下列用於管理 GFS2 磁碟區的公用程式。如需有關語法的資訊,請參閱其手冊頁。

fsck.gfs2

檢查檔案系統是否有錯誤,並選擇性修復錯誤。

gfs2_jadd

將更多記錄新增至 GFS2 檔案系統。

gfs2_grow

產生一個 GFS2 檔案系統。

mkfs.gfs2

在裝置上建立一個 GFS2 檔案系統,通常是一個共用裝置或分割區。

tunegfs2

用於檢視和控制 GFS2 檔案系統參數,例如 UUID, label, lockprotolocktable.

21.2 設定 GFS2 服務和 STONITH 資源

在可以建立 GFS2 磁碟區之前,必須先設定 DLM 和 STONITH 資源。

程序 21.1︰ 設定 STONITH 資源
注意
注意:需要 STONITH 裝置

您需要設定一部圍籬區隔裝置。如果沒有設定合適的 STONITH 機制 (如 external/sbd),組態將失敗。

  1. 啟動外圍程序,並以 root 或同等身分登入。

  2. 程序 13.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 提交變更,然後使用 quit 離開 crm 即時組態。

如需為 DLM 設定資源的詳細資料,請參閱第 19.2 節 「設定 DLM 叢集資源」

21.3 建立 GFS2 磁碟區

依照第 21.2 節 「設定 GFS2 服務和 STONITH 資源」所述將 DLM 設定為叢集資源後,將系統設定為使用 GFS2,並建立 GFS2 磁碟區。

注意
注意:用於儲存應用程式和資料檔案的 GFS2 磁碟區

一般情況下,建議您將應用程式檔案與資料檔案儲存在不同的 GFS2 磁碟區中。如果您的應用程式磁碟區和資料磁碟區對於掛接有不同的要求,請務必將它們儲存到不同的磁碟區中。

開始之前,請先準備您計劃用於 GFS2 磁碟區的區塊裝置。將裝置留為可用空間。

然後依照mkfs.gfs2所述,使用 程序 21.2 「建立並格式化 GFS2 磁碟區」 建立並格式化 GFS2 磁碟區。下面列出了此指令最重要的參數。如需詳細資訊及指令語法,請參閱 mkfs.gfs2 手冊頁。

鎖定通訊協定名稱 (-p)

要使用的鎖定通訊協定的名稱。可接受的鎖定通訊協定包括 lock_dlm (用於共用儲存);如果您將 GFS2 用做本地檔案系統 (只有 1 個節點),則可以指定 lock_nolock 通訊協定。如果未指定此選項,將採用 lock_dlm 通訊協定。

鎖定表名稱 (-t)

對應於所用鎖定模組的鎖定表欄位。這是 clustername:fsname.clustername 值必須與叢集組態檔案 /etc/corosync/corosync.conf 中的值相符。只有此叢集的成員才允許使用此檔案系統。fsname 值是唯一的檔案系統名稱 (1 到 16 個字元),用於將此 GFS2 檔案系統與建立的其他檔案系統區分開。

記錄數量 (-j)

要為 gfs2_mkfs 建立的記錄數量。將要掛接該檔案系統的每台機器至少需要有一個記錄。如果未指定此選項,將建立一個記錄。

程序 21.2︰ 建立並格式化 GFS2 磁碟區

在其中個叢集節點上執行下列步驟。

  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 使用 mkfs.gfs2 公用程式建立並格式化磁碟區。如需此指令語法的資訊,請參閱 mkfs.gfs2 手冊頁。

    例如,若要在 /dev/sdb1 上建立最多支援 32 個叢集節點的新 GFS2 檔案系統,請使用以下指令:

    # mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/sdb1

    hacluster 名稱與檔案 /etc/corosync/corosync.conf 中的 cluster_name 項目相關 (這是預設設定)。

21.4 掛接 GFS2 磁碟區

您可以手動掛接 GFS2 磁碟區,也可以依照程序 21.4 「使用叢集管理員掛接 GFS2 磁碟區」所述使用叢集管理員來掛接。

程序 21.3︰ 手動掛接 GFS2 磁碟區
  1. 開啟終端機視窗,並以 root 身分登入。

  2. 使用指令 crm status 檢查叢集是否上線。

  3. 從指令列掛接磁碟區,請使用 mount 指令。

警告
警告:手動掛接的 GFS2 裝置

如果您為了進行測試手動掛接了 GFS2 檔案系統,在開始將其做為叢集資源使用前,請務必將其卸載以恢復原狀。

程序 21.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. gfs2-1 基本資源新增至您在程序 19.1 「設定 DLM 的基礎群組」中建立的 g-storage 群組。

    crm(live)configure# modgroup g-storage add gfs2-1

    受限於基本群組的內部並存與順序條件約束,gfs2-1 資源將僅在已有 dlm 資源在執行的節點上啟動。

  5. 使用 show 檢閱所做的變更。

  6. 如果所有設定均正確無誤,請使用 commit 提交變更,然後使用 quit 離開 crm 即時組態。

22 DRBD

分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。

22.1 概念綜覽

DRBD 能在將資料從主要裝置複製到次要裝置時,確保兩份資料保持一致。您可以將其視為網路 RAID 1。它會即時執行資料的鏡像複製,因此其複製會持續進行。應用程式無須知曉其資料實際上儲存在其他磁碟上。

DRBD 是 Linux 核心模組,位於下層的 I/O 規劃程式和上層的檔案系統之間,請參閱圖形 22.1 「DRBD 在 Linux 中的位置」。若要與 DRBD 通訊,使用者需使用高階指令 drbdadm。為最大限度地提升靈活性,DRBD 隨附有低階工具 drbdsetup

DRBD 在 Linux 中的位置
圖 22.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 的任何嘗試都會失敗,因為這些空間不用於儲存使用者資料。

22.2 安裝 DRBD 服務

依照第 I 部分 「安裝與設定」所述,在網路叢集中的兩台 SUSE Linux Enterprise Server 機器上都安裝 High Availability Extension。安裝 High Availability Extension 時會安裝 DRBD 程式檔案。

如果您不需要完整的叢集堆疊,而只想使用 DRBD,請安裝套件 drbddrbd-kmp-FLAVORdrbd-utilsyast2-drbd

22.3 設定 DRBD 服務

注意
注意:需要進行調整

下面的程序使用伺服器名稱 alice 與 bob,以及叢集資源名稱 r0。它將 alice 設定為主要節點,並使用 /dev/sda1 儲存資料。請務必修改指示,以使用您自己的節點與檔案名稱。

以下章節假設您擁有 alice 與 bob 兩個節點,並且它們應使用 TCP 連接埠 7788。請確定您的防火牆中已開啟此連接埠。

  1. 準備系統:

    1. 確定 Linux 節點中的區塊裝置已就緒並已分割 (如果需要)。

    2. 如果磁碟包含您已不再需要的檔案系統,請使用以下指令損毀檔案系統結構:

      # dd if=/dev/zero of=YOUR_DEVICE count=16 bs=1M

      如果有多個檔案系統需要摧毀,請在您希望包含到 DRBD 設定中的所有裝置上重複此步驟。

    3. 如果叢集已在使用 DRBD,請將叢集置於維護模式:

      # crm configure property maintenance-mode=true

      如果叢集已在使用 DRBD,而您跳過了此步驟,即時組態中的語法錯誤會導致服務關閉。

      或者,也可以使用 drbdadm -c FILE 來測試組態檔案。

  2. 使用所選的方法來設定 DRBD:

  3. 如果您已設定 Csync2 (這應該是預設設定),則 DRBD 組態檔案已包含在需要同步的檔案清單中。若要同步這些組態檔案,請執行以下指令:

    # csync2 -xv

    如果您未設定或不想使用 Csync2,請手動將 DRBD 組態檔案複製到另一個節點:

    # scp /etc/drbd.conf bob:/etc/
    # scp /etc/drbd.d/* bob:/etc/drbd.d/
  4. 執行啟始同步 (請參閱第 22.3.3 節 「啟始化和格式化 DRBD 資源」)。

  5. 重設叢集的維護模式旗標:

    # crm configure property maintenance-mode=false

22.3.1 手動設定 DRBD

注意
注意:自動升級功能支援受限

DRBD9 的自動升級功能可以在掛接或開啟資源的其中一部裝置以向其中寫入資料時自動將資源升級為主要角色。

目前,自動升級功能僅具有受限支援。使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。

若要手動設定 DRBD,請執行下列步驟:

程序 22.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. 檢查組態檔案的語法。若以下指令傳回錯誤,請檢查您的檔案:

    # drbdadm dump all
  4. 繼續第 22.3.3 節 「啟始化和格式化 DRBD 資源」

22.3.2 使用 YaST 設定 DRBD

可以使用 YaST 來啟動 DRBD 的啟始設定。建立 DRBD 設定後,可以手動微調產生的檔案。

但是,當變更組態檔案後,請不要再使用 YaST DRBD 模組。DRBD 模組僅支援有限的一組基本組態。如果您再次使用該模組,它有可能不會顯示您所做的變更。

若要使用 YaST 來設定 DRBD,請執行以下步驟:

程序 22.2︰ 使用 YaST 設定 DRBD
  1. 啟動 YaST 並選取組態模組高可用性 ›  DRBD。如果您已設定了 DRBD 組態,YaST 會向您發出警告。YaST 會變更您的組態,並將原來的 DRBD 組態檔案儲存為 *.YaSTsave

  2. 啟動組態 › 開機中的開機旗標保留原樣 (預設為 off);請不要變更該設定,因為 Pacemaker 會管理此服務。

  3. 如果防火牆正在執行,請啟用在防火牆中開啟埠

  4. 移至資源組態項目。選取新增以建立新資源 (請參閱圖形 22.2 「資源組態」)。

    資源組態
    圖 22.2︰ 資源組態

    需要設定以下參數:

    資源名稱

    DRBD 資源的名稱 (強制)

    名稱

    相關節點的主機名稱

    位址:埠

    相應節點的 IP 位址和連接埠號 (預設為 7788)

    裝置

    用於存取所複製資料的區塊裝置路徑。如果裝置包含次要編號,則關聯的區塊裝置通常命名為 /dev/drbdX,其中 X 是裝置次要編號。如果裝置不包含次要編號,請務必在裝置名稱後面新增 minor 0

    磁碟

    在兩個節點間複製的原始裝置。如果您使用 LVM,請插入 LVM 裝置名稱。

    中繼磁碟

    Meta-disk 可設定為 internal 值,或指定由索引定義的具體裝置,以存放 DRBD 所需的中繼資料。

    也可為多重 DRBD 資源使用一個真實裝置。例如,如果第一個資源的 Meta-Disk/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. 繼續第 22.3.3 節 「啟始化和格式化 DRBD 資源」

22.3.3 啟始化和格式化 DRBD 資源

準備系統並設定 DRBD 後,請執行磁碟的首次啟始化:

  1. 在 alice 和 bob 這兩個節點上,啟始化中繼資料儲存:

    # drbdadm create-md r0
    # drbdadm up r0
  2. 若要縮短 DRBD 資源的初始重新同步時間,請檢查以下項目:

    • 如果所有節點上的 DRBD 裝置都具有相同資料 (例如,透過使用dd中所述的 第 22.3 節 「設定 DRBD 服務」 指令損毀檔案系統結構),則請在這兩個節點上使用以下指令跳過初始重新同步步驟:

      # drbdadm new-current-uuid --clear-bitmap r0/0

      狀態將為 Secondary/Secondary UpToDate/UpToDate

    • 否則,請繼續下一步。

  3. 在主要節點 alice 上,啟動重新同步程序:

    # drbdadm primary --force r0
  4. 使用以下指令檢查狀態:

    # drbdadm status r0
    r0 role:Primary
      disk:UpToDate
      bob role:Secondary
      peer-disk:UpToDate
  5. 在您的 DRBD 裝置上建立檔案系統,例如:

    # mkfs.ext3 /dev/drbd0
  6. 掛接檔案系統並投入使用:

    # mount /dev/drbd0 /mnt/

22.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 資源,另請參閱第 22.5 節 「建立堆疊式 DRBD 裝置」瞭解詳細資訊。

若要保留資料並允許在無需重新建立新資源的情況下新增新的節點,請執行以下操作:

  1. 將一個節點設定為待命模式。

  2. 更新所有節點上的所有 DRBD 套件。請參閱 第 22.2 節 「安裝 DRBD 服務」

  3. 將新節點資訊新增至資源組態中:

    • 每個 on 區段中的 node-id

    • connection-mesh 區段的 hosts 參數中會包含所有主機名稱。

    請參閱程序 22.1 「手動設定 DRBD」中的範例組態。

  4. 在使用 internal 做為 meta-disk 索引鍵時增大 DRBD 磁碟的空間。使用支援增大空間的裝置,例如 LVM。或者,改為使用外部磁碟來儲存中繼資料,並使用 meta-disk DEVICE;

  5. 根據新組態重新建立中繼資料:

    # drbdadm create-md RESOURCE
  6. 取消待命模式。

22.5 建立堆疊式 DRBD 裝置

堆疊式 DRBD 裝置包含兩部其他裝置,其中至少有一部裝置也是 DRBD 資源。換言之,DRBD 在一個現有 DRBD 資源的基礎上又另外新增了一個節點 (請參閱圖形 22.3 「資源堆疊」)。此類複製設定可用於備份和災難備援用途。

資源堆疊
圖 22.3︰ 資源堆疊

三向複製使用了非同步 (DRBD 通訊協定 A) 和同步複製 (DRBD 通訊協定 C)。非同步部分用於堆疊的資源,而同步部分用於備用資源。

您的線上環境使用堆疊裝置。例如,如果您有一個 DRBD 裝置 /dev/drbd0 和一個堆疊在其上的裝置 /dev/drbd10,將會在 /dev/drbd10 上建立檔案系統,請參閱範例 22.1 「三節點堆疊式 DRBD 資源的組態」以瞭解更多詳細資料。

範例 22.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;
  }
}

22.6 將資源層級圍籬區隔與 STONITH 配合使用

當 DRBD 複製連結中斷時,Pacemaker 會嘗試將 DRBD 資源升級至另一個節點。為防止 Pacemaker 使用過時的資料啟動服務,請在 DRBD 組態檔案中啟用資源層級圍籬區隔。

圍籬區隔規則可以使用不同的值 (請參閱手冊頁 drbdsetup--fencing 選項)。由於 SUSE Linux Enterprise High Availability Extension 叢集通常與 STONITH 裝置配合使用,因此resource-and-stonith中會使用值 範例 22.2 「使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態」

範例 22.2︰ 使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態
resource RESOURCE {
  net {
    fencing resource-and-stonith;
    # ...
  }
  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 完成了其同步程序,則會移除該條件約束。現在,叢集管理員可以不受約束地升級資源。

22.7 測試 DRBD 服務

如果安裝與組態程序按預期執行,您現在就可以執行基本的 DRBD 功能測試。此測試也有助於瞭解軟體的工作原理。

  1. 測試 alice 上的 DRBD 服務。

    1. 開啟終端機主控台,然後以 root 身分登入。

    2. 在 alice 上建立一個掛接點,如 /srv/r0

      # mkdir -p /srv/r0
    3. 掛接 drbd 裝置:

      # mount -o rw /dev/drbd0 /srv/r0
    4. 從主要節點建立檔案:

      # touch /srv/r0/from_alice
    5. 卸載 alice 上的磁碟:

      # umount /srv/r0
    6. 在 alice 上輸入以下指令,將 alice 上的 DRBD 服務降級:

      # drbdadm secondary r0
  2. 測試 bob 上的 DRBD 服務。

    1. 在 bob 上開啟終端機主控台,然後以 root 身分登入。

    2. 在 bob 上將 DRBD 服務升級為主要服務:

      # drbdadm primary r0
    3. 在 bob 上檢查 bob 是否為主要節點:

      # drbdadm status r0
    4. 在 bob 上建立一個掛接點,如 /srv/r0

      # mkdir /srv/r0
    5. 在 bob 上掛接 DRBD 裝置:

      # mount -o rw /dev/drbd0 /srv/r0
    6. 驗證您在 alice 上建立的檔案是否存在:

      # ls /srv/r0/from_alice

      此時應該會列出 /srv/r0/from_alice 檔案。

  3. 如果服務在兩個節點上都可執行,即表示 DRBD 設定已完成。

  4. 再次將 alice 設為主要節點。

    1. 在 bob 上輸入以下指令,卸下 bob 上的磁碟:

      # umount /srv/r0
    2. 在 bob 上輸入以下指令,將 bob 上的 DRBD 服務降級:

      # drbdadm secondary r0
    3. 在 alice 上將 DRBD 服務升級為主要服務:

      # drbdadm primary r0
    4. 在 alice 上檢查 alice 是否為主要節點:

      # drbdadm status r0
  5. 若要讓服務在伺服器出現問題時自動啟動並容錯移轉,您可以使用 Pacemaker/Corosync 將 DRBD 設定為高可用性服務。如需關於如何安裝和設定 SUSE Linux Enterprise 15 SP5 的資訊,請參閱第 II 部分 「組態和管理」

22.8 監控 DRBD 裝置

DRBD 隨附了可提供即時監控的公用程式 drbdmon。該公用程式會顯示所有已設定的資源及其問題。

drbdmon 顯示了一個正常的連接
圖 22.4︰ drbdmon 顯示了一個正常的連接

如果出現問題,drbdadm 會顯示錯誤訊息:

drbdmon 顯示了一個錯誤的連接
圖 22.5︰ drbdmon 顯示了一個錯誤的連接

22.9 調整 DRBD

調整 DRBD 的方法有多種:

  1. 使用外部磁碟儲存中繼資料。這可能會有所幫助,不過會降低維護方便性。

  2. 透過 sysctl 變更接收和傳送緩衝區設定,以調整網路連接。

  3. 在 DRBD 組態中變更 max-epoch-sizemax-buffers 或變更兩者。

  4. 根據您的 IO 模式增大 al-extents 值。

  5. 如果您有一個配備了 BBU (電池備份單元) 的硬體 RAID 控制器,設定 no-disk-barrierno-disk-flushes 和/或 no-md-flushes 可能會對您有所助益。

  6. 根據工作負載啟用讀取平衡。請參閱 https://www.linbit.com/en/read-balancing/,以取得詳細資料。

22.10 DRBD 疑難排解

DRBD 設定涉及眾多元件,因此導致問題發生的原因多種多樣。以下各節將介紹幾種常見的情況並提供了多種解決方案。

22.10.1 組態

如果初始的 DRBD 設定未依預期運作,則可能是由於組態有問題。

若要獲取有關組態的資訊,請執行下列步驟:

  1. 開啟終端機主控台,然後以 root 身分登入。

  2. 執行 drbdadm (帶 -d 選項) 以測試組態檔案。輸入以下指令:

    # drbdadm -d adjust r0

    adjust 選項的試執行 (dry run) 期間,drbdadm 會將 DRBD 資源的實際組態與 DRBD 組態檔案進行比較,但不會執行呼叫。檢閱輸出,以確定您瞭解所有錯誤的來源及原因。

  3. 如果 /etc/drbd.d/*drbd.conf 檔案中存在錯誤,請更正後再繼續。

  4. 如果分割區和設定正確無誤,請再次執行 drbdadm (不帶 -d 選項)。

    # drbdadm adjust r0

    此指令會將組態檔案套用於 DRBD 資源。

22.10.2 主機名稱

與核心中儲存的主機名稱相比 (請參閱 Node0 輸出),DRBD 的主機名稱區分大小寫 (node0 是不同於 uname -n 的主機)。

如果您擁有多個網路裝置,並希望使用專屬的網路裝置,主機名稱可能不會解析成所使用的 IP 位址。在這種情況下,可以使用參數 disable-ip-verification

22.10.3 TCP 連接埠 7788

如果您的系統無法連接至對等系統,可能是因為本地防火牆有問題。依預設,DRBD 使用 TCP 埠 7788 存取其他節點。請確定在兩個節點上均可存取此連接埠。

22.10.4 DRBD 裝置在重新開機後中斷連接

如果 DRBD 不知道哪個真實裝置存放的是最新資料,就會變為電腦分裂狀態。在這種情況下,各個 DRBD 子系統將會做為次要項目出現,並且不會相互連接。在這種情況下,可以在記錄資料中尋找以下訊息:

Split-Brain detected, dropping connection!

若要解決此問題,請在要丟棄資料的節點上輸入以下指令:

# drbdadm secondary r0

如果狀態為 WFconnection,請先中斷連接:

# drbdadm disconnect r0

在含有最新資料的節點上,輸入以下指令:

# drbdadm connect  --discard-my-data r0

如此會將一個節點的資料覆寫為對等節點的資料,因此兩個節點上的檢視窗將會保持一致,從而使問題得到解決。

22.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 手冊頁:drbd(8)drbdmeta(8)drbdsetup(8)drbdadm(8)drbd.conf(5)

  • 您可在 /usr/share/doc/packages/drbd-utils/drbd.conf.example 中找到註解的 DRBD 範例組態。

  • 此外,為了更方便地在整個叢集中進行儲存管理,請參閱 DRBD-Manager 上關於 https://www.linbit.com/en/drbd-manager/ 的最新宣告。

23 叢集邏輯磁碟區管理員 (叢集 LVM)

管理叢集上的共用儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Logical Volume Manager 2 (LVM2) 已進行延伸,現可支援對整個叢集中的磁碟區群組進行透明管理。在多個主機之間共用的磁碟區群組可使用與本地儲存相同的指令進行管理。

23.1 概念綜覽

系統透過不同的工具來協調叢集 LVM:

分散式鎖定管理員 (DLM)

透過全叢集鎖定來協調對多個主機間共用資源的存取。

邏輯磁碟區管理員 (LVM2)

LVM2 提供磁碟空間的虛擬池,允許將一個邏輯磁碟區靈活分佈到多個磁碟。

叢集邏輯磁碟區管理員 (叢集 LVM)

Cluster LVM 一詞表示在叢集環境中使用了 LVM2。這需要進行一些組態調整,以保護共用儲存上的 LVM2 中繼資料。自 SUSE Linux Enterprise 15 起,叢集延伸使用 lvmlockd 取代了眾所周知的 clvmd。如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令的手冊頁 (man 8 lvmlockd)。

磁碟區群組和邏輯磁碟區

磁碟區群組 (VG) 和邏輯磁碟區 (LV) 都屬於 LVM2 的基本概念。磁碟區群組是多個實體磁碟的儲存池。邏輯磁碟區屬於磁碟區群組,可視為一種彈性磁碟區,您可以在其上建立檔案系統。在叢集環境中,存在共用 VG 的概念,共用 VG 由共用儲存組成,可被多個主機同時使用。

23.2 叢集 LVM 的組態

確定符合以下要求:

  • 有共用儲存裝置可用,例如,該共用儲存裝置可透過光纖通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。

  • 確定已安裝以下套件:lvm2lvm2-lockd

  • 自 SUSE Linux Enterprise 15 起,我們使用 lvmlockd 做為 LVM2 叢集延伸,而不再使用 clvmd。請確定 clvmd 精靈未執行,否則 lvmlockd 將無法啟動。

23.2.1 建立叢集資源

在一個節點上執行以下基本步驟,以在叢集中設定共用 VG:

程序 23.1︰ 建立 DLM 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 檢查叢集資源的目前組態:

    # crm configure show
  3. 如果您已設定 DLM 資源 (以及對應的基礎群組和基礎複製品),請繼續程序 23.2 「建立 lvmlockd 資源」

    若非如此,請依照程序 19.1 「設定 DLM 的基礎群組」 所述設定 DLM 資源以及對應的基礎群組和基礎複製品。

程序 23.2︰ 建立 lvmlockd 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行以下指令以查看此資源的使用情況:

    # crm configure ra info lvmlockd
  3. 依如下所示設定 lvmlockd 資源:

    # crm configure primitive lvmlockd lvmlockd \
            op start timeout="90" \
            op stop timeout="100" \
            op monitor interval="30" timeout="90"
  4. 為了確定在每個節點上都啟動 lvmlockd 資源,請將基本資源新增至您在程序 23.1 「建立 DLM 資源」中為儲存建立的基礎群組:

    # crm configure modgroup g-storage add lvmlockd
  5. 複查所做的變更:

    # crm configure show
  6. 檢查資源是否正常執行:

    # crm status full
程序 23.3︰ 建立共用 VG 和 LV
  1. 啟動外圍程序並以 root 身分登入。

  2. 假設您已有兩個共用磁碟,並使用它們建立共用 VG:

    # vgcreate --shared vg1 /dev/sda /dev/sdb
  3. 建立 LV 但一開始不啟用它:

    # lvcreate -an -L10G -n lv1 vg1
程序 23.4︰ 建立 LVM-activate 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行以下指令以查看此資源的使用情況:

    # crm configure ra info LVM-activate

    此資源負責管理 VG 的啟用。在共用 VG 中,有兩種不同的 LV 啟用模式:獨佔模式和共用模式。獨佔模式是預設模式,通常應在 ext4 等本地檔案系統使用 LV 時使用。共用模式僅應用於 OCFS2 等叢集檔案系統。

  3. 設定資源以管理您 VG 的啟用。根據您的案例,選擇下列其中一個選項:

    • 對於本地檔案系統使用,請使用獨佔啟用模式:

      # crm configure primitive vg1 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 群組:

      # crm configure primitive vg1 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
      # crm configure modgroup g-storage add vg1
  4. 檢查資源是否正常執行:

    # crm status full

23.2.2 案例:在 SAN 上將叢集 LVM 與 iSCSI 搭配使用

以下案例將使用兩個 SAN Box,它們會將 iSCSI 目標輸出至多個用戶端。圖形 23.1 「使用叢集 LVM 的共用磁碟設定」 中說明了一般的情況。

使用叢集 LVM 的共用磁碟設定
圖 23.1︰ 使用叢集 LVM 的共用磁碟設定
警告
警告:資料遺失

以下程序將損毀磁碟上的所有資料。

開始請只設定一個 SAN Box。每個 SAN Box 需要輸出自己的 iSCSI 目標。請執行下列步驟:

程序 23.5︰ 設定 iSCSI 目標 (SAN)
  1. 執行 YaST,然後按一下 網路服務 ›  iSCSI LIO 目標 ,啟動 iSCSI 伺服器模組。

  2. 如果您希望電腦每次開機時啟動 iSCSI 目標,請選擇開機時,否則請選擇手動

  3. 如果有防火牆在執行,則啟用在防火牆中開啟埠

  4. 切換至全域索引標籤。如果需要驗證,請啟用內送及/或外送驗證。在本例中,我們選取的是無驗證

  5. 新增新的 iSCSI 目標:

    1. 切換至目標索引標籤。

    2. 按一下新增

    3. 輸入目標名稱。名稱需要採用以下格式:

      iqn.DATE.DOMAIN

      如需格式的詳細資訊,請參閱 http://www.ietf.org/rfc/rfc3720.txt 上的 Section 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name)

    4. 如果需要描述性更強的名稱,可以進行變更,但要確保每個目標的識別碼都是唯一的。

    5. 按一下新增

    6. 路徑中輸入裝置名稱,並使用Scsiid

    7. 按兩次下一步

  6. 出現警告對話方塊時,按一下加以確認。

  7. 開啟組態檔案 /etc/iscsi/iscsid.conf,將參數 node.startup 變更為 automatic

接著,按如下所示設定 iSCSI 啟動器:

程序 23.6︰ 設定 iSCSI 啟動器
  1. 執行 YaST,然後按一下網路服務 ›  iSCSI 啟動器

  2. 如果您要在電腦開機時啟動 iSCSI 啟動器,請選擇開機時,否則請設定手動

  3. 切換至探查索引標籤,然後按一下探查按鈕。

  4. 新增 iSCSI 目標的 IP 位址和連接埠 (請參閱程序 23.5 「設定 iSCSI 目標 (SAN)」)。一般不用變更連接埠,使用其預設值即可。

  5. 如果使用驗證,請插入內送及外送的使用者名稱和密碼,否則請啟用無驗證

  6. 選取下一步。清單中會顯示找到的連線。

  7. 按一下完成繼續。

  8. 開啟外圍程序,以 root 身分登入。

  9. 測試 iSCSI 啟動器是否已正常啟動:

    # iscsiadm -m discovery -t st -p 192.168.3.100
    192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
  10. 建立工作階段:

    # 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

程序 23.7︰ 建立共用磁碟區群組
  1. 在其中一個您於 程序 23.6 「設定 iSCSI 啟動器」 中執行了 iSCSI 啟動器的節點上開啟 root 外圍程序。

  2. 在磁碟 /dev/sdd/dev/sde 上建立共用磁碟區群組:

    # vgcreate --shared testvg /dev/sdd /dev/sde
  3. 根據需要建立邏輯磁碟區:

    # 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
          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
  5. 使用 vgs 指令檢查磁碟區群組的共用狀態:

    # vgs
      VG       #PV #LV #SN Attr   VSize     VFree
      vgshared   1   1   0 wz--ns 1016.00m  1016.00m

    Attr 欄顯示磁碟區屬性:在此範例中,磁碟區群組可寫入 (w)、可調整大小 (z),配置規則為一般 (n),並且其為共用資源 (s)。如需詳細資料,請參閱 vgs 的手冊頁。

建立磁碟區並啟動資源後,/dev/testvg 下會顯示新的裝置名稱,例如 /dev/testvg/lv1。這表示 LV 已啟用,可供使用。

23.2.3 案例:將叢集 LVM 與 DRBD 搭配使用

如果您的資料中心分佈在城市、國家甚至大陸的不同位置,可以參照以下案例。

程序 23.8︰ 建立使用 DRBD 的叢集感知磁碟區群組
  1. 建立主要/次要 DRBD 資源:

    1. 首先,如程序 22.1 「手動設定 DRBD」 中所述將一部 DRBD 裝置設定成主要或次要裝置。確定兩個節點上的磁碟狀態均為 up-to-date。使用 drbdadm status 確認是否如此。

    2. 將以下選項新增至組態檔案 (通常類似於 /etc/drbd.d/r0.res):

      resource r0 {
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 將變更後的組態檔案複製到另一個節點,例如:

      # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 兩個節點上執行以下指令:

      # drbdadm disconnect r0
      # drbdadm connect r0
      # drbdadm primary r0
    5. 檢查節點的狀態:

      # drbdadm status r0
  2. 將 lvmlockd 資源做為複製品包含在 Pacemaker 組態中,並使它依賴於 DLM 複製品。如需詳細指示,請參閱程序 23.1 「建立 DLM 資源」。繼續之前,請先確定已在叢集中成功啟動這些資源。您可以使用 crm status 或 Web 介面檢查執行中的服務。

  3. 使用 pvcreate 指令為 LVM 備妥實體磁碟區。例如,在裝置 /dev/drbd_r0 上,應使用如下指令:

    # pvcreate /dev/drbd_r0
  4. 建立共用磁碟區群組:

    # vgcreate --shared testvg /dev/drbd_r0
  5. 根據需要建立邏輯磁碟區。例如,使用以下指令建立一個 4 GB 的邏輯磁碟區:

    # lvcreate --name lv1 -L 4G testvg
  6. 現在,VG 中的邏輯磁碟區便可做為掛接的檔案系統或原始用途使用。請確保使用它們的服務具有正確的相依性,這樣才能在啟動 VG 後對它們進行並存和排序處理。

完成這些組態設定步驟後,便能像在任何獨立工作站上一般進行 LVM2 組態設定。

23.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. 寫入組態檔案並將其複製到所有叢集節點。

23.4 從鏡像 LV 線上移轉至叢集 MD

從 SUSE Linux Enterprise High Availability Extension 15 開始,叢集 LVM 中的 cmirrord 已被取代。我們強烈建議將叢集中的鏡像邏輯磁碟區移轉至叢集 MD。叢集 MD 表示「叢集多裝置」,是適用於叢集的軟體式 RAID 儲存解決方案。

23.4.1 移轉之前的範例設定

假設您採用以下範例設定:

  • 您有一個雙節點叢集,它由節點 alicebob 組成。

  • 名為 test-lv 的鏡像邏輯磁碟區是從名為 cluster-vg2 的磁碟區群組建立的。

  • 磁碟區群組 cluster-vg2 由磁碟 /dev/vdb/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_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
重要
重要:避免移轉失敗

在啟動移轉程序之前,請檢查邏輯磁碟區和實體磁碟區的容量與使用率。如果邏輯磁碟區使用了所有實體磁碟區容量,移轉可能會失敗,並且目標磁碟區上會顯示 insufficient free space 錯誤。如何防止這種移轉失敗取決於鏡像記錄所用的選項:

  • 鏡像記錄本身是否已鏡像 (mirrored 選項),並且已在鏡像根所在的同一個裝置上進行配置?: (例如,如果您依照 Administration Guide for those versions 所述,為 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 選項)?: 在開始移轉之前,請增大實體磁碟區的大小,或減小邏輯磁碟區的大小 (以便為實體磁碟區釋放更多的空間)。

23.4.2 將鏡像 LV 移轉至叢集 MD

以下程序以第 23.4.1 節 「移轉之前的範例設定」為基礎。請根據您的設定調整指令,並相應地取代 LV、VG、磁碟和叢集 MD 裝置的名稱。

移轉程序完全不會造成停機。在移轉期間仍可掛接檔案系統。

  1. 在節點 alice 上執行以下步驟:

    1. 將鏡像邏輯磁碟區 test-lv 轉換為線性邏輯磁碟區:

      # lvconvert -m0 cluster-vg2/test-lv /dev/vdc
    2. 從磁碟區群組 cluster-vg2 中移除實體磁碟區 /dev/vdc

      # vgreduce cluster-vg2 /dev/vdc
    3. 從 LVM 中移除以下實體磁碟區:

      # 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

      # 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 裝置:

    # mdadm --assemble md0 /dev/vdc

    如果您的叢集由兩個以上的節點組成,請在該叢集中的所有剩餘節點上執行此步驟。

  3. 回到節點 alice

    1. 將 MD 裝置 /dev/md0 啟始化為與 LVM 配合使用的實體磁碟區:

      # pvcreate /dev/md0
    2. 將 MD 裝置 /dev/md0 新增至磁碟區群組 cluster-vg2

      # vgextend cluster-vg2 /dev/md0
    3. 將磁碟 /dev/vdb 中的資料移至 /dev/md0 裝置:

      # pvmove /dev/vdb /dev/md0
    4. 從磁碟區 group cluster-vg2 中移除實體磁碟區 /dev/vdb

      # vgreduce cluster-vg2 /dev/vdb
    5. 從裝置中移除標籤,使 LVM 不再將該裝置識別為實體磁碟區:

      # pvremove /dev/vdb
    6. /dev/vdb 新增至 MD 裝置 /dev/md0

      # mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb

23.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

23.5 更多資訊

如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令的手冊頁 (man 8 lvmlockd)。

完整資訊可參閱 Pacemaker 郵寄清單 (網址為 http://www.clusterlabs.org/wiki/Help:Contents)。

24 叢集多裝置 (叢集 MD)

叢集多裝置 (叢集 MD) 是一項基於軟體的叢集 RAID 儲存解決方案。目前,叢集 MD 為叢集提供了 RAID1 鏡像的備援。在 SUSE Linux Enterprise High Availability Extension15 SP5 中,隨附了 RAID10 做為技術預覽。如果您想嘗試 RAID,請在相關的 mirror 指令中使用 1010 取代 mdadm。本章介紹如何建立和使用叢集 MD。

24.1 概念綜覽

叢集 MD 提供了在叢集環境中使用 RAID1 的支援。每個節點都會存取叢集 MD 使用的磁碟或裝置。如果叢集 MD 的一部裝置失敗,則在執行時期可以由另一部裝置取代它,並且系統會對其進行重新同步以提供相同量的備援。叢集 MD 需要使用 Corosync 和分散式鎖定管理員 (DLM) 進行協調和通訊。

叢集 MD 裝置不會如同其他常規 MD 裝置一般在開機時自動啟動。需要使用資源代理程式來啟動叢集裝置,以便確定 DLM 資源已啟動。

24.2 建立叢集化 MD RAID 裝置

要求
  • 一個安裝了 Pacemaker 的執行中叢集。

  • DLM 的資源代理程式 (請參閱第 19.2 節 「設定 DLM 叢集資源」)。

  • 至少兩個共用磁碟裝置。您可以使用另外一部裝置做為備用裝置,以便在裝置發生故障時自動進行容錯移轉。

  • 安裝的套件 cluster-md-kmp-default

此程序使用 /dev/sdX 裝置名稱做為範例。為了提高穩定性,請使用永久的裝置名稱,例如 /dev/disk/by-id/DEVICE_ID

  1. 請確認 DLM 資源在叢集的每個節點上都正常執行,並使用以下指令檢查資源狀態:

    # crm_resource -r dlm -W
  2. 建立叢集 MD 裝置:

    • 如果您沒有現有的常規 RAID 裝置,請使用以下指令在執行 DLM 資源的節點上建立叢集 MD 裝置:

      # mdadm --create /dev/md0 --bitmap=clustered \
         --metadata=1.2 --raid-devices=2 --level=mirror /dev/sda /dev/sdb

      由於叢集 MD 只能與 1.2 版的中繼資料配合使用,因此建議使用 --metadata 選項來指定版本。如需其他有用選項的資訊,請參閱 mdadm 手冊頁。在 /proc/mdstat 中監控重新同步進度。

    • 如果您有現有的常規 RAID,請先清除現有點陣圖,然後再建立叢集點陣圖:

      # mdadm --grow /dev/mdX --bitmap=none
      # mdadm --grow /dev/mdX --bitmap=clustered
    • (選擇性) 若要建立帶有備用裝置 (用於自動容錯移轉) 的叢集 MD 裝置,請在一個叢集節點上執行以下指令:

      # 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 路徑:

    # mdadm --detail --scan

    該 UUID 必須與超級區塊中儲存的 UUID 相符。如需 UUID 的詳細資料,請參閱 mdadm.conf 手冊頁。

  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
    }

24.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 提交您的變更。

24.4 新增裝置

若要將某部裝置新增到現有的使用中叢集 MD 裝置,請先使用指令 確認該裝置在每個節點上均可見cat /proc/mdstat。如果裝置不可見,指令將會失敗。

在一個叢集節點上使用以下指令:

# mdadm --manage /dev/md0 --add /dev/sdc

新增的新裝置的行為取決於叢集 MD 裝置的狀態:

  • 如果只有一個鏡像裝置處於使用中狀態,則新裝置將會成為鏡像裝置中的第二部裝置,並且會啟動復原程序。

  • 如果叢集 MD 裝置的兩部裝置都處於使用中狀態,則新增的裝置將會成為備用裝置。

24.5 重新新增暫時失敗的裝置

故障往往只發生於一時,並且僅限於一個節點。如果在執行 I/O 操作期間有任何節點發生了故障,則會在整個叢集中將相應裝置標示為失敗。

例如,其中一個節點發生纜線故障,可能就會出現這種情況。修正此問題後,您可以重新新增該裝置。與新增新裝置會同步整部裝置不同,這樣只會同步過時的組件。

若要重新新增裝置,請在一個叢集節點上執行以下指令:

# mdadm --manage /dev/md0 --re-add /dev/sdb

24.6 移除裝置

在執行時期移除裝置以將其取代之前,請執行以下操作:

  1. 檢查 /proc/mdstat 以確定裝置處於失敗狀態。查看裝置前面有無 (F)

  2. 在一個叢集節點上執行以下指令,以使裝置失敗:

    # mdadm --manage /dev/md0 --fail /dev/sda
  3. 在一個叢集節點上使用以下指令移除失敗的裝置:

    # mdadm --manage /dev/md0 --remove /dev/sda

24.7 在災難備援站點將叢集 MD 組合成一般 RAID

進行災難備援時,您可能會遇到下面的情況:災難備援站點的基礎架構中沒有 Pacemaker 叢集堆疊,但應用程式仍需存取現有叢集 MD 磁碟上或備份中的資料。

您可以將叢集 MD RAID 轉換為一般 RAID,方法是使用 --assemble 操作和 -U no-bitmap 選項相應地變更 RAID 磁碟的中繼資料。

下面的範例介紹了如何組合資料復原站點上的所有陣列:

while read i; do
   NAME=`echo $i | sed 's/.*name=//'|awk '{print $1}'|sed 's/.*://'`
   UUID=`echo $i | sed 's/.*UUID=//'|awk '{print $1}'`
   mdadm -AR "/dev/md/$NAME" -u $UUID -U no-bitmap
   echo "NAME =" $NAME ", UUID =" $UUID ", assembled."
done < <(mdadm -Es)

25 Samba 叢集

叢集化 Samba 伺服器為您的異質網路提供了高可用性解決方案。本章介紹了一些背景知識並說明如何設定叢集化 Samba 伺服器。

25.1 概念綜覽

Samba 使用 Trivial Database (TDB) 已有多年。TDB 允許多個應用程式同時執行寫入操作。為了確保所有寫入操作成功執行且彼此不發生衝突,TDB 使用了內部鎖定機制。

Cluster Trivial Database (CTDB) 是現有 TDB 的一個小延伸功能。專案將 CTDB 描述為Samba 和其他專案用於儲存暫存資料之 TDB 資料庫的叢集實作

每個叢集節點都執行一個本地 CTDB 精靈。Samba 會與其本地 CTDB 精靈通訊,而不是直接寫入其 TDB。精靈透過網路交換中繼資料,但實際的讀寫操作是在一個具有快速儲存的本地副本上執行的。CTDB 的概念請參閱圖形 25.1 「CTDB 叢集的結構」

注意
注意:CTDB 僅用於 Samba

目前實作的 CTDB 資源代理程式將 CTDB 設定為僅管理 Samba。包括 IP 容錯移轉在內的其他內容應使用 Pacemaker 進行設定。

只有完全同質的叢集支援 CTDB。例如,叢集中的所有節點都需要具有相同的架構。不能混用 x86 與 AMD64。

CTDB 叢集的結構
圖 25.1︰ CTDB 叢集的結構

叢集化的 Samba 伺服器必須共用某些資料:

  • 將 Unix 使用者及群組 ID 與 Windows 使用者及群組相關聯的對應表。

  • 使用者資料庫必須在所有節點之間同步。

  • Windows 網域中成員伺服器的加入資訊必須在所有節點上都可用。

  • 中繼資料 (例如使用中 SMB 工作階段、共用連接以及各類鎖定) 需在所有節點上都可用。

目的是讓擁有 N+1 個節點的叢集化 Samba 伺服器快於僅有 N 個節點的 Samba 伺服器。一個節點不會慢於一部未叢集化的 Samba 伺服器。

25.2 基本組態

注意
注意:變更的組態檔案

CTDB 資源代理程式會自動變更 /etc/sysconfig/ctdb。使用 crm ra info CTDB 可列出可為 CTDB 資源指定的所有參數。

若要設定叢集化的 Samba 伺服器,請執行下列步驟:

程序 25.1︰ 設定基本的叢集化 Samba 伺服器
  1. 準備叢集:

    1. 繼續操作之前,請確定以下套件均已安裝:ctdbtdb-toolssamba (smbnmb 資源需要這些套件)。

    2. 依本指南中的第 II 部分 「組態和管理」所述設定叢集 (Pacemaker、OCFS2)。

    3. 設定並掛接共用檔案系統 (如 OCFS2),例如掛接到 /srv/clusterfs 上。如需詳細資訊,請參閱第 20 章 「OCFS2

    4. 如果想要開啟 POSIX ACL,則將其啟用:

      • 對於新 OCFS2 檔案系統,使用:

        # mkfs.ocfs2 --fs-features=xattr ...
      • 對於現有的 OCFS2 檔案系統,使用:

        # tunefs.ocfs2 --fs-feature=xattr DEVICE

        確定在檔案系統資源中指定了 acl 選項。按如下所示使用 crm 外圍程序:

        crm(live)configure# primitive ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
    5. 確定 smbctdbnmb 服務已停用:

      # systemctl disable ctdb
      # systemctl disable smb
      # systemctl disable nmb
    6. 在所有節點上開啟防火牆的連接埠 4379。這是為了使 CTDB 能夠與其他叢集節點通訊。

  2. 在共用檔案系統上建立一個 CTDB 鎖定目錄:

    # 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 將組態檔案複製到所有節點:

    # csync2 -xv

    如需詳細資訊,請參閱 程序 4.9 「使用 Csync2 同步組態檔案」

  6. 將 CTDB 資源新增至叢集:

    # crm configure
    crm(live)configure# primitive ctdb 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 inf: 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 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 位址。這些位址通常是不需要的,但有助於實現負載平衡。如需有關此主題的詳細資訊,請參閱第 17.2 節 「使用 Linux 虛擬伺服器設定負載平衡」

  8. 提交您的變更:

    crm(live)configure# commit
  9. 檢查結果:

    # 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 用戶端上執行以下指令,確定是否可以將檔案複製到系統或從系統複製檔案:

    # smbclient //192.168.2.222/myshare

25.3 加入 Active Directory 網域

Active Directory (AD) 是適用於 Windows 伺服器系統的目錄服務。

下面的指示概述了如何將 CTDB 叢集加入 Active Directory 網域:

  1. 程序 25.1 「設定基本的叢集化 Samba 伺服器」 所述建立 CTDB 資源。

  2. 安裝 samba-winbind 套件。

  3. 停用 winbind 服務:

    # systemctl disable winbind
  4. 定義 winbind 叢集資源:

    # 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 群組,並在 nmb 與·smb 資源之間插入 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. 程序 25.2 「加入 Active Directory」

最後,將您的叢集加入 Active Directory 伺服器:

程序 25.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.7 節 「將組態傳輸至所有節點」

  2. 執行 YaST 並從網路服務項目中開啟Windows 網域成員模組。

  3. 輸入網域或工作群組設定,然後按一下確定完成操作。

25.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 表更新。

若需更多資訊,請參閱https://gitlab.com/wireshark/wireshark/-/wikis/home

若要對叢集檔案系統的某些方面進行測試,請執行下列步驟:

程序 25.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 指令。在回到單一節點的情況之前,應會看到鎖定率不斷提高。如果未發生預期的情況,請參閱第 20 章 「OCFS2 中的詳細資訊。

25.5 更多資訊

26 使用 ReaR (Relax-and-Recover) 實現災難備援

Relax-and-Recover (ReaR) 是供系統管理員使用的災難備援架構。Rear 是一個 Bash 程序檔集合,您需要依據要在發生災難時加以保護的特定線上環境調整這些程序檔。

沒有任何災難備援解決方案能夠現成地解決問題。因此,必須在災難發生做好準備。

26.1 概念綜覽

以下幾節介紹了一般性的災難備援概念,以及使用 ReaR 成功實現災難備援所需執行的基本步驟。另外還提供了有關 ReaR 要求、要注意的一些限制、各種方案和備份工具的指南。

26.1.1 建立災難備援計畫

在最壞的情況發生之前採取措施:分析 IT 基礎架構是否存在任何重大風險,評估您的預算,並建立災難備援計畫。如果您還沒有現行的災難備援計畫,請先瞭解關於以下每個步驟的資訊:

  • 風險分析: 對您的基礎結構進行一次全面的風險分析。列出所有可能存在的威脅並評估其嚴重性。判斷這些威脅發生的可能性,並對它們排列優先順序。建議進行一個簡單的分類:可能性與影響。

  • 預算規劃: 分析的結果會是一個綜覽,告訴您哪些風險可以承受,哪些風險對企業影響很大。問問自己,怎樣才能將風險將至最低,這需要付出多大的代價。根據公司的規模大小,將整個 IT 預算的 2% 到 50% 花費在災難備援上。

  • 制訂災難備援計畫: 製作檢查清單、測試程序、建立並指定優先順序,以及清查 IT 基礎結構。定義當基礎結構中有服務失敗時,要如何處理問題。

  • 測試: 定義完一份詳細的計劃後,需對其進行測試。一年至少測試一次。所使用的測試硬體應與主要 IT 基礎結構相同。

26.1.2 災難備援意味著什麼?

如果線上環境中的某個系統已經損毀 (可能出於任何原因,例如,硬體損壞、組態不當或軟體問題),您需要重新建立該系統。可以在相同的硬體或者相容的替代硬體上重新建立。重新建立系統並不只是代表著從備份中還原檔案,還包括準備系統的儲存區 (與檔案系統、分割區和掛接點相關),以及重新安裝開機載入程式。

26.1.3 災難備援如何與 ReaR 配合運作?

在系統正常運作時建立檔案的備份,並在復原媒體上建立復原系統。該復原系統包含一個復原安裝程式。

當系統已經損毀時,您可以更換受損的硬體 (如果需要),將復原系統從復原媒體開機,然後啟動復原安裝程式。復原安裝程式會重新建立系統:首先,它會準備儲存區 (分割區、檔案系統、掛接點),然後從備份中還原檔案。最後,它會重新安裝開機載入程式。

26.1.4 ReaR 要求

若要使用 ReaR,您至少需要兩個相同的系統:用來執行生產環境的機器,以及相同的測試機器。這裡所指的相同,舉例而言就是使用相同核心驅動程式的網路卡,可以用其中一個來取代另一個。

警告
警告:需要相同的驅動程式

如果某個硬體元件使用的驅動程式與生產環境中所用的驅動程式不同,ReaR 不會將該元件視為相同。

26.1.5 ReaR 版本更新

SUSE Linux Enterprise High Availability Extension 15 SP5 隨附 ReaR 版本 2.3,由 rear23a 套件提供。

注意
注意:在變更記錄中尋找重要資訊

有關錯誤修復、不相容性及其他問題的任何資訊都可在套件的變更記錄中找到。如果需要重新驗證災難備援程序,建議您另外也要檢閱 ReaR 的較新套件版本。

您需要瞭解 ReaR 的以下問題:

  • 您至少需要有 ReaR 1.18.a 版本和 ebiso 套件,才能在 UEFI 系統上實現災難備援。只有此版本支援新輔助程式工具 /usr/bin/ebiso。此輔助程式工具用於建立 UEFI 可開機 ReaR 系統 ISO 影像。

  • 如果您使用一個 ReaR 版本實作的災難備援程序已經過測試並且功能完備,請不要更新 ReaR。請保留該 ReaR 套件,並且不要變更您的災難備援方法。

  • ReaR 的版本更新是以獨立套件的形式提供的,這些套件在設計上有意彼此衝突,目的是防止另一個版本意外地取代所安裝的版本。

在以下情況下,您需要全面重新驗證現有的災難備援程序:

  • 針對每個 ReaR 版本更新。

  • 手動更新 ReaR 時。

  • 針對 ReaR 使用的每個軟體。

  • 更新底層系統元件 (例如 btrfsparted 及類似元件) 時。

26.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

26.1.7 方案和備份工具

ReaR 能夠建立可從本地媒體 (例如硬碟、隨身碟、DVD/CD-R) 開機或透過 PXE 開機的災難備援系統 (包括系統專屬的復原安裝程式)。可以依照範例 26.1所述,將備份資料儲存在網路檔案系統 (例如 NFS) 中。

ReaR 不會取代檔案備份,而是對其進行補充。依預設,ReaR 支援一般 tar 指令,以及多種協力廠商備份工具 (例如 Tivoli Storage Manager、QNetix Galaxy、Symantec NetBackup、EMC NetWorker 或 HP DataProtector)。如需將 ReaR 與用做備份工具的 EMC NetWorker 配合使用的範例組態,請參閱範例 26.2

26.1.8 基本步驟

若要在發生災難時使用 ReaR 成功進行復原,需要執行以下基本步驟:

設定 ReaR 和您的備份解決方案

這會涉及到一些任務,例如,編輯 ReaR 組態檔案、調整 Bash 程序檔,以及設定您要使用的備份解決方案。

建立復原安裝系統

在要保護的系統處於正常運作狀態時,使用 rear mkbackup 指令建立檔案備份,並產生包含系統特定 ReaR 復原安裝程式的復原系統。

測試復原程序

每次使用 ReaR 建立災難備援媒體時,都要全面測試災難備援程序。所用測試機器上的硬體必須與生產環境中的硬體相同。如需詳細資訊,請參閱第 26.1.4 節 「ReaR 要求」

從災難中復原

發生災難後,更換任何受損的硬體 (如果需要)。然後,將 ReaR 復原系統開機,並使用 rear recover 指令啟動復原安裝程式。

26.2 設定 ReaR 和您的備份解決方案

若要設定 ReaR,您至少需要編輯 ReaR 組態檔案 /etc/rear/local.conf,此外可以視需要編輯屬於 ReaR 架構一部分的 Bash 程序檔。

具體而言,您需要定義 ReaR 應該執行的以下任務:

  • 當您的系統是透過 UEFI 開機時: 如果您的系統是透過 UEFI 開機載入程式開機,請安裝套件ebiso,並將下行內容新增至 /etc/rear/local.conf 中:

    ISO_MKISOFS_BIN="/usr/bin/ebiso"

    如果您的系統使用 UEFI 安全開機功能開機,還必須新增下行內容:

    SECURE_BOOT_BOOTLOADER="/boot/efi/EFI/BOOT/shim.efi"

    如需用於 UEFI 的 ReaR 組態變數的詳細資訊,請參閱 /usr/share/rear/conf/default.conf 檔案。

  • 如何備份檔案以及如何建立和儲存災難備援系統: 這需要在 /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 手冊頁。

您應該使用一個相符的範例組態檔案做為範本,然後根據需要對其進行調整,以此建立您的特定組態檔案。從數個範例組態檔案中複製各選項,然後將其貼至與特定系統相符的特定 /etc/rear/local.conf 檔案中。請勿使用原始的範例組態檔案,因為這些檔案提供了可能用於特定設定的變數綜覽。

範例 26.1︰ 使用 NFS 伺服器儲存檔案備份

ReaR 可以在多種不同的情況下使用。以下範例使用 NFS 伺服器做為檔案備份的儲存區。

  1. 依照 Administration Guide for SUSE Linux Enterprise Server 15 SP5 所述,使用 YaST 設定 NFS 伺服器。

  2. /etc/exports 檔案中定義 NFS 伺服器的組態。確定 NFS 伺服器上的目錄 (要儲存備份資料的位置) 具有適當的掛接選項。例如:

    /srv/nfs *([...],rw,no_root_squash,[...])

    用 NFS 伺服器上的備份資料路徑取代 /srv/nfs,並調整掛接選項。您可能需要 no_root_squash,因為 rear mkbackup 指令以 root 身分執行。

  3. 調整組態檔案 /etc/rear/local.conf 中的各個 BACKUP 參數,以便讓 ReaR 將檔案備份儲存在相應的 NFS 伺服器上。已安裝系統中的 /usr/share/rear/conf/examples/SLE*-example.conf 下提供了範例。

範例 26.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"

26.3 建立復原安裝系統

依照第 26.2 節所述設定 ReaR 後,使用以下指令建立復原安裝系統 (包括 ReaR 復原安裝程式) 和檔案備份:

rear -d -D mkbackup

該指令會執行以下步驟:

  1. 分析目標系統並收集資訊,尤其是關於磁碟配置 (分割區、檔案系統、掛接點) 和開機載入程式的資訊。

  2. 使用第一步收集的資訊建立一個可開機的復原系統。產生的 ReaR 復原安裝程式專用於在發生災難時要保護的系統。使用該安裝程式只能重新建立這個特定的系統。

  3. 呼叫設定的備份工具來備份系統和使用者檔案。

26.4 測試復原程序

建立復原系統後,在具有相同硬體的測試機器上測試復原程序。另請參閱 第 26.1.4 節 「ReaR 要求」.確定測試機器的設定正確,並且可以取代您的主要機器運作。

警告
警告:使用相同硬體執行全面測試

必須在機器上全面測試災難備援程序。請定期測試復原程序,以確定一切如預期運作。

程序 26.1︰ 在測試機器上執行災難備援
  1. 將您在第 26.3 節中建立的復原系統燒錄到 DVD 或 CD 上,以建立復原媒體。或者,您可以透過 PXE 使用網路開機。

  2. 從復原媒體將測試機器開機。

  3. 從功能表中,選取復原

  4. root 的身分登入 (不需要密碼)。

  5. 輸入以下指令來啟動復原安裝程式:

    rear -d -D recover

    如需在此過程中 ReaR 所執行步驟的詳細資料,請參閱復原程序

  6. 完成復原程序後,檢查是否已成功地重新建立系統,並且該系統是否可在線上環境中取代原始系統。

26.5 從災難中復原

如果發生災難,請視需要更換任何受損的硬體。然後依照程序 26.1所述,使用已修復的機器 (或使用已經測試並可取代原始系統運作的相同機器) 繼續操作。

rear recover 指令會執行以下步驟:

復原程序
  1. 還原磁碟配置 (分割區、檔案系統和掛接點)。

  2. 從備份中還原系統和使用者檔案。

  3. 還原開機載入程式。

26.6 更多資訊

第 IV 部分 維護與升級

27 執行維護任務

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

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

27.1 準備和完成維護工作

使用以下指令可啟動、停止叢集或檢視叢集狀態:

crm cluster start [--all]

在一個或所有節點上啟動叢集服務

crm cluster stop [--all]

在一個或所有節點上停止叢集服務

crm cluster restart [--all]

在一個或所有節點上重新啟動叢集服務

crm cluster status

檢視叢集堆疊的狀態

請以 root 使用者身分或擁有所需權限的使用者身分執行上述指令。

將某個叢集節點關閉或重新開機 (或停止節點上的叢集服務) 時,會觸發以下程序:

  • 該節點上執行的資源會停止,或移出該節點。

  • 如果停止資源的操作失敗或逾時,STONITH 機制會圍籬區隔該節點並將其關閉。

警告
警告:資料遺失風險

如果您需要執行測試或維護工作,請執行下面的一般步驟。

如果不執行,有可能會產生不利的負面影響,例如,資源不循序啟動、CIB 在叢集節點之間不同步,甚至遺失資料。

  1. 開始前,請選擇第 27.2 節 「用於維護任務的不同選項」中所述的適當選項。

  2. 請使用 Hawk2 或 crmsh 套用此選項。

  3. 執行維護任務或測試。

  4. 完成後,請將資源、節點或叢集恢復正常運作。

27.2 用於維護任務的不同選項

Pacemaker 提供了以下用於執行系統維護的選項:

將叢集置於維護模式

使用全域叢集內容 maintenance-mode 可以一次性將所有資源置於維護狀態。叢集將停止監控這些資源,因而不知道它們的狀態。只有 Pacemaker 的資源管理功能會處於停用狀態。Corosync 和 SBD 仍會正常執行。請對涉及叢集資源的所有任務都使用維護模式。對於涉及基礎架構 (例如儲存或網路) 的任何任務,最安全的方法是完全停止叢集服務。請參閱停止整個叢集的叢集服務

停止整個叢集的叢集服務

一次性停止所有節點上的叢集服務可以關閉叢集,同時避免逐個關閉各個節點將會發生的大量資源移轉。由於不存在需要將資源移轉至的節點,因此所有資源都將停止。

將節點置於維護模式

此選項可以一次性將特定節點上執行的所有資源置於維護狀態。叢集將停止監控這些資源,因此不知道它們的狀態。

將節點置於待命模式

處於待命模式的節點不再能夠執行資源。該節點上執行的所有資源都會移出或停止 (如果沒有其他節點可用於執行資源)。另外,該節點上的所有監控操作都會停止 (設定了 role="Stopped" 的操作除外)。

如果您需要停止叢集中的某個節點,同時繼續提供另一個節點上執行的服務,則可以使用此選項。

停止節點上的叢集服務

此選項可停止單個節點上的所有叢集服務。該節點上執行的所有資源都會移出或停止 (如果沒有其他節點可用於執行資源)。如果停止資源的操作失敗或逾時,將會圍籬區隔該節點。

將資源置於維護模式

為某個資源啟用此模式後,將不會針對該資源觸發監控操作。

如果您需要手動調整此資源所管理的服務,並且不希望叢集在此期間對該資源執行任何監控操作,則可以使用此選項。

將資源置於不受管理模式

使用 is-managed 中繼屬性可以暫時釋放某個資源,使其不受叢集堆疊的管理。這表示您可以手動調整此資源管理的服務 (例如,調整任何元件)。不過,叢集將繼續監控該資源,並繼續報告任何錯誤。

如果您希望叢集同時停止監控該資源,請改為使用依資源維護模式 (請參閱將資源置於維護模式)。

27.3 將叢集置於維護模式

警告
警告:維護模式只會停用 Pacemaker

將叢集置於維護模式時,只有 Pacemaker 的資源管理功能會停用。Corosync 和 SBD 仍會正常執行。這可能會引發圍籬區隔操作,具體取決於您的維護任務。

請對涉及叢集資源的所有任務都使用維護模式。對於涉及基礎架構 (例如儲存或網路) 的任何任務,最安全的方法是完全停止叢集服務。請參閱 第 27.4 節 「停止整個叢集的叢集服務」

若要在 crm 外圍程序中將叢集置於維護模式,請使用以下指令︰

# crm configure property maintenance-mode=true

若要在完成維護工作後將叢集恢復正常模式,請使用以下指令:

# crm configure property maintenance-mode=false
程序 27.1︰ 使用 Hawk2 將叢集置於維護模式
  1. 啟動網頁瀏覽器並依第 5.4.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集組態

  3. CRM 組態群組中,從空白下拉式方塊中選取 maintenance-mode 屬性,然後按一下加號圖示新增該屬性。

  4. 若要設定 maintenance-mode=true,請選取 maintenance-mode 旁邊的核取方塊,並確認您所做的變更。

  5. 完成針對整個叢集的維護任務後,停用 maintenance-mode 屬性旁邊的核取方塊。

    從此刻起,High Availability Extension 會再次接管叢集管理工作。

27.4 停止整個叢集的叢集服務

若要一次性停止所有節點上的叢集服務,請使用以下指令:

# crm cluster stop --all

若要在完成維護工作後再次啟動叢集服務,請使用以下指令:

# crm cluster start --all
警告
警告:不保證能正常關閉

單獨使用 --all 選項不能保證可將叢集正常關閉,因為應用程式層級的資源停止失敗可能會觸發非預期的圍籬區隔。如果應用程式是關鍵型應用程式,請考慮先停止這些應用程式,然後再停止整個叢集的叢集服務。

27.5 將節點置於維護模式

若要在 crm 外圍程序中將節點置於維護模式,請使用以下指令︰

# crm node maintenance NODENAME

若要在完成維護工作後將節點恢復正常模式,請使用以下指令:

# crm node ready NODENAME
程序 27.2︰ 使用 Hawk2 將節點置於維護模式
  1. 啟動網頁瀏覽器並依第 5.4.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集狀態

  3. 在其中一個節點檢視窗中,按一下節點旁邊的扳手圖示,然後選取維護

  4. 完成維護任務後,按一下節點旁邊的扳手圖示,然後選取就緒

27.6 將節點置於待命模式

若要在 crm 外圍程序中將節點置於待命模式,請使用以下指令︰

# crm node standby NODENAME

若要在完成維護工作後將節點恢復線上狀態,請使用以下指令︰

# crm node online NODENAME
程序 27.3︰ 使用 Hawk2 將節點置於待命模式
  1. 啟動網頁瀏覽器並依第 5.4.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取叢集狀態

  3. 在其中一個節點的檢視中,按一下節點旁邊的扳手圖示,然後選取待命

  4. 完成節點的維護任務。

  5. 若要停用待命模式,請按一下節點旁邊的扳手圖示,然後選取就緒

27.7 停止節點上的叢集服務

若要先循序將服務移出節點,再將節點關閉或重新開機,請執行以下操作:

程序 27.4︰ 手動將叢集節點重新開機
  1. 在要重新開機或關閉的節點上,以 root 或同等身分登入。

  2. 將節點置於 standby 模式:

    # crm -w node standby

    如此即可將服務移轉出節點,而不會受限於叢集服務的關閉逾時。

  3. 檢查叢集狀態:

    # crm status

    此指令顯示相關節點處於 standby 模式:

    [...]
    Node bob: standby
    [...]
  4. 停止該節點上的叢集服務:

    # crm cluster stop
  5. 將節點重新開機。

若要再次檢查節點是否已加入叢集,請執行以下步驟:

  1. root 或同等身分登入該節點。

  2. 檢查叢集服務是否已啟動:

    # crm cluster status

    如果未啟動,請啟動這些服務:

    # crm cluster start
  3. 檢查叢集狀態:

    # crm status

    此指令應該會顯示節點已恢復線上狀態。

27.8 將資源置於維護模式

若要在 crm 外圍程序中將資源置於維護模式,請使用以下指令:

# crm resource maintenance RESOURCE_ID true

若要在完成維護工作後將資源恢復正常模式,請使用以下指令:

# crm resource maintenance RESOURCE_ID false
程序 27.5︰ 使用 Hawk2 將資源置於維護模式
  1. 啟動網頁瀏覽器並依第 5.4.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中,選取資源

  3. 選取要將其置於維護模式或不受管理模式的資源,然後按一下資源旁邊的扳手圖示並選取編輯資源

  4. 開啟中繼屬性類別。

  5. 從空白下拉式清單中,選取 maintenance 屬性並按一下加號圖示新增該屬性。

  6. 啟用 maintenance 旁邊的核取方塊,將 maintenance 屬性設定為 yes

  7. 確認您的變更。

  8. 完成針對該資源的維護任務後,停用該資源 maintenance 屬性旁邊的核取方塊。

    從此時起,資源將重新由 High Availability Extension 軟體管理。

27.9 將資源置於不受管理模式

若要在 crm 外圍程序中將資源置於不受管理模式,請使用以下指令:

# crm resource unmanage RESOURCE_ID

若要在完成維護工作後再次將資源置於受管理模式,請使用以下指令:

# crm resource manage RESOURCE_ID
程序 27.6︰ 使用 Hawk2 將資源置於不受管理模式
  1. 啟動網頁瀏覽器並依第 5.4.2 節 「登入」 所述登入叢集。

  2. 在左側導覽列中選取狀態,然後移至資源清單。

  3. 操作欄中,按一下要修改的資源旁邊的向下箭頭圖示,然後選取編輯

    資源組態螢幕隨即開啟。

  4. 中繼屬性下方,從空白下拉式方塊中選取 is-managed 項目。

  5. 將其值設定為 No,然後按一下套用

  6. 完成維護任務後,將 is-managed 設定為 Yes (預設值) 並套用變更。

    從此時起,資源將重新由 High Availability Extension 軟體管理。

27.10 在維護模式下將叢集節點重新開機

注意
注意:隱含式

如果叢集或某個節點處於維護模式,您可以使用叢集堆疊外部的工具 (例如 systemctl),以手動方式將叢集所管理的元件做為資源進行操作。High Availability Extension 不會監控這些元件或嘗試重新啟動它們。

如果您停止節點上的叢集服務,所有精靈和程序 (最初做為 Pacemaker 管理的叢集資源啟動) 都將繼續執行。

如果您在叢集或某個節點處於維護模式的情況下嘗試啟動該節點上的叢集服務,Pacemaker 將針對每個資源啟動一次性的監控操作 (查探),以確定哪些資源目前正在該節點上執行。但是,它只會確定資源的狀態,而不執行進一步的動作。

程序 27.7︰ 在叢集或節點處於維護模式的情況下將叢集節點重新開機
  1. 在要重新開機或關閉的節點上,以 root 或同等身分登入。

  2. 如果您使用 DLM 資源 (或相依於 DLM 的其他資源),請務必在停止叢集服務之前明確停止這些資源:

    crm(live)resource# stop RESOURCE_ID

    這是因為如果停止 Pacemaker,也會停止 DLM 相依於其成員資格和訊息服務的 Corosync 服務。如果 Corosync 停止,DLM 資源將假設一種電腦分裂情況並觸發圍籬區隔操作。

  3. 停止該節點上的叢集服務:

    # crm cluster stop
  4. 將節點關閉或重新開機。

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

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

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

28.1 術語

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

主要版本, 正式發行 (GA) 版本

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

叢集離線升級

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

叢集滾存升級

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

Service Pack (SP)

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

更新

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

升級

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

28.2 將叢集升級至產品的最新版本

支援哪種升級路徑以及如何執行升級,取決於目前的產品版本以及您要移轉至的目標版本。

High Availability Extension 支援的升級路徑與基礎系統支援的升級路徑相同。若要瞭解完整資訊,請參閱 SUSE Linux Enterprise Server Upgrade Guide 中的 Supported Upgrade Paths to SUSE Linux Enterprise Server 15 SP5

此外,由於高可用性叢集堆疊提供了兩種升級叢集的方法,以下規則也適用:

  • 叢集滾存升級僅在同一主要版本內支援叢集滾存升級 (從一個 Service Pack 升級至下一個 Service Pack,或從產品的 GA 版本升級至 SP1)。

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

第 28.2.1 節 列出了 SLE HA (Geo) 支援的從一個版本升級至下一個版本的升級路徑和方法。For Details欄中列出了您應參閱的特定升級文件 (還包括基礎系統和 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。

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

升級來源與目標

升級路徑

相關詳細資料

從 SLE HA 11 SP3 到

SLE HA (Geo) 12

叢集離線升級

  • 基礎系統:SLES 12 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 Geo Clustering Quick StartUpgrading from SLE HA (Geo) 11 SP3 to SLE HA Geo 12 章節

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

叢集離線升級

  • 基礎系統:SLES 12 SP1 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 SP1 Geo Clustering Quick StartUpgrading to the Latest Product Version 章節

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

叢集滾存升級

  • 基礎系統:SLES 12 SP1 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 SP1 Geo Clustering Quick StartUpgrading to the Latest Product Version 章節

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

叢集滾存升級

  • 基礎系統:SLES 12 SP2 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 SP2 Geo Clustering Quick StartUpgrading to the Latest Product Version 章節

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

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

叢集滾存升級

  • 基礎系統:SLES 12 SP3 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 SP3 Geo Clustering GuideUpgrading to the Latest Product Version 章節

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

叢集滾存升級

  • 基礎系統:SLES 12 SP4 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:SLE HA 12 SP4 Geo Clustering GuideUpgrading to the Latest Product Version 章節

從 SLE HA (Geo) 12 SP3 升級至 SLE HA 15

叢集離線升級

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

叢集滾存升級

  • 基礎系統:SLES 12 SP5 Deployment GuideUpdating and Upgrading SUSE Linux Enterprise 部分

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

從 HA (Geo) 12 SP4 升級至 SLE HA 15 SP1

叢集離線升級

從 HA (Geo) 12 SP5 升級至 SLE HA 15 SP2

叢集離線升級

從 SLE HA 15 升級至 SLE HA 15 SP1

叢集滾存升級

  • 基礎系統:SLES 15 SP1 Upgrade Guide

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

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

叢集滾存升級

  • 基礎系統:SLES 15 SP2 Upgrade Guide

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

從 SLE HA 15 SP2 升級至 SLE HA 15 SP3

叢集滾存升級

  • 基礎系統:SLES 15 SP3 Upgrade Guide

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

從 SLE HA 15 SP3 升級至 SLE HA 15 SP4

叢集滾存升級

  • 基礎系統:SLES 15 SP4 Upgrade Guide

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

從 SLE HA 15 SP4 升級至 SLE HA 15 SP5

叢集滾存升級

  • 基礎系統:SLES 15 SP5 Upgrade Guide

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

  • SLE HA Geo:Book “Geo Clustering Guide”, Chapter 10 “Upgrading to the latest product version”

注意
注意:跳過 Service Pack

最簡單的升級路徑是循序安裝所有 Service Pack。對於 SUSE Linux Enterprise 15 產品系列 (GA 和後續 Service Pack),還支援在升級時跳過某個 Service Pack。例如,支援從 SLE 15 GA 升級至 15 SP2,或從 SLE 15 SP1 升級至 15 SP3。

28.2.2 升級前的必要準備

備份

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

測試

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

28.2.3 叢集離線升級

本節適用於以下案例:

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

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

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

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

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

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

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

    # 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 組態推入至其於叢集節點:

      # csync2 -xv

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. 如果您使用叢集 LVM,則需要從 clvmd 移轉至 lvmlockd。請參閱 lvmlockd 手冊頁的 changing a clvm VG to a lockd VG 部分和第 23.4 節 「從鏡像 LV 線上移轉至叢集 MD」

  6. 登入某個叢集節點,並啟動所有節點上的叢集堆疊:

    # crm cluster start --all
    注意
    注意:--all 選項僅在 15 SP4 版本中可用

    SUSE Linux Enterprise High Availability Extension 15 SP4 中新增了 --all 選項。在早期版本中,您必須逐一在每個節點上執行 crm cluster start 指令。

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

28.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 12 SP4 升級至 SLE HA 12 SP5

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

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

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

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

  • 從 SLE HA 15 SP4 升級至 SLE HA 15 SP5

依據情況使用以下其中一個程序:

  • 如果要進行較為一般的滾存升級,請參閱程序 28.3

  • 如果要進行特定的滾存升級,請參閱程序 28.4

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

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

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

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

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

當所有線上節點執行的都是升級的版本後,其他使用舊版本的節點不升級就無法 (重新) 加入叢集。

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

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

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

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

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

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

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

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

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

除了本機升級之外,許多客戶更喜歡進行全新安裝,即使是要升級至下一個 Service Pack 時也是如此。下面的程序顯示雙節點叢集 (包含節點 alice 和 bob) 升級至下一個 Service Pack (SP) 的情況:

程序 28.4︰ 執行新 Service Pack 的叢集範圍全新安裝
  1. 備份叢集組態。下面的清單中顯示了至少應備份的檔案:

    /etc/corosync/corosync.conf
    /etc/corosync/authkey
    /etc/sysconfig/sbd
    /etc/modules-load.d/watchdog.conf
    /etc/hosts
    /etc/ntp.conf

    依據您的資源,您可能還需要備份以下檔案:

    /etc/services
    /etc/passwd
    /etc/shadow
    /etc/groups
    /etc/drbd/*
    /etc/lvm/lvm.conf
    /etc/mdadm.conf
    /etc/mdadm.SID.conf
  2. 先從節點 alice 開始。

    1. 將節點置於待命模式。這樣便能將資源移出節點:

      # crm --wait node standby alice reboot

      如果使用 --wait 選項,該指令僅會在叢集完成轉換並變為閒置狀態時傳回。reboot 選項可使節點一旦重新上線就已脫離待命模式。儘管 reboot 選項的名稱是重新開機,但只要節點離線後又上線,該選項就會發揮作用。

    2. 停止節點 alice 上的叢集服務:

      # crm cluster stop
    3. 此時,alice 不再有任何執行中資源。升級節點 alice,完成後將其重新開機。假定叢集服務不會在系統開機時啟動。

    4. 步驟 1 中的備份檔案複製到原始位置。

    5. 將節點 alice 重新加入叢集:

      # crm cluster start
    6. 檢查資源是否正常。

  3. 對節點 bob 重複步驟 2

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

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

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

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

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

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

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

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

      # crm node maintenance NODE_NAME

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

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

  3. 在成功安裝更新後:

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

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

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

28.4 更多資訊

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

第 V 部分 附錄

  • 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 一起提供。

依照Installation and Setup Quick Start所述,檢查每個叢集節點上是否安裝了 High Availability Extension 做為 SUSE Linux Enterprise Server 15 SP5 的延伸,以及每部機器上是否安裝了 High Availability 模式。

所有叢集節點的初始組態是否都相同?

第 4 章 「使用 YaST 叢集模組所述,為了能夠相互通訊,屬於同一個叢集的所有節點都需要使用相同的 bindnetaddrmcastaddrmcastport

檢查所有叢集節點的 /etc/corosync/corosync.conf 中設定的通訊通道和選項是否都相同。

如果使用加密通訊,請檢查是否所有叢集節點上都存在 /etc/corosync/authkey 檔案。

corosync.conf 以外的所有 nodeid 設定都必須相同;所有節點上的 authkey 檔案都必須相同。

防火牆允許透過 mcastport 進行通訊嗎?

若用於在各叢集節點間通訊的 mcastport 被防火牆阻擋,這些節點將無法相互查看。依照第 4 章 「使用 YaST 叢集模組Article “安裝與設定快速入門中所述使用 YaST 或開機程序檔執行初始設定時,防火牆設定通常會自動進行調整。

若要確保 mcastport 不被防火牆阻擋,請檢查每個節點上的防火牆設定。

每個叢集節點上是否都啟動了 Pacemaker 和 Corosync?

通常,啟動 Pacemaker 也會啟動 Corosync 服務。若要檢查這兩個服務是否在執行,請使用以下指令:

# crm cluster status

如果它們未在執行,請執行以下指令將其啟動:

# crm cluster start

A.2 記錄

可以在哪里找到記錄檔案?

Pacemaker 會將其記錄檔案寫入 /var/log/pacemaker 目錄。Pacemaker 的主記錄檔案是 /var/log/pacemaker/pacemaker.log。如果您找不到記錄檔案,請檢查 /etc/sysconfig/pacemaker (Pacemaker 自己的組態檔案) 中的記錄設定。如果該檔案中設定了 PCMK_logfile,Pacemaker 會使用此參數定義的路徑。

如果您需要一份顯示所有相關記錄檔案的叢集層級報告,請參閱如何建立一份包含所有叢集節點分析資訊的報告?以瞭解詳細資訊。

我已啟用監控,但為何記錄檔案中沒有監控操作的追蹤資訊?

除非有錯誤發生,否則 pacemaker-execd 精靈不會記錄週期性的監控操作。記錄所有週期性操作會產生太多干擾。因此,該精靈只會每小時記錄一次週期性監控操作。

我只收到一則 failed 訊息。能取得詳細資訊嗎?

在指令中新增 --verbose 參數。如果多次執行該操作,除錯輸出就會變得更詳細。請參閱記錄資料 (sudo journalctl -n) 以獲取有用的提示。

如何取得所有節點和資源的綜覽?

使用 crm_mon 指令。下面顯示了資源操作歷程 (選項 -o) 和非使用中資源 (-r):

# 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:

Pacemaker Explained PDF (在 http://www.clusterlabs.org/pacemaker/doc/ 上提供) 的 How are OCF Return Codes Interpreted? 部分介紹了三種不同的復原類型。

如何檢視記錄?

若要詳細檢視叢集中的目前活動,請使用以下指令:

# crm history log [NODE]

用您要檢查的節點取代 NODE,或將其保留空白。如需更多資訊,請參閱第 A.5 節 「瀏覽記錄」

A.3 資源

如何清理我的資源?

請使用以下指令:

# crm resource list
# crm resource cleanup rscid [node]

如果不指定節點,系統會清理所有節點上的資源。如需詳細資訊,請參閱第 8.5.2 節 「使用 crmsh 清理叢集資源」

如何列出目前已知的資源?

使用指令 crm resource list 可以顯示目前的資源。

我已設定某個資源,但它總是失敗。為什麼?

若要檢查 OCF 程序檔,請使用 ocf-tester,例如:

ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \
  /usr/lib/ocf/resource.d/heartbeat/IPaddr

如果有多個參數,請使用 -o 多次。執行 crm ra info AGENT 可獲取必需參數和選擇性參數的清單,例如:

# crm ra info ocf:heartbeat:IPaddr

在執行 ocf-tester 之前,請確定該資源不受叢集管理。

資源為何不容錯移轉,並且為何沒有發生錯誤?

已終止的節點可能會被視為不正常。如果是這樣,就必須對它進行圍籬區隔。如果 STONITH 資源無法正常運作或者不存在,另一個節點將會等待圍籬區隔發生。圍籬區隔逾時值通常比較大,因此可能需要一段時間才能看到問題的明顯跡象 (如果最終出現問題)。

另外還有一種可能,那就是此節點上不允許執行某個資源。這可能是因為之前曾發生了失敗,而此失敗尚未得到清理。或者,可能是之前執行了某個管理動作,即新增了分數為負數的位置條件約束。例如,使用 crm resource move 指令插入了這樣的位置條件約束。

為何我總是無法確定資源的執行位置?

如果資源不存在位置條件約束,則其投放至的節點 (基本上) 是由系統隨機選擇的。強烈建議您總是為資源指定一個偏好節點。這並不意味著您需要為所有資源指定位置偏好設定。對於一組相關 (並存) 的資源,一個偏好設定就已足夠。節點偏好設定如下所示:

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

# crm history resource NAME1

這只會傳回指定資源的完整狀態轉換記錄。不過,您也可以調查多個資源,在第一個資源名稱的後面附加更多資源名稱即可。

如果您遵循了命名慣例 (請參閱附錄 B 「命名慣例),使用 resource 指令可以更輕鬆地調查一組資源。例如,以下指令將會調查以 db 開頭的所有基本資源:

# crm history resource db*

檢視 /var/cache/crm/history/live/alice/ha-log.txt 中的記錄檔案。

如何減少歷程輸出?

history 指令有兩個選項:

  • 請使用 exclude

  • 請使用 timeframe

exclude 指令可讓您設定額外的規則運算式,用於從記錄中排除特定的模式。例如,以下指令會排除所有 SSH、systemd 和核心訊息:

# crm history exclude ssh|systemd|kernel.

使用 timeframe 指令可將輸出限制為特定的範圍。例如,以下指令會顯示 8 月 23 日 12:00 到 12:30 的所有事件:

# 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

  3. 重新啟動 Hawk2 服務以重新載入新證書:

    # systemctl restart hawk-backend hawk

將檔案的擁有權變更為 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 其他

如何在所有叢集節點上執行指令?

請使用 crm cluster run 指令來完成此項任務。例如:

# crm cluster run "ls -l /etc/corosync/*.conf"
INFO: [alice]
-rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf
INFO: [bob]
-rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf
INFO: [charlie]
-rw-r--r-- 1 root root 812 Oct 27 15:42 /etc/corosync/corosync.conf

依預設,指定的指令會在叢集中的所有節點上執行。或者,您也可以在某個特定節點或特定的一組節點上執行指令:

# crm cluster run "ls -l /etc/corosync/*.conf" alice bob
我的叢集狀態如何?

若要檢查叢集目前的狀態,請使用程式 crm_moncrm status。此時會顯示目前 DC,以及目前節點已知的所有節點與資源。

為何我叢集中的一些節點看不到彼此?

導致的原因有多種:

  • 先查看組態檔案 /etc/corosync/corosync.conf。檢查叢集中每個節點的多點傳送或單點傳播位址是否相同 (在包含 interface 鍵的 mcastaddr 區段中查看)。

  • 檢查防火牆設定。

  • 檢查交換器是否支援多點傳播或單點傳播位址。

  • 檢查節點之間的連接是否中斷。最常見的原因是防火牆設定不正確。這也可能是發生電腦分裂情況 (此情況下叢集會被分割) 的原因。

為何無法掛接 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-paeocfs2-kmp-defaultocfs2-kmp-xen

如何建立一份包含所有叢集節點分析資訊的報告?

在 crm 外圍程序中,可以使用 crm report 建立報告。此工具將會編譯:

  • 整個叢集的記錄檔案

  • 套件狀態

  • DLM/OCFS2 狀態

  • 系統資訊,

  • CIB 歷程

  • 磁心傾印報告的剖析結果 (如果已安裝 debuginfo 套件)

通常需要配合以下指令執行 crm report

# crm report -f 0:00 -n alice -n bob

該指令會擷取主機 alice 和 bob 上從淩晨 0 點開始的所有資訊,並在目前的目錄中建立名為 crm_report-DATE.tar.bz2*.tar.bz2 歸檔,例如 crm_report-Wed-03-Mar-2012。如果您只需要特定時間範圍的資訊,請使用 -t 選項新增結束時間。

警告
警告:移除敏感性資訊

crm report 工具會嘗試從 CIB 和 PE 輸入檔案中移除所有敏感性資訊,但它並不能包辦一切。如果您還有更多敏感性資訊,請使用 -p 選項提供其他模式 (請參閱手冊頁)。系統不會清理記錄檔案以及 crm_monccm_toolcrm_verify 輸出。

在以任何方式共用您的資料之前,請先檢查歸檔,並移除您不想公開的所有資訊。

可以使用其他選項自訂指令。例如,如果您有一個 Pacemaker 叢集,那麼您肯定想新增 -A 選項。如果除了 roothacluster 以外,還有一個使用者也有權存取該叢集,可使用 -u 選項指定此使用者。如果您有一個非標準 SSH 連接埠,請使用 -X 選項新增該連接埠 (例如,如果連接埠為 3479,則使用 -X "-p 3479")。如需瞭解更多選項,請參閱 crm report 的手冊頁。

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 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 的手冊頁。

管理 CIB

cibadmin 指令是用於操作 CIB 的低階管理指令。它可用來傾印、更新及修改所有或部分 CIB,刪除整個 CIB,或執行其他 CIB 管理操作。如需此工具的用途與指令語法的詳細介紹,請參閱 cibadmin 的手冊頁。

管理組態變更

crm_diff 指令可協助您建立並套用 XML 修補程式。此作業有助於視覺化兩個叢集組態版本之間的變更,或儲存變更以便稍後使用 cibadmin 套用變更。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_diff 的手冊頁。

操作 CIB 屬性

crm_attribute 指令可讓您查詢並操作節點屬性和要在 CIB 中使用的叢集組態選項。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_attribute 的手冊頁。

驗證叢集組態

crm_verify 指令可檢查組態資料庫 (CIB) 的一致性及其他問題。它可檢查檔案是否包含組態或連接正在執行的叢集。它可報告兩類問題。錯誤必須要加以修復,High Availability Extension 才能正常運作,而是否需解決警告問題則由管理員來決定。crm_verify 可協助建立新的或已修改的組態。您可在執行中的叢集中建立 CIB 的本地副本、對其進行編輯,並使用 crm_verify 進行驗證,然後使用 cibadmin 使新組態生效。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_verify 的手冊頁。

管理資源組態

crm_resource 指令可在叢集上執行各種與資源相關的動作。它可讓您修改已設定資源的定義,啟動和停止資源,或在節點間刪除和移轉資源。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_resource 的手冊頁。

管理資源失敗計數

crm_failcount 指令會查詢指定節點上每個資源的失敗次數。此工具還可用來重設 failcount,允許資源在失敗次數過多的節點上重新執行。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_failcount 的手冊頁。

管理節點的待命狀態

crm_standby 指令可操作節點的待命屬性。待命模式下的任何節點都無法再代管資源,且其中的所有資源也都必須移出。執行核心更新等維護任務時,待命模式十分有用。移除節點的待命屬性,可讓其再次成為叢集的完全使用中成員。如需此工具的用途與指令語法的詳細介紹,請參閱 crm_standby 的手冊頁。

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. 啟動外圍程序,然後建立主目錄為 /home/hareport 的使用者 hareport

    # useradd -m -d /home/hareport -c "HA Report" hareport
  2. 為該使用者設定密碼:

    # 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. 或者,執行以下指令以在該檔案的末尾新增相應行:

    # echo “PermitRootLogin no” >> /etc/ssh/sshd_config
    # echo “Port 5022” >> /etc/ssh/sshd_config
  4. 修改 /etc/ssh/sshd_config 後,重新啟動 SSH 精靈以使新設定生效:

    # systemctl restart sshd
重要
重要:需要在每個叢集節點上使用相同設定

在每個叢集節點上重複上述 SSH 精靈組態。

程序 D.3︰ 為非標準連接埠設定 SSH 用戶端

如果需要在叢集中的所有節點上變更 SSH 連接埠,比較好的做法是修改 SSH 組態檔案 /etc/ssh/sshd_config

  1. 若要修改預設埠,請在該檔案中搜尋 Port 行,取消註解該行,然後視需要進行編輯。例如,可將該行設定為:

    Port 5022
  2. 或者,執行以下指令以在該檔案的末尾新增相應行:

    # 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. 尋找以下類別:Host alias specificationUser alias specificationCmnd alias specificationRunas alias specification

  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 類別。定義上述別名後,接下來可以新增以下規則:

    HA	CLUSTER = (R) NOPASSWD:HA_ALLOWED

    NOPASSWORD 選項確定使用者 hareport 無需提供密碼就能執行叢集報告。

  7. (選擇性) 若要允許使用者 hareport 使用您的本地 SSH 金鑰執行叢集報告,請將下行內容新增至 Defaults specification 類別。這會保留 SSH_AUTH_SOCK 環境變數,SSH 代理程式轉遞時需要用到該變數。

    Defaults!HA_ALLOWED env_keep+=SSH_AUTH_SOCK

    當您以使用者 hareport 的身分透過 ssh -A 登入節點,以及使用 sudo 執行 crm report 時,您的本地 SSH 金鑰會傳遞到該節點以進行驗證。

重要
重要:需要在每個叢集節點上使用相同的 sudo 組態

必須在叢集中的所有節點上指定這項 sudo 組態。無需為 sudo 做出其他變更,並且無需重新啟動任何服務。

D.4 產生叢集報告

若要使用上面的設定執行叢集報告,需要以 hareport 使用者的身分登入某個節點。若要啟動叢集報告,請使用 crm report 指令。例如:

hareport > sudo crm report -f 0:00 -n "alice bob charlie"

此指令會在指定的節點上擷取從 0 am 開始的所有資訊,並在目前的目錄中建立名為 pcmk-DATE.tar.bz2*.tar.bz2 歸檔。

程序 D.5︰ 使用自訂 SSH 連接埠產生叢集報告
  1. 使用自訂 SSH 連接埠時,請將 -Xcrm report 配合使用來修改用戶端的 SSH 連接埠。例如,如果自訂 SSH 埠為 5022,則使用以下指令:

    # 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 的一般讀取和寫入操作進行序列化。

cluster

高效能叢集是指共同分擔應用程式負載以更快獲得結果的一組電腦 (真實或虛擬)。高可用性叢集的主要用途是最大限度地確保服務的可用性。

conntrack 工具

使用這些工具可與內核連接追蹤系統互動,以對 iptables 啟用陳述封包檢查。High Availability Extension 使用它來在叢集節點之間同步連接狀態。

CRM (叢集資源管理員)

負責協調高可用性叢集中所有非本地互動的管理實體。High Availability Extension 使用 Pacemaker 做為 CRM。CRM 實作為 pacemaker-controld。CRM 與許多元件進行互動,包括所在節點及其他節點上的本地資源管理員、非本地 CRM、管理指令、圍籬區隔功能及成員資格層。

crmsh

指令列公用程式 crmsh 可用於管理叢集、節點和資源。

如需詳細資訊,請參閱第 5.5 節 「crmsh 簡介」

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.2 節 「支援的資源代理程式類別」

ReaR (放鬆與復原)

用於建立災難備援影像的管理員工具集。

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 中也使用 split brain 一詞,但表示兩個節點包含不同的資料。