跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 附錄 / 疑難排解
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP3

A 疑難排解

當出現奇怪的現象時,使用者可能會搞不清楚狀況,尤其是剛剛開始使用 High Availability 的使用者。不過,您可以借助幾個公用程式來深入瞭解 High Availability 的內部程序。本章推薦了各種解決方案。

A.1 安裝和前期階段的步驟

疑難排解安裝套件或使叢集上線時所遇到的問題。

是否已安裝 HA 套件?

設定和管理叢集所需的套件包含於高可用性安裝模式中,隨 High Availability Extension 一起提供。

依《安裝與設定快速入門》所述,檢查 High Availability Extension 是否已做為 SUSE Linux Enterprise Server 15 SP3 的延伸安裝在每個叢集節點上,以及每部機器上是否安裝了 High Availability 模式。

所有叢集節點的初始組態是否都相同?

為了能夠相互通訊,屬於同一叢集的所有節點均需使用相同的 bindnetaddrmcastaddrmcastport,如第 4 章 「使用 YaST 叢集模組 中所述。

請檢查 /etc/corosync/corosync.conf 中為所有叢集節點設定的通訊通道與選項是否都相同。

若使用加密通訊,請檢查是否所有叢集節點上的 /etc/corosync/authkey 檔案都可使用。

nodeid 以外的所有 corosync.conf 設定都必須相同;所有節點上的 authkey 檔案都必須相同。

防火牆允許透過 mcastport 進行通訊嗎?

若用於在各叢集節點間通訊的 mcastport 被防火牆阻擋,這些節點將無法相互查看。依照第 4 章 「使用 YaST 叢集模組安裝與設定快速入門中所述使用 YaST 或開機程序檔執行初始設定時,防火牆設定通常會自動進行調整。

若要確保 mcastport 不被防火牆阻擋,請檢查每個節點上的防火牆設定。

每個叢集節點上是否都啟動了 Pacemaker 和 Corosync?

通常,啟動 Pacemaker 也會啟動 Corosync 服務。若要檢查這兩個服務是否在執行,請使用以下指令:

root # crm cluster status

如果它們未在執行,請執行以下指令將其啟動:

root # crm cluster start

A.2 記錄

可以在哪里找到記錄檔案?

Pacemaker 會將其記錄檔案寫入 /var/log/pacemaker 目錄。主要的 Pacemaker 記錄檔案是 /var/log/pacemaker/pacemaker.log。如果您找不到記錄檔案,請查看 /etc/sysconfig/pacemaker 中的記錄記錄設定 (Pacemaker 自己的組態檔案)。如果該組態檔案中設定了 PCMK_logfile,Pacemaker 將使用此參數定義的路徑。

如果您需要一份顯示所有相關記錄檔案的叢集層級報告,請參閱如何建立一份包含所有叢集節點分析資訊的報告?以瞭解詳細資訊。

我已啟用監控,但為何記錄檔案中沒有監控操作的追蹤資訊?

除非有錯誤發生,否則 pacemaker-execd 精靈不會記錄週期性的監控操作。記錄所有週期性操作會產生太多干擾。因此,該精靈只會每小時記錄一次週期性監控操作。

我只收到一則失敗訊息。能取得詳細資訊嗎?

請將 --verbose 參數新增至您的指令。若多次執行此操作,將產生非常詳細的除錯輸出。請參閱記錄資料 (sudo journalctl -n) 以獲取有用提示。

如何取得所有節點和資源的綜覽?

請使用 crm_mon 指令。以下指令將顯示資源操作歷程 (選項 -o) 和非使用中資源 (-r):

root # crm_mon -o -r

狀態變更時,顯示畫面會重新整理 (若要取消此功能,請按 CtrlC )。範例顯示內容如下:

範例 A.1︰ 停止的資源
Last updated: Fri Aug 15 10:42:08 2014
Last change: Fri Aug 15 10:32:19 2014
 Stack: corosync
Current DC: bob (175704619) - partition with quorum
Version: 1.1.12-ad083a8
2 Nodes configured
3 Resources configured
       
Online: [ alice bob ]
       
Full list of resources:
       
