メニュー
Amazon ElastiCache
ユーザーガイド (API Version 2015-02-02)

レプリケーション: 自動フェイルオーバーとマルチ AZ (Redis)

自動フェイルオーバー機能を備えた Amazon ElastiCache のマルチ AZ を Redis クラスター (API および AWS CLI ではレプリケーショングループ) で有効にすると、何らかの理由でクラスターの読み書き可能プライマリクラスターにアクセス不能になったり障害が発生したりした場合の、耐障害性が向上します。自動フェイルオーバーを備えた マルチ AZ は、レプリケーションをサポートする Redis クラスターでのみサポートされます。

自動フェイルオーバーの概要

レプリケーションをサポートする ElastiCache Redis クラスターは、API と CLI にあるノードグループと呼ばれる 1 つから最大 15 のシャードにより構成されています。各シャードは、プライマリノードと 1 つから 5 つまでのリードレプリカノードで構成されます。特定の状況においてクラスターでマルチ AZ を有効にすると、ElastiCache は自動的にプライマリノードの障害を検出し、リードレプリカノードを選択して、それをプライマリに昇格します。このような状況には、特定のタイプの計画されたメンテナンスや、プライマリノードやアベイラビリティーゾーンの障害という万一の場合が含まれます。この障害検出とレプリカの昇格により、昇格が完了したらすぐに新しいプライマリへの書き込みを再開できます。

また、ElastiCache は昇格されたレプリカのドメイン名サービス (DNS) 名を伝達します。これを行うのは、アプリケーションがプライマリエンドポイントに書き込みを行う場合、アプリケーションでエンドポイントの変更が必要なくなるためです。ただし、個々のエンドポイントから読み取りを行うため、プライマリに昇格されたレプリカのリードエンドポイントを新しいレプリカのエンドポイントに変更する必要があります。

通常、昇格プロセスの完了までには数分しかかかりません。このプロセスは、新しいプライマリを再び作成しプロビジョニングする (自動フェイルオーバーを備えたマルチ AZ を有効にしていない場合のプロセス) よりもはるかに高速です。

ElastiCache マネジメントコンソール、AWS CLI、または ElastiCache API を使用してマルチ AZ と自動フェイルオーバーを有効にできます。

自動フェイルオーバーとRedis マルチ AZ に関する注意事項

Redis マルチ AZ と自動フェイルオーバーでは、次の点に注意してください。

  • 自動フェイルオーバー機能を持つマルチ AZ は Redis バージョン 2.8.6 以降でのみサポートされます。

  • 自動フェイルオーバーを備えた Redis マルチ AZ は、ノードタイプ T1 ではサポートされていません。

  • 自動フェイルオーバーを備えた Redis マルチ AZ は、クラスターモードが有効で Redis バージョン 3.2.4 以降を実行している場合のみ、T2 ノードタイプでサポートされます。

  • Redis レプリケーションは同期されません。そのため、プライマリクラスターがレプリカにフェイルオーバーすると、レプリケーションの遅延のために少量のデータが失われる可能性があります。

  • プライマリに昇格させるレプリカを選択すると、ElastiCache はレプリケーションの遅延が最短のレプリカ (つまり最新の状態のレプリカ) を選択します。

  • リードレプリカをプライマリに昇格させる

    • 自動フェイルオーバーを備えたマルチ AZ が無効な場合のみ、リードレプリカをプライマリに昇格することができます。リードレプリカノードをプライマリに昇格するには、まず、クラスターで自動フェイルオーバーを備えたマルチ AZ を無効にし、昇格を実行して、再度自動フェイルオーバーを備えたマルチ AZ を有効にする必要があります。

    • Redis (クラスターモードが有効) クラスターでは、自動フェイルオーバーを備えたマルチ AZ を無効にはできません。したがって、Redis (クラスターモードが有効) クラスターではレプリカをプライマリに手動で昇格することはできません。

  • ElastiCache 自動フェイルオーバーとマルチ AZ および AOF (Append-Only File) は、相互に排他的です。一方を有効にすると、他方を有効にすることはできません。

  • アベイラビリティーゾーン全体で障害が発生するというまれなイベントによりノードの障害が発生した場合、そのアベイラビリティーゾーンがバックアップされているときにのみ、障害のあるプライマリに置き換わるレプリカが作成されます。たとえば、レプリケーショングループと、AZ-a のプライマリおよび AZ-b と AZ-c のレプリカを検討してみます。プライマリで障害が発生すると、レプリケーションの遅延が最短のレプリカがプライマリクラスターに昇格されます。その後、AZ-a がバックアップとなっていて使用可能な場合にのみ、ElastiCache は AZ-a 内 (障害が発生したプライマリがあった場所) に新しいレプリカを作成します。

  • プライマリをお客様が再起動した場合、自動フェイルオーバーはトリガーされません。他の再起動と障害は、自動フェイルオーバーをトリガーします。

  • プライマリが再起動すると、オンラインに戻ったときに常にデータがクリアされます。リードレプリカがクリアされたプライマリクラスターを検出すると、データのコピーがクリアされるため、データ損失が発生します。

  • リードレプリカが昇格されると、他のレプリカは新しいプライマリと同期されます。最初の同期の後、レプリカのコンテンツが削除され、新しいプライマリからのデータと同期されます。このため、レプリカにアクセスできない短い中断が発生します。この同期プロセスにより、レプリカとの同期中にプライマリで一時的にロードが増えます。この動作は、Redis のネイティブな動作であり、ElastiCache マルチ AZ 特有の動作ではありません。Redis のこの動作の詳細については、http://redis.io/topics/replication を参照してください。

