Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

檢視最新版本

尋找表現不佳的節點

針對 Cassandra 問題進行疑難排解的第一步是使用錯誤訊息、指標和監控資訊來識別問題是出在用戶端還是伺服器,如果問題出在伺服器,則找出 Cassandra 群集中的問題節點。目標是確定這是一個系統性問題(例如影響整個群集的查詢模式)或僅限於節點子集(例如持有共享令牌範圍的鄰居,甚至單一節點有不良硬體)。

有許多資訊來源有助於確定問題出在哪裡。以下提到一些最常見的來源。

用戶端記錄和錯誤

群集的用戶端通常會留下最佳的麵包屑供追蹤。也許用戶端延遲或錯誤率在特定資料中心增加(可能排除其他資料中心的節點),或者用戶端收到特定類型的錯誤碼,表示特定類型的問題。疑難排解人員通常只要閱讀錯誤訊息,就能排除許多故障模式。事實上,許多 Cassandra 錯誤訊息都包含最後聯絡的協調器,以協助操作員找出節點作為起點。

假設客戶端具有與 Datastax drivers <client-drivers> 類似的錯誤名稱,則一些常見錯誤(括號中為可能原因)

  • SyntaxError (客戶端)。此錯誤和其他 QueryValidationException 錯誤表示客戶端發送了一個格式錯誤的請求。這些錯誤很少是伺服器問題,通常表示查詢錯誤。

  • UnavailableException (伺服器):這表示 Cassandra 協調器節點已拒絕查詢,因為它認為可用副本節點不足。如果許多協調器拋出此錯誤,則可能表示叢集中確實有多個節點已關閉,您可以使用 nodetool status <nodetool-status> 識別這些節點。如果只有一個協調器拋出此錯誤,則可能表示該節點已與其他節點分區。

  • OperationTimedOutException (伺服器):這是客戶端設定逾時時引發的最常見逾時訊息,表示查詢花費的時間超過提供的逾時時間。這是客戶端逾時,表示花費的時間超過客戶端指定的逾時時間。錯誤訊息將包含最後嘗試的協調器節點,這通常是一個良好的起點。此錯誤通常表示激進的客戶端逾時值或潛在的伺服器協調器/副本。

  • ReadTimeoutExceptionWriteTimeoutException (伺服器):當客戶端未指定較低的逾時時間,且有協調器逾時時間(基於 cassandra.yaml 設定檔中提供的數值)時,會引發這些錯誤。它們通常表示嚴重的伺服器端問題,因為預設值通常為多秒。

指標

如果您有 Cassandra 指標 報告給集中位置,例如 GraphiteGrafana,則通常可以使用它們來縮小問題範圍。在此階段,將問題縮小到特定資料中心、機架甚至節點群組是主要目標。一些有用的指標包括

錯誤

Cassandra 將節點間傳遞訊息的錯誤稱為「中斷」,並提供許多 中斷訊息指標 來協助縮小錯誤範圍。如果特定節點積極中斷訊息,則它們可能與問題相關。

延遲

對於逾時或延遲相關問題,您可以從 operating/metrics.adoc#table-metrics[表格指標] 開始,比較協調器層級指標,例如 CoordinatorReadLatencyCoordinatorWriteLatency,與其相關複本指標,例如 ReadLatencyWriteLatency。問題通常會先出現在 第 99 個百分位,然後才會出現在 第 50 個百分位平均值。雖然 最大值 協調器延遲通常不太有幫助,因為內部使用指數衰減儲存區來產生指標,但與協調器上 第 99 個百分位 增加相關的 最大值 複本延遲有助於縮小問題範圍。

通常有三個主要可能性

  1. 所有節點的協調器延遲都很高,但只有少數節點的本機讀取延遲很高。這表示複本節點很慢,而協調器只是副作用。這通常發生在客戶端不具有令牌感知功能時。

  2. 少數節點上的協調器延遲和複本延遲同時增加。如果客戶端具有令牌感知功能,這幾乎總是會發生,而且表示令牌範圍子集(僅環的一部分)的複本很慢。

  3. 許多節點的協調器和本機延遲都很高。這通常表示叢集容量達到臨界點(每秒寫入或讀取次數太多),或新的查詢模式。

請務必記住,根據客戶端的負載平衡行為和一致性層級,協調器和複本指標可能相關,也可能不相關。特別是,如果您使用 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 容量。

下一步:調查節點

在盡可能縮小問題範圍(資料中心、機架、節點)後,使用 SSH 登入其中一個節點,並使用 logsnodetoolos tools 進行偵錯。如果您無法登入,您可能仍可以遠端存取 logsnodetool