對 Amazon Keyspaces 中的容量管理錯誤進行故障診斷 - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對 Amazon Keyspaces 中的容量管理錯誤進行故障診斷

無法使用無伺服器容量? 以下是一些常見問題,以及如何解決這些問題。

無伺服器容量錯誤

本節概述如何識別與無伺服器容量管理相關的錯誤,以及如何解決這些錯誤。例如,當您的應用程式超過佈建的輸送量容量時,您可能會發現容量事件不足。

由於 Apache Cassandra 是叢集型軟體,專為在節點機群上執行而設計,因此沒有與無伺服器功能相關的例外訊息,例如輸送量。大多數驅動程式只了解 Apache Cassandra 中可用的錯誤碼,因此 Amazon Keyspaces 會使用相同的一組錯誤碼來維持相容性。

若要將 Cassandra 錯誤對應至基礎容量事件,您可以使用 Amazon CloudWatch 來監控相關的 Amazon Keyspaces 指標。導致用戶端錯誤的容量不足事件,可以根據導致事件的資源分類為這三個群組:

若要判斷哪個資源導致傳回用戶端錯誤的容量不足事件,您可以在 Amazon Keyspaces 主控台中檢查儀表板。依預設,主控台會在 資料表的容量標籤的容量和相關 CloudWatch 指標區段中提供最常見容量和流量相關指標的彙總檢視。

若要使用 Amazon 建立您自己的儀表板 CloudWatch,請檢查下列 Amazon Keyspaces 指標。

  • PerConnectionRequestRateExceeded – 對 Amazon Keyspaces 的請求超過每個連線請求率的配額。每個 Amazon Keyspaces 的用戶端連線每秒最多可支援 3000 個CQL請求。您可以透過建立多個連線,每秒執行超過 3000 個請求。

  • ReadThrottleEvents – 請求 Amazon Keyspaces 超過資料表的讀取容量。

  • StoragePartitionThroughputCapacityExceeded – 請求超過分割區輸送量容量的 Amazon Keyspaces 儲存分割區。Amazon Keyspaces 儲存分割區每秒可支援高達 1000 WCU和WRU 3000 RCU/RRU 每秒。若要減少這些例外狀況,建議您檢閱資料模型,將讀取/寫入流量分散到更多分割區。

  • WriteThrottleEvents – 請求 Amazon Keyspaces 超過資料表的寫入容量。

若要進一步了解 CloudWatch,請參閱 用 Amazon 監控 Amazon Keyspaces CloudWatch。如需 Amazon Keyspaces 所有可用 CloudWatch 指標的清單,請參閱 Amazon Keyspaces 指標和維度

注意

若要開始使用顯示 Amazon Keyspaces 所有常見觀察指標的自訂儀表板,您可以使用AWS 範例儲存庫 GitHub 中可用的預先建置 CloudWatch 範本。

我從用戶端驅動程式收到NoHostAvailable容量不足的錯誤

您正在查看資料表的 Read_TimeoutWrite_Timeout例外狀況。

重複嘗試寫入或從容量不足的 Amazon Keyspaces 資料表讀取,可能會導致驅動程式特有的用戶端錯誤。

使用 CloudWatch 來監控佈建和實際輸送量指標,以及資料表的容量不足事件。例如,沒有足夠輸送量的讀取請求Read_Timeout會例外失敗,並發佈到ReadThrottleEvents指標。沒有足夠輸送量的寫入請求Write_Timeout會例外失敗,並會發佈到WriteThrottleEvents指標。如需這些指標的詳細資訊,請參閱 Amazon Keyspaces 指標和維度

若要解決這些問題,請考慮下列其中一個選項。

如果您需要增加帳戶的預設容量配額,請參閱 Amazon Keyspaces 的配額(阿帕奇卡桑德拉)

您看到與超過分割區容量相關的錯誤。

當您看到錯誤時StoragePartitionThroughputCapacityExceeded,會暫時超過分割區容量。這可能會由適應性容量或隨需容量自動處理。我們建議您檢閱資料模型,將讀取/寫入流量分散到更多分割區,以減少這些錯誤。Amazon Keyspaces 儲存分割區每秒可支援高達 1000 WCU和WRU 3000 RCU/RRU 每秒。若要進一步了解如何改善資料模型,以將讀取/寫入流量分散到更多分割區,請參閱 資料建模最佳實務:設計資料模型的建議