重要

  • Redis バージョン 2.8.22 以降では、外部レプリカは許可されません。

  • バージョン 2.8.22 以前の Redis では、外部 Redis レプリカを、自動フェイルオーバーを備えたマルチ AZ を有効にした ElastiCache Redis クラスターに接続しないことをお勧めします。これはサポートされていない設定で、ElastiCache がフェイルオーバーと復旧を正しく実行できなくなるという問題が生じる可能性があります。ElastiCache クラスターに外部 Redis レプリカを接続する必要がある場合は、接続する前に必ず自動フェイルオーバーを備えたマルチ AZ が無効になっていることを確認してください。

マルチ AZ および自動フェイルオーバーレスポンスの障害シナリオ

自動フェイルオーバーを備えたマルチ AZ の導入前では、ElastiCache によって、クラスターの障害が発生したノードが検出され、再度作成されてプロビジョニングされたノードに置き換えられます。自動フェイルオーバーを備えたマルチ AZ を有効にすることで、障害が発生したプライマリノードは、レプリケーションの遅延が最短のレプリカにフェイルオーバーされます。選択されたレプリカは自動的にプライマリに昇格されます。このプロセスは、新しいプライマリノードを作成して再プロビジョニングするよりも大幅に高速です。通常は数分ほどで、クラスターへの書き込みが再び可能になります。

自動フェイルオーバーを備えたマルチ AZ が有効になると、ElastiCache によってプライマリノードの状態が継続的にモニタリングされます。プライマリノードに障害が発生した場合、障害の性質に基づいて次のいずれかのアクションが実行されます。

 

プライマリノードにのみ障害が発生した場合

プライマリノードでのみ障害が発生した場合は、レプリケーションの遅延が最短のリードレプリカがプライマリに昇格され、障害が発生したプライマリと同じアベイラビリティーゾーンで、置き換えリードレプリカが作成およびプロビジョニングされます。

画像: 障害が発生したプライマリノードの自動フェイルオーバー

障害が発生したプライマリノードの自動フェイルオーバー

プライマリノードのみで障害が発生した場合、ElastiCache マルチ AZ と自動フェイルオーバーにより次のようになります。

  1. 障害が発生したプライマリノードがオフラインになります。

  2. レプリケーションの遅延が最短のリードレプリカがプライマリに昇格されます。

    書き込みは、昇格プロセスが完了するとすぐに (通常は数分) 再開できます。アプリケーションがプライマリエンドポイントに書き込む場合、ElastiCache は、昇格されたレプリカの DNS 名を伝達するときに、書き込み用のエンドポイントを変更する必要はありません。

  3. 置き換えられたリードレプリカが起動し、プロビジョニングされます。

    ノードのディストリビューションが維持されるように、障害が発生したプライマリノードがあったアベイラビリティーゾーンで置き換えリードレプリカが起動されます。

  4. レプリカが新しいプライマリノードと同期されます。

新しいレプリカが使用可能になったら、アプリケーションで以下の変更を実行する必要があります:

  • プライマリエンドポイント – 新しいプライマリノードの DNS 名がプライマリエンドポイントに伝達されるため、アプリケーションに変更は加えません。

  • リードエンドポイント – 障害が発生したプライマリのリードエンドポイントを新しいレプリカのエンドポイントに置き換えます。

