Cassandra 文件

版本

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

密探

在 Cassandra 中,密探具有兩個功能

  • 它教導 Cassandra 關於您的網路拓撲的足夠知識,以便有效路由請求。

  • 它允許 Cassandra 在您的叢集中散佈複本,以避免相關的故障。它透過將機器分組為「資料中心」和「機架」來執行此操作。Cassandra 將盡力避免在同一個「機架」(實際上可能不是物理位置)上放置多個複本。

動態密探

動態密探會監控讀取延遲,以避免從已變慢的主機讀取。動態密探會使用 cassandra.yaml 上的下列屬性進行設定

  • dynamic_snitch:是否應啟用或停用動態密探。

  • dynamic_snitch_update_interval:100 毫秒,控制執行主機評分計算中較昂貴部分的頻率。

  • dynamic_snitch_reset_interval:10 分鐘,如果設定大於 0,這將允許將複本「固定」到主機,以增加快取容量。

  • dynamic_snitch_badness_threshold::壞度臨界值將控制固定主機必須比其他複製品差多少,動態 snitch 才會優先選擇其他複製品。這表示為一個代表百分比的雙精度數值。因此,值 0.2 表示 Cassandra 會繼續優先選擇靜態 snitch 值,直到固定主機比最快的慢 20%。

Snitch 類別

cassandra.yaml 中的 endpoint_snitch 參數應設定為實作 IEndpointSnitch 的類別,該類別將由動態 snitch 封裝,並決定兩個端點是否位於同一個資料中心或同一個機架上。Cassandra 提供現成的 snitch 實作

GossipingPropertyFileSnitch

這應該是您在生產環境中使用的首選 snitch。本機節點的機架和資料中心定義在 cassandra-rackdc.properties 中,並透過八卦傳播到其他節點。如果存在 cassandra-topology.properties,它會用作備用,允許從 PropertyFileSnitch 進行遷移。

SimpleSnitch

將策略順序視為接近度。這可以在停用讀取修復時改善快取區域性。僅適用於單資料中心部署。

PropertyFileSnitch

接近度由機架和資料中心決定,這些明確設定在 cassandra-topology.properties 中。

RackInferringSnitch

接近度由機架和資料中心決定,假設分別對應於每個節點 IP 位址的第 3 和第 2 個八位元組。除非這剛好符合您的部署慣例,否則最好將其用作撰寫自訂 Snitch 類別的範例,並以這種精神提供。

基於雲端的 snitch

這些 snitch 用於雲端環境,供應應商各不相同。所有基於雲端的 snitch 實作目前都擴充了 AbstractCloudMetadataServiceSnitch(它又擴充了 AbstractNetworkTopologySnitch)。

每個基於雲端的告密者都有自己的方法來解析節點所屬的機架和資料中心。AbstractCloudMetadataServiceSnitch 封裝了達成此目的最常見的裝置。所有基於雲端的告密者都會呼叫特定於各個雲端的 HTTP 服務。AbstractCloudMetadataServiceSnitch 的建構函式接受 AbstractCloudMetadataServiceConnector 的實作,而 AbstractCloudMetadataServiceConnector 實作了一個方法 apiCall,預設會對預先定義的 HTTP URL 執行 HTTP GET 要求,不傳送 HTTP 標頭,並預期收到 HTTP 程式碼 200 的回應。如果實作人員需要,也可以傳送各種 HTTP 標頭作為要求的一部分。

目前,AbstractCloudMetadataServiceConnector 唯一的實作是 DefaultCloudMetadataServiceConnector。如果使用者需要覆寫 AbstractCloudMetadataServiceConnector 的行為,使用者可以實作自己的連接器,並將其傳播到 AbstractCloudMetadataServiceSnitch 的建構函式。

所有基於雲端的告密者都接受 cassandra-rackdc.properties 中的這些屬性

metadata_url

用於擷取拓撲結構資訊的雲端服務 URL,這取決於雲端。

metadata_request_timeout

30s(30 秒)的預設值會在 apiCall 呼叫時設定連線逾時。換句話說,如果在該期間內沒有收到回應,針對 metadata_url 的要求就會逾時。

dc_suffix

預設為空字串,將附加到已解析的資料中心。

內建的基於雲端的告密者為

Ec2Snitch

適用於單一區域或啟用跨區域 VPC 的多個區域中的 EC2 部署(自 2017 年底開始提供,請參閱 AWS 公告)。從 EC2 API 載入區域和可用區域資訊。區域視為資料中心,可用區域視為機架。只使用私人 IP,因此只有在啟用跨區域 VPC 時,才會跨多個區域運作。

Ec2MultiRegionSnitch

使用公用 IP 作為廣播位址,以允許跨區域連線(因此,您也應該將種子位址設定為公用 IP)。您需要在公用 IP 防火牆上開啟 storage_portssl_storage_port(對於區域內流量,Cassandra 會在建立連線後切換到私人 IP)。

對於 Ec2 告密者,自 CASSANDRA-16555 起,可以選擇 AWS IMDS 版本。預設使用 IMDSv2。IMDS 版本由屬性 ec2_metadata_type 驅動,可以是 v1v2。可以透過 ec2_metadata_url(或 metadata_url)指定 IMDS 的自訂 URL,預設為 169.254.169.254,然後執行針對 /latest/meta-data/placement/availability-zone 端點的查詢。

IMDSv2 由必須先從 IDMSv2 擷取的權杖保護,而且必須在標頭中傳遞給 IDMSv2 的實際查詢。Ec2SnitchEc2MultiRegionSnitch 會自動執行此操作。唯一對使用者公開的組態參數是 ec2_metadata_token_ttl_seconds,預設設定為 21600。TTL 必須是介於 [30, 21600] 範圍內的整數。

AlibabaCloudSnitch

一個假設 ECS 區域為 DC,ECS 可用性區域為機架的告密者。此資訊可在節點的設定檔中取得。區域 ID 的格式類似於 cn-hangzhou-a,其中 cn 表示中國,hangzhou 表示杭州區域,a 表示 az id。我們使用 cn-hangzhou 作為 dc,並使用 a 作為區域 ID。預設情況下,此告密者的 metadata_url100.100.100.200/,且會對端點 /latest/meta-data/zone-id 執行 HTTP 要求。

AzureSnitch

Azure Snitch 會呼叫 /metadata/instance/compute?api-version=%s&format=json 端點,針對 169.254.169.254metadata_url,以解析資料中心和機架,並以 JSON 格式傳回回應,預設的 API 版本為 2021-12-13。API 的版本可透過 cassandra-rackdc.properties 中的屬性 azure_api_version 設定。資料中心會從回應的 location 欄位解析,而機架會先從 zone 欄位解析。當 zone 未設定,或為空字串時,它會從 platformFaultDomain 欄位解析。此解析值會加上字串 rack- 作為前綴。

GoogleCloudSnitch

Google Snitch 會呼叫 /computeMetadata/v1/instance/zone 端點,針對 metadata.google.internalmetadata_url,以解析資料中心和機架。