連接到 Amazon DocumentDB 作為複本集 - Amazon DocumentDB

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

連接到 Amazon DocumentDB 作為複本集

當您針對 Amazon DocumentDB 進行開發 (具有 MongoDB 相容性) 時,建議您以複本集的形式連接到叢集,並使用驅動程式的內建讀取偏好設定功能將讀取分發到複本執行個體。本節將深入介紹這意味著什麼,並說明如何使用 Python 作為一個複本集連接到您的 Amazon DocumentDB 叢集作為一個複本集。SDK

Amazon DocumentDB 有三個端點,您可以用來連接到您的叢集:

  • 叢集端點

  • 讀取器端點

  • 執行個體端點

在大多數情況下,當您連線到 Amazon DocumentDB 時,我們建議您使用叢集端點。CNAME這是指向叢集中的主要執行個體,如下圖所示。

使用SSH通道時,我們建議您使用叢集端點連線到叢集,並且不要嘗試以複本集模式 (即在連接字串replicaSet=rs0中指定) 進行連線,因為這會導致錯誤。

注意

如需 Amazon 文件資料庫端點的詳細資訊,請參閱。Amazon DocumentDB 端點

顯示 Amazon DocumentDB 端點 (包括叢集、讀取器和執行個體端點) 的圖表。

使用叢集端點時,您可以連接至處在複本集模式下的叢集。您就可以使用內建的讀取偏好設定驅動程式功能。在下列範例中,指定/?replicaSet=rs0代表您SDK要連線為複本集的。如果您省略 /?replicaSet=rs0',用戶端會將所有請求路由到叢集端點,也就是您的主要執行個體。

## Create a MongoDB client, open a connection to Amazon DocumentDB as a ## replica set and specify the read preference as secondary preferred client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0')

作為複本集連接的優點是,它可以讓您SDK自動探索叢集拓撲,包括何時從叢集新增或移除執行個體。然後,您就可以將讀取請求路由至複本執行個體,提高叢集的使用效率。

當您以複本集形式連接時,您可以指定 readPreference 進行連線。如果您指定的是 secondaryPreferred 的讀取偏好設定,則用戶端會將讀取查詢路由到您的複本,並將查詢寫入到您的主要執行個體 (如下圖所示)。這是較佳的叢集資源使用方式。如需詳細資訊,請參閱讀取偏好選項

## Create a MongoDB client, open a connection to Amazon DocumentDB as a ## replica set and specify the read preference as secondary preferred client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')
圖表顯示 Amazon DocumentDB:。readPreference secondaryPreferred

從 Amazon DocumentDB 複本讀取的內容最終是一致的。它們會依據主要執行個體上的相同寫入順序來傳回資料,而且複寫延遲通常少於 50 毫秒。您可以使用 Amazon CloudWatch 指標DBInstanceReplicaLag和監控叢集的複本延遲DBClusterReplicaLagMaximum。如需詳細資訊,請參閱使用監控 Amazon DocumentDB CloudWatch

與傳統的整合式資料庫架構不同,Amazon DocumentDB 會區隔儲存和運算。假設您使用這種現代架構,那麼我們鼓勵您讀取複本執行個體上的擴展。複本執行個體上的讀取不會封鎖從主要執行個體複寫的寫入。您在叢集中最多可以新增 15 個讀取複本執行個體,並將讀取量擴展到每秒數百萬次讀取。

以複本集形式連接,並將讀取分配至複本的主要優點,在於其會在叢集中增加可供您應用程式使用的整體資源。我們建議以複本集形式連接來進行最佳實務。此外,我們最常在下列案例中建議使用這個做法:

  • 您正在使用近 100% CPU 的主要項目。

  • 緩衝區快取命中率接近零。

  • 您的個別執行個體的連線或游標已達上限。

您可以選擇向上擴展叢集執行個體大小,而且在某些情況下,這可能是擴展叢集的最佳方式。但是,您也應該考慮如何提高叢集中既有複本的使用量。這可讓您直接增加擴展,而不用增加使用更大執行個體類型的成本。我們也建議您使用警示來監視和警示這些限制 (也就是CPUUtilizationDatabaseConnections、和BufferCacheHitRatio),以便您知道資源何時被大量使 CloudWatch 用。

如需詳細資訊,請參閱下列主題:

使用叢集連線

請考慮使用叢集中所有連線的案例。例如,r5.2xlarge 執行個體的連線數目限為 4,500 個 (而開放游標限制為 450 個)。如果您建立三個執行個體 Amazon DocumentDB 叢集,並僅使用叢集端點連線到主執行個體,則開放連線和游標的叢集限制分別為 4,500 和 450。如果您建立的應用程式會使用多個將從容器啟動的 Worker,那麼您可能會達到這些限制。這些容器會一次開啟多個連線,並使叢集達到飽和。

相反地,您可以將讀取作為複本集連線到 Amazon DocumentDB 叢集,並將讀取分發到複本執行個體。接著,您可以將叢集中的可用連線和游標數量成功增為三倍,分別為 13,500 和 1,350。將更多執行個體新增至叢集時,只會增加讀取工作負載的連線數和游標數。如果您需要在叢集中增加寫入連線數目,建議您增加執行個體大小。

注意

largexlarge2xlarge 執行個體的連線數目會隨著執行個體大小增加,最多達 4,500 個。4xlarge 個或超過 4,500 個執行個體時,每個執行個體的連線數目上限。如需依執行個體類型限制的詳細資訊,請參閱 執行個體限制

一般而言,我們不建議您使用 secondary 的讀取偏好設定來連接至叢集 。原因在於如果您的叢集中沒有複本執行個體,該讀取將會失敗。例如,假設您有一個雙執行個體 Amazon DocumentDB 叢集,其中包含一個主要複本和一個複本。如果複本發生問題,則設為 secondary 之連線集區的讀取請求將會失敗。使用 secondaryPreferred 的優點,在於如果用戶端找不到適合的複本執行個體來進行連接,則其會回復到主要執行個體來進行讀取。

多個連線集區

在某些情況下,應用程式中的讀取必須具有 read-after-write 一致性,這只能從 Amazon DocumentDB 中的主執行個體提供。在這些情況下,您可以建立兩個用戶端連線集區:一個用於寫入,另一個用於需要一 read-after-write 致性的讀取。若要這樣做,您的程式碼應該與下列類似。

## Create a MongoDB client, ## open a connection to Amazon DocumentDB as a replica set and specify the readPreference as primary clientPrimary = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=primary') ## Create a MongoDB client, ## open a connection to Amazon DocumentDB as a replica set and specify the readPreference as secondaryPreferred secondaryPreferred = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')

另一種選擇是建立單一連線集區,並覆寫指定集合的讀取偏好設定。

##Specify the collection and set the read preference level for that collection col = db.review.with_options(read_preference=ReadPreference.SECONDARY_PREFERRED)

Summary

若要提高叢集資源的使用效能,建議您使用複本集模式連接至您的叢集。如果您的應用程式適合這種做法,您可以將讀取分配到該複本執行個體,讀取擴展您的應用程式。