クラスターのエンドポイントの検索については、以下のトピックを参照してください。

 

プライマリノードといくつかのリードレプリカで障害が発生した場合

プライマリおよび少なくとも 1 つのリードレプリカで障害が発生した場合、利用可能でレプリケーションの遅延が最も少ないレプリカが、プライマリクラスターに昇格されます。また、障害が発生したノードおよびプライマリに昇格されたレプリカと同じアベイラビリティーゾーンで、新しいリードレプリカが作成およびプロビジョニングされます。

イメージ: 障害が発生したプライマリノードとリードレプリカの自動フェイルオーバー

プライマリノードと一部のリードレプリカに障害が発生した場合、ElastiCache マルチ AZ により次のようになります。

  1. 障害が発生したプライマリノードとリードレプリカがオフラインになります。

  2. レプリケーションの遅延が最短の使用可能なレプリカがプライマリノードに昇格されます。

    書き込みは、昇格プロセスが完了するとすぐに (通常は数分) 再開できます。アプリケーションがプライマリエンドポイントに書き込む場合、ElastiCache が、昇格されたレプリカの DNS 名を伝達するため、書き込み用のエンドポイントを変更する必要はありません。

  3. 複数の置き換えレプリカを作成してプロビジョニングします。

    ノードのディストリビューションが維持されるように、障害が発生したノードのアベイラビリティーゾーンで置き換えレプリカが作成されます。

  4. すべてのクラスターが新しいプライマリノードと同期されます。

新しいノードが使用可能になったら、アプリケーションに以下の変更を加える必要があります。

  • プライマリエンドポイント – 新しいプライマリノードの DNS 名がプライマリエンドポイントに伝達されるため、アプリケーションに変更は加えません。

  • リードエンドポイント – 障害が発生したプライマリとレプリカのリードエンドポイントを新しいレプリカのノードエンドポイントに置き換えます。

 

クラスター全体に障害が発生した場合

すべてに障害が発生した場合、すべてのノードは、元のノードと同じアベイラビリティーゾーンで再作成され、プロビジョニングされます。

このシナリオでは、クラスター内のすべてのデータがクラスター内のすべてのノードの障害のために失われます。これはまれにしか発生しません。

画像: 障害が発生したクラスターの自動フェイルオーバー

クラスター全体に障害が発生した場合、ElastiCache マルチ AZ により次のようになります。

  1. 障害が発生したプライマリノードとリードレプリカがオフラインになります。

  2. 置き換えプライマリノードが作成され、プロビジョニングされます。

  3. 複数の置き換えレプリカを作成してプロビジョニングします。

    ノードのディストリビューションが維持されるように、障害が発生したノードのアベイラビリティーゾーンで置き換えレプリカが作成されます。

    クラスター全体に障害が発生したため、データが失われ、すべての新しいノードがコールド起動されます。

置き換え先の各ノードには置き換え元のノードと同じエンドポイントが含まれるため、アプリケーションでエンドポイントを変更する必要はありません。

レプリケーショングループのエンドポイントの検索については、次のトピックを参照してください:

耐障害性レベルを上げるために、プライマリノードとリードレプリカは別々のアベイラビリティーゾーンに作成することをお勧めします。

マルチ AZ で自動フェイルオーバーを有効にする

ElastiCache コンソール、AWS CLI、または ElastiCache API を使用して、クラスター (API または CLI ではレプリケーショングループ) の作成時や変更時に、自動フェイルオーバーを備えたマルチ AZ を有効にすることができます。

自動フェイルオーバーを備えたマルチ AZ を有効にできるのは、使用可能なリードレプリカが 1 つ以上ある Redis クラスターに対してのみです。レプリケーションが有効なクラスターの作成については、「レプリカを持つ Redis クラスターの作成」を参照してください。レプリケーションが有効なクラスターへのリードレプリカの追加については、「Redis クラスターへのリードレプリカの追加」を参照してください。

マルチ AZ で自動フェイルオーバーを有効にする (コンソール)

ElastiCache コンソールを使用して、新しい Redis クラスターの作成時や、レプリケーションが有効な既存の Redis クラスターの変更時に、自動フェイルオーバーを備えたマルチ AZ を有効にすることができます。

マルチ AZ と自動フェイルオーバーはデフォルトで有効になり、Redis (クラスターモードが有効) クラスターでは無効にすることはできません。

