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 的延伸,以及每部機器上是否安裝了
模式。- 所有叢集節點的初始組態是否都相同?
如第 4 章 「使用 YaST 叢集模組」所述,為了能夠相互通訊,屬於同一個叢集的所有節點都需要使用相同的
bindnetaddr
、mcastaddr
和mcastport
。檢查所有叢集節點的
/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
狀態變更時,顯示畫面會重新整理 (若要取消此功能,請按 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:
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) 簽署的證書取代自動建立的證書:
以私密金鑰取代
/etc/hawk/hawk.key
。以 Hawk2 應提供的證書取代
/etc/hawk/hawk.pem
。重新啟動 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_mon
或crm
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-pae
、ocfs2-kmp-default
或ocfs2-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_mon
、ccm_tool
和crm_verify
輸出。在以任何方式共用您的資料之前,請先檢查歸檔,並移除您不想公開的所有資訊。
可以使用其他選項自訂指令。例如,如果您有一個 Pacemaker 叢集,那麼您肯定想新增
-A
選項。如果除了root
和hacluster
以外,還有一個使用者也有權存取該叢集,可使用-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.conf
的report
區段中設定預設值。更多資訊請參閱手冊頁man 8 crmsh_hb_report
。
A.8 更多資訊 #
如需有關 Linux 上高可用性的其他資訊,包括設定叢集資源及管理和自訂高可用性叢集,請參閱 http://clusterlabs.org/wiki/Documentation。