

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

# Amazon DocumentDB 容錯移轉
<a name="failover"></a>

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

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

**注意**  
本主題僅適用於原始 Amazon DocumentDB 執行個體型叢集。它不適用於彈性或全域叢集。

## 控制容錯移轉目標
<a name="failover-target_control"></a>

Amazon DocumentDB 為您提供容錯移轉層，作為控制發生容錯移轉時，哪些複本執行個體會提升為主要執行個體的方法。

**容錯移轉方案**  
每個複本執行個體都與容錯移轉層 (0–15) 相關聯。當由於維護或不太可能的硬體故障而發生容錯移轉時，主要執行個體會容錯移轉至具有最高優先順序 （最低編號層） 的複本。如果多個複本具有相同的優先順序層，則主要 會容錯移轉到該層的複本，該複本的大小最接近先前的主要複本。

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

您可以在建立執行個體時設定容錯移轉方案，或在稍後進行修改。藉由修改執行個體來設定執行個體容錯移轉方案，並不會觸發容錯移轉。如需詳細資訊，請參閱下列主題：
+ [將 Amazon DocumentDB 執行個體新增至叢集](db-instance-add.md)
+ [修改 Amazon DocumentDB 執行個體](db-instance-modify.md)

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

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



## 容錯移轉期間會發生什麼情況
<a name="failover-what_happens"></a>

Amazon DocumentDB 會自動處理容錯移轉，讓您的應用程式可以盡快恢復資料庫操作，而無需管理介入。
+ 如果容錯移轉時，在相同或不同的可用區域中有 Amazon DocumentDB 複本執行個體：Amazon DocumentDB 會翻轉執行個體的正式名稱記錄 (CNAME)，以指向運作狀態良好的複本，進而提升為新的主要複本。容錯移轉從開始到結束通常可在 30 秒內完成。
+ 如果您沒有 Amazon DocumentDB 複本執行個體 （例如單一執行個體叢集）：Amazon DocumentDB 會嘗試在與原始執行個體相同的可用區域中建立新的執行個體。已盡力進行這種原始執行個體的取代操作，但可能不成功，例如，在出現會廣泛影響可用區域的問題時。

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

## 測試容錯移轉
<a name="failover-testing"></a>

叢集的容錯移轉會將叢集中的其中一個 Amazon DocumentDB 複本 （唯讀執行個體） 提升為主要執行個體 （叢集寫入器）。

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

若要強制容錯移轉，請搭配這些參數使用 `failover-db-cluster` 操作。
+ `--db-cluster-identifier` - 必要項目。要容錯移轉之叢集的名稱。
+ `--target-db-instance-identifier`- 選用。要提升為主要執行個體之執行個體的名稱。

**Example**  
以下操作會強制容錯移轉 `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"
    }
}
```