ElastiCache コンソールを使用してクラスターを作成するときにマルチ AZ で自動フェイルオーバーを有効にする

このプロセスの詳細については、「Redis (クラスターモードが無効) クラスターの作成 (コンソール)」を参照してください。1 つ以上のレプリカがあることを確認し、自動フェイルオーバーを備えたマルチ AZ を有効にしてください。

既存のクラスターで自動フェイルオーバーを備えたマルチ AZ を有効にする (コンソール)

このプロセスの詳細については、「クラスターの変更 (コンソール)」を参照してください。

マルチ AZ で自動フェイルオーバーを有効にする (AWS CLI)

次のコード例では、AWS CLI を使用して、レプリケーショングループ redis12 でマルチ AZ と自動フェイルオーバーを有効にすることができます。

重要

レプリケーショングループ redis12 が既に存在しており、少なくとも 1 個の利用可能なリードレプリカが必要となります。

Linux, macOS, or Unix 用:

Copy
aws elasticache modify-replication-group \ --replication-group-id redis12 \ --automatic-failover-enabled \ --apply-immediately

Windows の場合:

Copy
aws elasticache modify-replication-group ^ --replication-group-id redis12 ^ --automatic-failover-enabled ^ --apply-immediately

このコマンドの JSON 出力は次のようになります。

{
    "ReplicationGroup": {
        "Status": "modifying", 
        "Description": "One shard, two nodes", 
        "NodeGroups": [
            {
                "Status": "modifying", 
                "NodeGroupMembers": [
                    {
                        "CurrentRole": "primary", 
                        "PreferredAvailabilityZone": "us-west-2b", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-001.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-001"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2a", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-002.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-002"
                    }
                ], 
                "NodeGroupId": "0001", 
                "PrimaryEndpoint": {
                    "Port": 6379, 
                    "Address": "redis12.v5r9dc.ng.0001.usw2.cache.amazonaws.com"
                }
            }
        ], 
        "ReplicationGroupId": "redis12", 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabling", 
        "SnapshotWindow": "07:00-08:00", 
        "SnapshottingClusterId": "redis12-002", 
        "MemberClusters": [
            "redis12-001", 
            "redis12-002"
        ], 
        "PendingModifiedValues": {}
    }
}

詳細については、AWS CLI コマンドリファレンスの以下のトピックを参照してください。

マルチ AZ で自動フェイルオーバーを有効にする (ElastiCache API)

次のコード例では、ElastiCache API を使用して、レプリケーショングループ redis12 でマルチ AZ と自動フェイルオーバーを有効にすることができます。

注記

この例を使用するには、レプリケーショングループ redis12 が既に存在していて、少なくとも 1 個の利用可能なリードレプリカがある必要があります。

Copy
https://elasticache.us-west-2.amazonaws.com/ ?Action=ModifyReplicationGroup &ApplyImmediately=true &AutoFailover=true &ReplicationGroupId=redis12 &Version=2015-02-02 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20140401T192317Z &X-Amz-Credential=<credential>

詳細については、ElastiCache API リファレンスの以下のトピックを参照してください。

マルチ AZ と自動フェイルオーバーのテスト

マルチ AZ と自動フェイルオーバーを有効にしたら、ElastiCache コンソール、AWS CLI、または ElastiCache API を使用してテストできます。

テストを行う場合、以下の点に注意してください。

  • このオペレーションを使用して、任意のローリング期間の 24 時間あたり、最大 5 つのシャード (ElastiCache API および AWS CLI ではノードグループと呼ばれます) で自動フェイルオーバーをテストできます。

  • 別のクラスターのシャード (API および CLI ではレプリケーショングループと呼ばれます) でこのオペレーションを呼び出す場合、同時に呼び出しを行うことができます。

  • 同じ Redis (クラスターモードが有効) レプリケーショングループの異なるシャードでこのオペレーションを複数回実行する場合、それ以降の呼び出しを行う前に、最初のノード置き換えを完了する必要があります。

  • ノード置き換えが完了しているかどうか調べるには、Amazon ElastiCache コンソール、AWS CLI、または ElastiCache API を使用してイベントを確認できます。次の自動フェイルオーバーに関連するイベントを検索します。ここでは、発生順にイベントを示します。

    1. レプリケーショングループメッセージ: Test Failover API called for node group <node-group-id>

    2. キャッシュクラスターメッセージ: Failover from master node <primary-node-id> to replica node <node-id> completed

    3. レプリケーショングループメッセージ: Failover from master node <primary-node-id> to replica node <node-id> completed

    4. キャッシュクラスターメッセージ: Recovering cache nodes <node-id>

    5. キャッシュクラスターメッセージ: Finished recovery for cache nodes <node-id>

     

    詳細については、以下を参照してください。

 

