Amazon DocumentDB 容錯移轉 - Amazon DocumentDB

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

Amazon DocumentDB 容錯移轉

在某些情況下,例如特定類型的計劃維護,或者在主要節點或可用區域故障時,Amazon DocumentDB (具有 MongoDB 兼容性) 會檢測容錯移轉並替換主要節點。容錯移轉期間,寫入時間會降至最低。這是因為主要節點的角色會容錯移轉至其中一個僅供讀取複本,而非必須建立並佈建新的主要節點。此故障偵測及複本提升可確保您能在提升完成時立即繼續寫入新的主要節點。

若要讓容錯移轉正常運作,您的叢集至少必須有兩個執行個體 — 一個主要執行個體和至少一個複本執行個體。

控制容錯移轉目標

Amazon DocumentDB 為您提供容錯移轉方案,作為容錯移轉發生時,控制將哪個複本執行個體提升成主要執行個體的方法。

容錯移轉方案

每個複本執行個體都會關聯至一個容錯移轉方案 (0—15)。如果因為維護或不太可能出現的硬件故障而發生容錯移轉,主要執行個體會容錯移轉至優先順序最高的複本 (編號最小的方案)。如果多個複本有相同的優先順序方案,主要執行個體會容錯移轉至該層的複本,該複本大小最接近上一個主複本。

選擇一組複本,並將其容錯移轉方案設定為 0 (最高優先順序),就可以確保容錯移轉會提升到該群組的其中一個複本。為複本指派低優先順序方案 (數字較大),就可以有效防止容錯移轉發生時,將特定複本提升成主要執行個體。這在特定複本接收來自應用程式的繁重使用情形時非常有用,容錯移轉至這些複本的其中一個將會對關鍵應用程式造成負面影響。

您可以在建立執行個體時設定容錯移轉方案,或在稍後進行修改。藉由修改執行個體來設定執行個體容錯移轉方案,並不會觸發容錯移轉。如需詳細資訊,請參閱下列主題:

手動啟動容錯移轉時,您有兩種方式來控制要將哪個執行個體複本提升為主要執行個體:透過前面所述的容錯移轉方案和 --target-db-instance-identifier 參數。

--target-db-instance-identifier

若要進行測試,您可以使用 failover-db-cluster 操作強制容錯移轉事件發生。您可以使用 --target-db-instance-identifier 參數來指定將哪些複本提升成主要執行個體。使用 --target-db-instance-identifier 參數會取代容錯移轉優先順序方案。如果您未指定 --target-db-instance-identifier 參數,主要容錯移轉會根據容錯移轉優先順序方案。

容錯移轉期間會發生什麼情況?

Amazon DocumentDB 會自動處理容錯移轉,讓您的應用程式可以盡快恢復資料庫操作,而無須人為介入管理。

  • 如果在故障轉移時,如果您在相同或不同的可用區域中有 Amazon DocumentDB 副本實例:Amazon DocumentDB 會翻轉執行個體的正式名稱記錄 (CNAME) 以指向執行狀態正常的複本,該複本轉而提升成新的主複本。容錯移轉從開始到結束通常可在 30 秒內完成。

  • 如果您沒有 Amazon DocumentDB 複本執行個體 (例如,單個執行個體叢集),請執行以下操作:Amazon DocumentDB 會嘗試在與原始執行個體所在的相同可用區域內建立新的執行個體。已盡力進行這種原始執行個體的取代操作,但可能不成功,例如,在出現會廣泛影響可用區域的問題時。

您的應用程式應該會在發生連線中斷時重試資料庫連線。

測試容錯移轉

叢集的容錯移轉會將叢集中的其中一個 Amazon DocumentDB 複本 (只讀執行個體) 提升成主要執行個體 (叢集寫入器)。

主要執行個體故障時,Amazon DocumentDB 會自動容錯移轉至 Amazon DocumentDB 複本 (如果有的話)。當您想要模擬主要執行個體故障以進行測試時,可以強制容錯移轉。叢集中的每個執行個體都有自己的端點地址。因此,當容錯移轉完成時,您需要清除和重新建立任何使用這些端點地址的現有連線。

若要強制容錯移轉,請搭配這些參數使用 failover-db-cluster 操作。

  • --db-cluster-identifier - 必要項目。要容錯移轉之叢集的名稱。

  • --target-db-instance-identifier— 選用。要提升為主要執行個體之執行個體的名稱。

以下操作會強制容錯移轉 sample-cluster 叢集。Amazon DocumentDB 會根據容錯移轉方案優先順序選擇執行個體。

針對 Linux、macOS 或 Unix:

aws docdb failover-db-cluster \ --db-cluster-identifier sample-cluster

針對 Windows:

aws docdb failover-db-cluster ^ --db-cluster-identifier sample-cluster

以下操作會強制容錯移轉 sample-cluster 叢集,指定 sample-cluster-instance 為要提升的主要角色。(請注意輸出中的 "IsClusterWriter": true。)

針對 Linux、macOS 或 Unix:

aws docdb failover-db-cluster \ --db-cluster-identifier sample-cluster \ --target-db-instance-identifier sample-cluster-instance

針對 Windows:

aws docdb failover-db-cluster ^ --db-cluster-identifier sample-cluster ^ --target-db-instance-identifier sample-cluster-instance

此操作的輸出將會如下所示 (JSON 格式)。

{ "DBCluster": { "HostedZoneId": "Z2SUY0A1719RZT", "Port": 27017, "EngineVersion": "3.6.0", "PreferredMaintenanceWindow": "thu:04:05-thu:04:35", "BackupRetentionPeriod": 1, "ClusterCreateTime": "2018-06-28T18:53:29.455Z", "AssociatedRoles": [], "DBSubnetGroup": "default", "MasterUsername": "master-user", "Engine": "docdb", "ReadReplicaIdentifiers": [], "EarliestRestorableTime": "2018-08-21T00:04:10.546Z", "DBClusterIdentifier": "sample-cluster", "ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "DBClusterMembers": [ { "DBInstanceIdentifier": "sample-cluster-instance", "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1, "IsClusterWriter": true }, { "DBInstanceIdentifier": "sample-cluster-instance-00", "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1, "IsClusterWriter": false }, { "DBInstanceIdentifier": "sample-cluster-instance-01", "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1, "IsClusterWriter": false } ], "AvailabilityZones": [ "us-east-1b", "us-east-1c", "us-east-1a" ], "DBClusterParameterGroup": "default.docdb3.6", "Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "IAMDatabaseAuthenticationEnabled": false, "AllocatedStorage": 1, "LatestRestorableTime": "2018-08-22T21:57:33.904Z", "PreferredBackupWindow": "00:00-00:30", "StorageEncrypted": false, "MultiAZ": true, "Status": "available", "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster", "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-12345678" } ], "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ" } }