my_ipaddress    (ocf:heartbeat:Dummy): Started bob
my_filesystem   (ocf:heartbeat:Dummy): Stopped
my_webserver    (ocf:heartbeat:Dummy): Stopped
       
Operations:
* Node bob: 
    my_ipaddress: migration-threshold=3
      + (14) start: rc=0 (ok)
      + (15) monitor: interval=10000ms rc=0 (ok)
      * Node alice:

http://www.clusterlabs.org/pacemaker/doc/ 上《Pacemaker Explained》(Pacemaker 說明) PDF 檔案中的「How are OCF Return Codes Interpreted? 」(如何解譯 OCF 傳回代碼?) 一節介紹了三種不同的復原類型。

如何檢視記錄?

若要詳細檢視叢集中的目前活動,請使用以下指令:

root # crm history log [NODE]

用您要檢查的節點取代 NODE,或將其保留空白。如需更多資訊,請參閱第 A.5 節 「瀏覽記錄」

A.3 資源

如何清理我的資源?

請使用以下指令:

root # crm resource list
crm resource cleanup rscid [node]

如果不指定節點,系統會清理所有節點上的資源。如需詳細資訊,請參閱第 8.4.4 節 「清理資源」

如何列出目前已知的資源?

使用指令 crm resource list 即可顯示目前資源。

我已設定某個資源,但它總是失敗。為什麼?

若要使用 ocf-tester 檢查 OCF 程序檔,例如:

ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \
  /usr/lib/ocf/resource.d/heartbeat/IPaddr

若需納入多個參數,可以使用多個 -o。執行 crm ra info 代辦,可顯示必需參數和可選參數的清單,指令範例如下:

root # crm ra info ocf:heartbeat:IPaddr

在執行 ocf-tester 之前,請確定該資源不受叢集管理。

資源為何不容錯移轉,並且為何沒有發生錯誤?

已終止的節點可能會被視為不正常。如果是這樣,就必須對它進行圍籬區隔。如果 STONITH 資源無法正常運作或者不存在,則另一個節點將會等待發生圍籬區隔。圍籬區隔逾時值通常設定得很大,因此可能經過很長一段時間後才會發生明顯的問題跡象 (如果最終會出現的話)。

另外還有一種可能,那就是此節點上不允許執行某個資源。這可能是因為之前曾發生了失敗,而此失敗尚未得到清理。或者,可能是之前執行了某個管理動作,即新增了分數為負數的位置條件約束。例如,使用 crm resource migrate 指令插入了這樣的位置條件約束。

為何我總是無法確定資源的執行位置?

如果資源不存在位置條件約束,則其投放至的節點 (基本上) 是由系統隨機選擇的。強烈建議您總是為資源指定一個偏好節點。這並不意味著您需要為所有資源指定位置偏好設定。對於一組相關 (並存) 的資源,一個偏好設定就已足夠。節點偏好設定如下所示:

location rsc-prefers-alice rsc 100: alice

A.4 STONITH 和圍籬區隔

我的 STONITH 資源為何不啟動?

啟動 (或啟用) 操作的過程會檢查裝置狀態。如果裝置未就緒,STONITH 資源將無法啟動。

此外,系統會要求 STONITH 外掛程式產生一份主機清單。如果此清單為空,則執行 STONITH 資源將毫無意義,因為這無法關閉任何節點。清單中會過濾掉執行 STONITH 的主機名稱,因為節點不能關閉自身。

如果您想要使用單主機管理裝置 (如無人職守裝置),請確認 STONITH 資源不得在應當圍籬區隔的節點上執行。請使用負無限位置節點偏好設定 (條件約束)。叢集會將 STONITH 資源移至另一個可以啟動該資源的位置,但移動前會向您發出通知。

為何我使用了 STONITH 資源,圍籬區隔仍不發生?

每個 STONITH 資源必須提供一個主機清單。您可以手動將此清單插入 STONITH 資源組態,也可以從裝置自身 (例如,從出口名稱) 擷取。這取決於 STONITH 外掛程式的特性。pacemaker-fenced 使用該清單來確定哪個 STONITH 資源可以圍籬區隔目標節點。僅當目標節點包含在該清單中時,STONITH 資源才會停止 (圍籬區隔) 該節點。