AWS マネジメントコンソールを使用した自動フェイルオーバーのテスト

次の手順では、自動フェイルオーバーのテストについて説明します。

自動フェイルオーバーをテストするには

  1. AWS マネジメントコンソールにサインインし、ElastiCache コンソール(https://console.aws.amazon.com/elasticache/)を開きます。

  2. 左のナビゲーションペインで、[Redis] を選択します。

  3. Redis クラスターの一覧で、テストするクラスターの名前の左にあるチェックボックスをオンにします。このクラスターには、少なくとも 1 つのリードレプリカノードが必要です。

  4. [Details] エリアで、このクラスターでマルチ AZ が有効になっていることを確認します。クラスターでマルチ AZ が有効になっていない場合は、別のクラスターを選択するか、このクラスターを変更してマルチ AZ を有効にします。詳細については、「クラスターの変更 (コンソール)」を参照してください。

    イメージ: マルチ AZ が有効な Redis クラスターの [Details] エリア
  5. Redis (クラスターモードが無効) で、クラスターの名前を選択します。

    Redis (クラスターモードが有効) で、以下を実行します。

    1. クラスターの名前を選択します。

    2. [Shards] ページで、フェイルオーバーをテストするシャード (API および CLI ではノードグループと呼ばれます) のシャード名を選択します。

  6. [Nodes] ページで [Failover Primary] を選択します。

  7. [Continue] を選択してプライマリをフェイルオーバーするか、[Cancel] を選択してプライマリノードへのフェイルオーバーをキャンセルします。

    フェイルオーバープロセス中は、コンソールでノードのステータスが [available] と継続して表示されます。フェイルオーバーテストの進捗状況を追跡するには、コンソールのナビゲーションペインから [Events] を選択します。[Events] タブで、フェイルオーバーの開始 (Test Failover API called) と完了 (Recovery completed) を示すイベントを監視します。

 

AWS CLI を使用した自動フェイルオーバーのテスト

AWS CLI オペレーション test-failover を使用して、自動フェイルオーバーが有効なクラスターを持つマルチ AZ で自動フェイルオーバーをテストできます。

Parameters

  • --replication-group-id – 必須. テストするレプリケーショングループ (コンソールではクラスター)。

  • --node-group-id – 必須. 自動フェイルオーバーをテストするノードグループの名前。ローリング期間の 24 時間あたり、最大 5 つのノードグループをテストできます。

次の例では、AWS CLI を使用して、Redis (クラスターモードが有効) クラスター redis00 のノードグループ redis00-0003 で自動フェイルオーバーをテストします。

例 自動フェイルオーバーのテスト

Linux, macOS, or Unix 用:

Copy
aws elasticache test-failover \ --replication-group-id redis00 \ --node-group-id redis00-0003

Windows の場合:

Copy
aws elasticache test-failover ^ --replication-group-id redis00 ^ --node-group-id redis00-0003

フェイルオーバーの進行状況を追跡するには、AWS CLI describe-events オペレーションを使用します。

詳細については、以下を参照してください。

 

ElastiCache API を使用した自動フェイルオーバーのテスト

ElastiCache API オペレーション TestFailover を使用して、自動フェイルオーバーが有効なクラスターを持つマルチ AZ で自動フェイルオーバーをテストできます。

Parameters

  • ReplicationGroupId – 必須. テストするレプリケーショングループ (コンソールではクラスター)。

  • NodeGroupId – 必須. 自動フェイルオーバーをテストするノードグループの名前。ローリング期間の 24 時間あたり、最大 5 つのノードグループをテストできます。

次の例では、レプリケーショングループ (コンソールではクラスター) redis00 のノードグループ redis00-0003 で、自動フェイルオーバーをテストします。

例 自動フェイルオーバーのテスト

Copy
https://elasticache.us-west-2.amazonaws.com/ ?Action=TestFailover &NodeGroupId=redis00-0003 &ReplicationGroupId=redis00 &Version=2015-02-02 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20140401T192317Z &X-Amz-Credential=<credential>

フェイルオーバーの進行状況を追跡するには、ElastiCache API DescribeEvents オペレーションを使用します。

詳細については、以下を参照してください。