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

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 叢集模組安裝與設定快速入門中所述使用 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