尋找表現不佳的節點
針對 Cassandra 問題進行疑難排解的第一步是使用錯誤訊息、指標和監控資訊來識別問題是出在用戶端還是伺服器,如果問題出在伺服器,則找出 Cassandra 群集中的問題節點。目標是確定這是一個系統性問題(例如影響整個群集的查詢模式)或僅限於節點子集(例如持有共享令牌範圍的鄰居,甚至單一節點有不良硬體)。
有許多資訊來源有助於確定問題出在哪裡。以下提到一些最常見的來源。
用戶端記錄和錯誤
群集的用戶端通常會留下最佳的麵包屑供追蹤。也許用戶端延遲或錯誤率在特定資料中心增加(可能排除其他資料中心的節點),或者用戶端收到特定類型的錯誤碼,表示特定類型的問題。疑難排解人員通常只要閱讀錯誤訊息,就能排除許多故障模式。事實上,許多 Cassandra 錯誤訊息都包含最後聯絡的協調器,以協助操作員找出節點作為起點。
假設客戶端具有與 Datastax drivers <client-drivers>
類似的錯誤名稱,則一些常見錯誤(括號中為可能原因)
-
SyntaxError
(客戶端)。此錯誤和其他QueryValidationException
錯誤表示客戶端發送了一個格式錯誤的請求。這些錯誤很少是伺服器問題,通常表示查詢錯誤。 -
UnavailableException
(伺服器):這表示 Cassandra 協調器節點已拒絕查詢,因為它認為可用副本節點不足。如果許多協調器拋出此錯誤,則可能表示叢集中確實有多個節點已關閉,您可以使用nodetool status <nodetool-status>
識別這些節點。如果只有一個協調器拋出此錯誤,則可能表示該節點已與其他節點分區。 -
OperationTimedOutException
(伺服器):這是客戶端設定逾時時引發的最常見逾時訊息,表示查詢花費的時間超過提供的逾時時間。這是客戶端逾時,表示花費的時間超過客戶端指定的逾時時間。錯誤訊息將包含最後嘗試的協調器節點,這通常是一個良好的起點。此錯誤通常表示激進的客戶端逾時值或潛在的伺服器協調器/副本。 -
ReadTimeoutException
或WriteTimeoutException
(伺服器):當客戶端未指定較低的逾時時間,且有協調器逾時時間(基於cassandra.yaml
設定檔中提供的數值)時,會引發這些錯誤。它們通常表示嚴重的伺服器端問題,因為預設值通常為多秒。
指標
如果您有 Cassandra 指標
報告給集中位置,例如 Graphite 或 Grafana,則通常可以使用它們來縮小問題範圍。在此階段,將問題縮小到特定資料中心、機架甚至節點群組是主要目標。一些有用的指標包括
錯誤
Cassandra 將節點間傳遞訊息的錯誤稱為「中斷」,並提供許多 中斷訊息指標
來協助縮小錯誤範圍。如果特定節點積極中斷訊息,則它們可能與問題相關。
延遲
對於逾時或延遲相關問題,您可以從 operating/metrics.adoc#table-metrics[表格指標
] 開始,比較協調器層級指標,例如 CoordinatorReadLatency
或 CoordinatorWriteLatency
,與其相關複本指標,例如 ReadLatency
或 WriteLatency
。問題通常會先出現在 第 99 個百分位
,然後才會出現在 第 50 個百分位
或 平均值
。雖然 最大值
協調器延遲通常不太有幫助,因為內部使用指數衰減儲存區來產生指標,但與協調器上 第 99 個百分位
增加相關的 最大值
複本延遲有助於縮小問題範圍。
通常有三個主要可能性
-
所有節點的協調器延遲都很高,但只有少數節點的本機讀取延遲很高。這表示複本節點很慢,而協調器只是副作用。這通常發生在客戶端不具有令牌感知功能時。
-
少數節點上的協調器延遲和複本延遲同時增加。如果客戶端具有令牌感知功能,這幾乎總是會發生,而且表示令牌範圍子集(僅環的一部分)的複本很慢。
-
許多節點的協調器和本機延遲都很高。這通常表示叢集容量達到臨界點(每秒寫入或讀取次數太多),或新的查詢模式。
請務必記住,根據客戶端的負載平衡行為和一致性層級,協調器和複本指標可能相關,也可能不相關。特別是,如果您使用 TokenAware
政策,同一個節點的協調器和複本延遲通常會一起增加,但如果您只使用一般的 DCAwareRoundRobin
,協調器延遲可能會與不相關的複本節點延遲一起增加。例如
-
TokenAware
+LOCAL_ONE
:同一個節點上的協調器和複本延遲應該總是同時上升 -
TokenAware
+LOCAL_QUORUM
:同一個資料中心中,協調器和多個複本延遲應該總是同時上升。 -
TokenAware
+QUORUM
:其他資料中心中的複本延遲可能會影響協調器延遲。 -
DCAwareRoundRobin
+LOCAL_ONE
:協調器延遲和不相關的複本節點延遲會同時上升。 -
DCAwareRoundRobin
+LOCAL_QUORUM
:不同的協調器和複本延遲會同時上升,但相關性很低。
查詢率
有時,表格指標
查詢率指標有助於縮小負載問題範圍,因為每秒協調器查詢(QPS)的「小幅」增加可能會與複本層級 QPS 的大幅增加相關。這最常發生在 BATCH
寫入中,其中客戶端可能會傳送一個包含 50 個陳述式的單一 BATCH
查詢,如果您有 9 個複本(RF=3,三個資料中心),這表示每一個協調器 BATCH
寫入都會變成 450 個複本寫入!這就是將 BATCH
保存在同一個分割區中如此重要的原因,否則您可能會使用「單一」查詢耗盡大量的 CPU 容量。