A 疑難排解 #
當出現奇怪的現象時,使用者可能會搞不清楚狀況,尤其是剛剛開始使用 High Availability 的使用者。不過,您可以借助幾個公用程式來深入瞭解 High Availability 的內部程序。本章推薦了各種解決方案。
A.1 安裝和前期階段的步驟 #
疑難排解安裝套件或使叢集上線時所遇到的問題。
- 是否已安裝 HA 套件?
設定和管理叢集所需的套件包含於
高可用性
安裝模式中,隨 High Availability Extension 一起提供。依《安裝與設定快速入門》所述,檢查 High Availability Extension 是否已做為 SUSE Linux Enterprise Server 15 SP2 的延伸安裝在每個叢集節點上,以及每部機器上是否安裝了 模式。
- 所有叢集節點的初始組態是否都相同?
為了能夠相互通訊,屬於同一叢集的所有節點均需使用相同的
bindnetaddr
、mcastaddr
與mcastport
,如第 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狀態變更時,顯示畫面會重新整理 (若要取消此功能,請按 Ctrl–C )。範例顯示內容如下:
範例 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-testcrm(live)history#
session
pack Report saved in '/root/tux-test.tar.bz2'
A.6 Hawk2 #
- 取代自行簽署的證書
若要避免在首次啟動 Hawk 時出現關於自行簽署的證書的警告,請以您自己的證書或官方證書管理中心 (CA) 簽署的證書取代自動建立的證書:
以私用金鑰取代
/etc/hawk/hawk.key
。以 Hawk2 應提供的證書取代
/etc/hawk/hawk.pem
。
將檔案的擁有權變更為
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_mon
或crm
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-default
、ocfs2-kmp-pae
或ocfs2-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_mon
、ccm_tool
和crm_verify
輸出不會被清理。在以任何方式共享您的資料之前,請先檢查歸檔,並移除您不想公開的所有資訊。
可以使用其他選項自訂指令。例如,如果您有一個 Pacemaker 叢集,那麼您肯定想新增
-A
選項。如果您的另一個使用者有權存取該叢集,請使用-u
選項並指定此使用者 (不同於root
和hacluster
使用者)。如果您有一個非標準 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.conf
的report
部分中設定預設值。更多資訊請參閱 man 頁面man 8 crmsh_hb_report
。
A.8 更多資訊 #
如需有關 Linux 上高可用性的其他資訊,包括設定叢集資源及管理和自訂高可用性叢集,請參閱 http://clusterlabs.org/wiki/Documentation。