Write_Timeout 例外狀況也可能是同時寫入操作的速率提高,包括相同邏輯分割區中的靜態和非靜態資料。如果預期流量會執行多個並行寫入操作,其中包含相同邏輯分割區內的靜態和非靜態資料,建議您分別寫入靜態和非靜態資料。分別寫入資料也有助於最佳化輸送量成本。

您看到與超出連線請求速率相關的錯誤。

由於下列其中一個原因PerConnectionRequestRateExceeded,您看到 。

  • 您可能沒有為每個工作階段設定足夠的連線。

  • 您的連線可能比可用對等項少,因為您未正確設定VPC端點許可。如需VPC端點政策的詳細資訊,請參閱 使用 Amazon Keyspaces 的界面 VPC 端點

  • 如果您使用的是 4.x 驅動程式,請檢查您是否已啟用主機名稱驗證。根據預設,驅動程式會啟用TLS主機名稱驗證。此組態會導致 Amazon Keyspaces 顯示為驅動程式的單節點叢集。建議您關閉主機名稱驗證。

建議您遵循下列最佳實務,以確保您的連線和輸送量最佳化:

  • 設定CQL查詢輸送量調校。

    Amazon Keyspaces 每秒支援每秒最多 3,000 個TCP連線CQL的查詢,但驅動程式可以建立的連線數量沒有限制。

    大多數開放原始碼 Cassandra 驅動程式會建立與 Cassandra 的連線集區,並透過該連線集區載入平衡查詢。Amazon Keyspaces 向驅動程式公開 9 個對等 IP 地址。大多數驅動程式的預設行為是建立每個對等 IP 地址的單一連線。因此,使用預設設定的驅動程式CQL查詢輸送量上限為每秒 27,000 個CQL查詢。

    若要增加此數字,建議您增加驅動程式在其連線集區中維護的每個 IP 地址的連線數量。例如,將每個 IP 地址的最大連線數設定為 2 會將驅動程式的最大輸送量加倍,達到每秒 54,000 個CQL查詢。

  • 最佳化您的單節點連線。

    根據預設,大多數開放原始碼 Cassandra 驅動程式會在建立工作階段時,建立與system.peers資料表中公告之每個 IP 地址的一或多個連線。不過,某些組態可能會導致驅動程式連接至單一 Amazon Keyspaces IP 地址。如果驅動程式嘗試對對等節點進行SSL主機名稱驗證 (例如 DataStax Java 驅動程式),或者透過VPC端點連線,則可能會發生這種情況。

    若要取得與多個 IP 地址連線的驅動程式相同的可用性和效能,建議您執行下列動作:

我在資料匯入期間收到寫入逾時錯誤

使用 cqlshCOPY命令上傳資料時,您會收到逾時錯誤。

Failed to import 1 rows: WriteTimeout - Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'write_type': 'SIMPLE', 'consistency': 'LOCAL_QUORUM'}, will retry later, attempt 1 of 100

Amazon Keyspaces 使用 ReadTimeoutWriteTimeout 例外狀況來指示寫入請求何時因輸送量容量不足而失敗。為了協助診斷容量不足的例外狀況,Amazon Keyspaces 會在 Amazon 中發佈下列指標 CloudWatch。

  • WriteThrottleEvents

  • ReadThrottledEvents

  • StoragePartitionThroughputCapacityExceeded

若要解決資料載入期間容量不足的錯誤,請降低每個工作者的寫入速率或總擷取速率,然後重試上傳資料列。如需詳細資訊,請參閱步驟 4:配cqlsh COPY FROM置設置。如需更強大的資料上傳選項,請考慮使用 DSBulk,可從GitHub 儲存庫 取得。如需 step-by-step指示,請參閱 教學課程:使用將資料載入 Amazon Keyspaces DSBulk

我看不到鍵空間或資料表的實際儲存體大小

您看不到鍵空間或資料表的實際儲存體大小。

若要進一步了解資料表的儲存體大小,請參閱 在資料表層級評估您的成本。您也可以開始計算資料表中的資料列大小,來估計儲存體大小。計算資料列大小的詳細指示可於 取得估計 Amazon Keyspaces 中的行大小