本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon DocumentDB 的故障
在某些情況下,例如某些類型的計劃維護,或者在不太可能發生主節點或可用區域故障的情況下,Amazon DocumentDB (與 MongoDB 相容性) 會偵測故障並取代主節點。容錯移轉期間,寫入時間會降至最低。這是因為主要節點的角色會容錯移轉至其中一個僅供讀取複本,而非必須建立並佈建新的主要節點。此故障偵測及複本提升可確保您能在提升完成時立即繼續寫入新的主要節點。
若要讓容錯移轉運作,您的叢集必須至少有兩個執行個體 — 一個主要執行個體和至少一個複本執行個體。
注意
本主題僅適用於以 Amazon DocumentDB 執行個體為基礎的原始叢集。它不適用於彈性或全域叢集。
控制容錯移轉目標
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"
}
}