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

12 QDevice 和 QNetd

QDevice 和 QNetd 會參與最低節點數決定。在仲裁方 corosync-qnetd 的協助下,corosync-qdevice 會提供一個可設定的投票數,以使叢集可以承受大於標準最低節點數規則所允許的節點故障數量。我們強烈建議為雙節點叢集部署 corosync-qnetdcorosync-qdevice,但對於所含節點數為偶數的叢集,一般也建議使用 QNetd 和 QDevice。

12.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。

12.2 要求和先決條件

設定 QDevice 和 QNetd 之前,您需要依如下所示準備環境:

  • 除了叢集節點外,您需準備一個單獨的機器,將其做為 QNetd 伺服器。請參閱第 12.3 節 「設定 QNetd 伺服器」

  • 與 Corosync 所使用的實體網路不同的實體網路。建議 QDevice 使用該網路來連接 QNetd 伺服器。理想情況下,QNetd 伺服器應位於與主要叢集不同的機架中,或者至少位於一個單獨的 PSU 上,且不要位於與 Corosync 環狀網路相同的網路區段中。

12.3 設定 QNetd 伺服器

QNetd 伺服器不是叢集堆疊的一部分,也不是叢集的實際成員。因此,您無法將資源轉移到此伺服器。

QNetd 伺服器幾乎無狀態。一般情況下,您無需變更組態檔案 /etc/sysconfig/corosync-qnetd 中的任何內容。依預設, corosync-qnetd 服務會以 coroqnetd 群組中的 coroqnetd 使用者身分執行精靈。這可避免以 root 身分執行精靈。

若要建立 QNetd 伺服器,請執行以下步驟:

  1. 在將做為 QNetd 伺服器的機器上,安裝 SUSE Linux Enterprise Server 15 SP3

  2. 登入 QNetd 伺服器並安裝以下套件:

    root # zypper install corosync-qnetd

    您不需要手動啟動 corosync-qnetd 服務。開機程序檔會負責 qdevice 階段中的啟動流程。

QNetd 伺服器現已準備好接受來自 QDevice 用戶端 corosync-qdevice 的連接。無需進行其他組態。

12.4 將 QDevice 用戶端連接至 QNetd 伺服器

設定好 QNetd 伺服器後,您便可以設定並執行用戶端。您可以在安裝叢集的過程中將用戶端連接至 Qnetd 伺服器,也可以稍後再新增。在下面的程序中,我們將使用後一種方法。我們假設叢集包含兩個節點 (alice 和 bob) 和 QNetd 伺服器 (charlie)。

  1. 在所有節點上,請確定您已安裝套件 corosync-qdevice

    root # zypper install corosync-qdevice
  2. 在 alice 上啟始化叢集:

    root # crm cluster init -y
  3. 在 bob 上加入叢集:

    root # crm cluster join -c alice -y
  4. 在 alice 和 bob 上,啟動 qdevice 階段。在大多數情況下,預設設定都可正常運作。至少提供 --qnetd-hostname 和 QNetd 伺服器 (在本例中為 charlie) 的主機名稱或 IP 位址:

    root # crm cluster init qdevice --qnetd-hostname=charlie

    如果您要變更預設設定,請使用 crm cluster init qdevice --help 指令獲取所有可能的選項清單。與 QDevice 相關的所有選項都以 --qdevice-NAME 開頭。

如果您使用的是預設設定,上面的指令會建立啟用了 TLS 並使用 FFSplit 演算法的 QDevice。

12.5 使用啟發設定 QDevice

如果您需要對確定投票的方式進行額外的控制,請使用啟發。啟發是一組可同時執行的指令。

為了此目的,crm cluster init qdevice 指令提供了 --qdevice-heuristics 選項。您可以使用絕對路徑傳遞一或多個指令 (以分號分隔)。

例如,如果您自己的啟發檢查指令位於 /usr/sbin/my-script.sh,則可以在其中一個叢集節點上依如下方式執行該指令:

root # crm cluster init qdevice --qdevice-hostname=charlie \
     --qdevice-heuristics=/usr/sbin/my-script.sh  \
     --qdevice-heuristics-mode=on

您可以採用任何語言撰寫指令,例如 Shell、Python 或 Ruby 語言。如果指令成功執行,將傳回 0 (零),否則會傳回錯誤代碼。

您也可以傳遞一組指令。僅當所有指令都成功完成 (傳回代碼為 0) 後,啟發才會通過。

--qdevice-heuristics-mode=on 選項可讓啟發指令定期執行。

12.6 檢查和顯示最低節點數狀態

您可以查詢某個叢集節點上的最低節點數狀態,如範例 12.1 「QDevice 的狀態」中所示。該範例顯示了 QDevice 節點的狀態。

範例 12.1︰ QDevice 的狀態
root # corosync-quorumtool 1
 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) 的 man 頁面獲取詳細資訊。

NR (未註冊)

表示叢集未在使用最低節點數裝置。

如果您查詢 QNetd 伺服器的狀態,會獲得類似範例 12.2 「QNetd 伺服器的狀態」中所示的輸出:

範例 12.2︰ QNetd 伺服器的狀態
root # corosync-qnetd-tool 1
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 處於使用中狀態。

12.7 更多資訊

如需 QDevice 和 QNetd 的其他資訊,請參閱 corosync-qdevice(8) 和 corosync-qnetd(8) 的 man 頁面。