跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 組態和管理 / QDevice 和 QNetd
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP5

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) 的手冊頁。