如果 pacemaker-fenced 在 STONITH 資源執行後所提供的任何主機清單中都找不到該節點,它會詢問其他節點上的 pacemaker-fenced 例項。如果其他 pacemaker-fenced 例項的主機清單中也未包含目標節點,則圍籬區隔要求最終會在發出要求的節點上逾時。

為何我的 STONITH 資源有時會失敗?

如果廣播流量過多,電源管理裝置可能無法回應。請增大監控操作的間隔。假設圍籬區隔在一段時間內只需執行一次 (甚至永遠無需執行),每隔幾小時檢查一次裝置狀態就已足夠。

另外,其中的一些裝置可能拒絕同時與多方通訊。如果叢集嘗試測試狀態時,您將終端機或瀏覽器工作階段保持為開啟狀態,這便可能會產生問題。

A.5 瀏覽記錄

如何從發生故障的資源中取回狀態資訊或記錄?

使用 history 指令及其子指令 resource

root # crm history resource NAME1

這只會傳回指定資源的完整狀態轉換記錄。不過,您也可以調查多個資源,在第一個資源名稱的後面附加更多資源名稱即可。

如果您遵循了某種命名慣例 (請參閱一節),則使用 resource 指令可以更輕鬆地調查一組資源。例如,以下指令將會調查以 db 開頭的所有基本資源:

root # crm history resource db*

檢視 /var/cache/crm/history/live/alice/ha-log.txt 中的記錄檔案。

如何減少歷程輸出?

history 指令有兩個選項:

  • 使用 exclude

  • 使用 timeframe

exclude 指令可讓您設定額外的規則運算式,用於從記錄中排除特定的模式。例如,以下指令會排除所有 SSH、systemd 和核心訊息:

root # crm history exclude ssh|systemd|kernel.

使用 timeframe 指令可將輸出限制為特定的範圍。例如,以下指令會顯示 8 月 23 日 12:00 到 12:30 的所有事件:

root # crm history timeframe "Aug 23 12:00" "Aug 23 12:30"
如何儲存工作階段以便日後檢查?

當您遇到錯誤或者需要進一步調查的事件時,儲存所有目前設定的做法非常有用。您可以將儲存的檔案傳送給支援人員,或者使用 bzless 進行檢視。例如:

crm(live)history# timeframe "Oct 13 15:00" "Oct 13 16:00"
crm(live)history# session save tux-test
crm(live)history# session pack
Report saved in '/root/tux-test.tar.bz2'

A.6 Hawk2

取代自行簽署的證書

若要避免在首次啟動 Hawk 時出現關於自行簽署的證書的警告,請以您自己的證書或官方證書管理中心 (CA) 簽署的證書取代自動建立的證書:

  1. 以私用金鑰取代 /etc/hawk/hawk.key

  2. 以 Hawk2 應提供的證書取代 /etc/hawk/hawk.pem

  3. 重新啟動 Hawk2 服務以重新載入新證書:

    root # 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 其他

如何在所有叢集節點上執行指令?

請使用 pssh 指令來完成此項任務。如果需要,請安裝 pssh。建立一個檔案 (例如 hosts.txt),將您要造訪的所有 IP 位址或主機名稱都收集在其中。確定您可以使用 ssh 登入 hosts.txt 檔案中所列的每個主機。如果所有工作均已準備妥當,請依照以下範例執行 pssh 並使用 hosts.txt 檔案 (選項 -h) 和互動模式 (選項 -i):

pssh -i -h hosts.txt "ls -l /corosync/*.conf"
[1] 08:28:32 [SUCCESS] root@venus.example.com
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
[2] 08:28:32 [SUCCESS] root@192.168.2.102
-rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
我的叢集狀態為何?

若要查看叢集目前的狀態,請使用程式 crm_moncrm status。此時會顯示目前 DC,以及目前節點已知的所有節點與資源。

為何我叢集中的一些節點看不到彼此?

導致的原因有多種:

  • 先查看組態檔案 /etc/corosync/corosync.conf。檢查叢集中每個節點的多路廣播或單點傳播位址是否相同 (在包含 mcastaddr 鍵的 interface 區段中查看)。

  • 檢查防火牆設定。

  • 檢查交換器是否支援多點傳播或單點傳播位址。

  • 檢查節點之間的連接是否中斷。最常見的原因是防火牆設定不正確。這還可能是導致電腦分裂狀況的原因,其中的叢集被分區。

為何無法掛接 OCFS2 裝置?

檢查記錄訊息 (sudo journalctl -n) 中是否包含以下行:

Jan 12 09:58:55 alice pacemaker-execd: [3487]: info: RA output: [...]
  ERROR: Could not load ocfs2_stackglue
Jan 12 16:04:22 alice modprobe: FATAL: Module ocfs2_stackglue not found.

此案例中缺少了核心模組 ocfs2_stackglue.ko。請根據所安裝的核心安裝套件 ocfs2-kmp-defaultocfs2-kmp-paeocfs2-kmp-xen

如何建立一份包含所有叢集節點分析資訊的報告?

在 crm 外圍程序中,可以使用 crm report 建立報告。此工具將會編譯:

  • 整個叢集的記錄檔案

  • 套件狀態

  • DLM/OCFS2 狀態

  • 系統資訊,

  • CIB 歷程

  • 磁心傾印報告的剖析結果 (如果已安裝 debuginfo 套件)

通常需要配合以下指令執行 crm report

root # crm report -f 0:00 -n alice -n bob

該指令會擷取主機 alice 和 bob 中從凌晨 0 點開始的所有資訊,並在目前的目錄中建立一個名為 crm_report-日期.tar.bz2*.tar.bz2 歸檔,例如,crm_report-Wed-03-Mar-2012。如果只需要特定時間範圍的資訊,請使用 -t 選項新增結束時間。

警告
警告:移除敏感性資訊

crm report 工具會嘗試從 CIB 和 PE 輸入檔案中移除所有敏感性資訊,但它並不能包辦一切。如果您還有更多敏感性資訊,請透過 -p 選項 (請參閱 man 頁面) 提供其他模式。記錄檔案以及 crm_monccm_toolcrm_verify 輸出不會被清理。

在以任何方式共用您的資料之前,請先檢查歸檔,並移除您不想公開的所有資訊。

可以使用其他選項自訂指令。例如,如果您有一個 Pacemaker 叢集,那麼您肯定想新增 -A 選項。如果您的另一個使用者有權存取該叢集,請使用 -u 選項並指定此使用者 (不同於 roothacluster 使用者)。如果您有一個非標準 SSH 連接埠,請使用 -X 選項新增該連接埠 (例如,如果連接埠為 3479,則使用 -X "-p 3479")。如需瞭解更多選項,請參閱 crm report 的 man 頁面。

crm report 分析了所有相關記錄檔案並建立了目錄 (或歸檔) 之後,請檢查記錄檔案中是否有大寫的 ERROR 字串。報告的上層目錄中最重要的檔案包括:

analysis.txt

比較檔案,所有節點上都應相同。

corosync.txt

包含 Corosync 組態檔案的副本。

crm_mon.txt

包含 crm_mon 指令的輸出。

description.txt

包含各節點上所有的叢集套件版本。還有一個特定於節點的 sysinfo.txt 檔案。它連結至頂層目錄。

可以使用此檔案做為範本來描述您遇到的問題,然後將它張貼到 https://github.com/ClusterLabs/crmsh/issues

members.txt

所有節點的清單

sysinfo.txt

包含所有相關套件名稱及其版本的清單。此外,還有一個不同於原始 RPM 套件的組態檔案清單。

特定於節點的檔案儲存在以節點名稱命名的子目錄中。其中包含相應節點的 /etc 目錄副本。

如果您需要簡化引數,請在組態檔案 /etc/crm/crm.confreport 部分中設定預設值。更多資訊請參閱 man 頁面 man 8 crmsh_hb_report

A.8 更多資訊

如需有關 Linux 上高可用性的其他資訊,包括設定叢集資源及管理和自訂高可用性叢集,請參閱 http://clusterlabs.org/wiki/Documentation