5.8. 障害からの復旧
ストレージ管理者は、ミラーリングが設定された別のストレージクラスターからデータを回復する方法を理解することで、致命的なハードウェアの障害に備えることができます。
この例では、プライマリーストレージクラスターは site-a
と呼ばれ、セカンダリーストレージクラスターは site-b
と呼ばれます。また、ストレージクラスターにはどちらも image1
と image2
の 2 つのイメージが含まれる data
プールがあります。
5.8.1. 前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 一方向または双方向ミラーリングが設定されている。
5.8.2. 障害回復
2 つ以上の Red Hat Ceph Storage クラスターの間でブロックデータを非同期にレプリケーションすることで、データセンターで大規模な障害が発生した場合にデータの損失を防ぎ、ダウンタイムが削減されます。このような障害の影響は 大規模な爆発半径 とも呼ばれ、広範囲にわたります。また、送配電網への影響や、天然災害などが原因となります。
顧客データはこれらのシナリオに備え、保護する必要があります。ボリュームは、Micre Recovery Pointive (RPO) および Recovery Time Objective (RTO) ターゲット内で、一貫性と効率性を使用してレプリケーションする必要があります。このソリューションは、Dnaly Area Network- Disaster Recovery (WAN-DR) と呼ばれます。
このようなシナリオでは、プライマリーシステムとデータセンターを復元することが困難です。最も簡単に復元する方法として、別の Red Hat Ceph Storage クラスター (障害回復サイト) にアプリケーションをフェイルオーバーして、利用可能な最新のデータのコピーでクラスターを稼働させることなどが挙げられます。このような障害シナリオから回復するのに使用されるソリューションは、アプリケーションによりガイドされます。
- Recovery Point Objective (RPO): 最悪の場合にアプリケーションが許容するデータ損失量。
- Recovery Time Objective (RTO): 利用可能なデータの最新コピーで、アプリケーションをオンラインに戻すのにかかる時間。
関連情報
- 詳細は、Red Hat Ceph Storage ブロックデバイスガイドの Ceph ブロックデバイスのミラーリング セクションを参照してください。
- 暗号化された状態のデータ転送の詳細は、Red Hat Ceph Storage データのセキュリティーおよび強化ガイドの 転送中での暗号化 セクションを参照してください。
5.8.3. 一方向ミラーリングを使用した障害からの復旧
一方向のミラーリングで障害から回復するには、以下の手順を使用します。以下で、プライマリークラスターを終了してからセカンダリークラスターにフェイルオーバーする方法、およびフェイルバックする方法が紹介します。シャットダウンは規定の順序で行うことも、順序関係なく行うこともできます。
一方向ミラーリングは、複数のセカンダリーサイトをサポートします。追加のセカンダリークラスターを使用している場合は、セカンダリークラスターの中から 1 つ選択してフェイルオーバーします。フェイルバック中に同じクラスターから同期します。
5.8.4. 双方向ミラーリングを使用した障害からの復旧
双方向ミラーリングで障害から回復するには、以下の手順を使用します。以下で、プライマリークラスターを終了してからセカンダリークラスターのミラーリングデータにフェイルオーバーする方法、およびフェイルバックする方法が紹介します。シャットダウンは、正常でもそうでなくても構いません。
関連情報
- イメージのデモート、プロモート、および同期の詳細は、Red Hat Ceph Storage ブロックデバイスガイドの イメージでのミラーリングの設定 セクションを参照してください。
5.8.5. 正常なシャットダウン後のフェイルオーバー
正常にシャットダウンした後にセカンダリーストレージクラスターにファイルオーバーします。
前提条件
- 少なくとも実行中の Red Hat Ceph Storage クラスターが 2 台ある。
- ノードへのルートレベルのアクセス。
- 一方向ミラーリング を使用して設定されるプールのミラーリングまたはイメージミラーリング。
手順
- プライマリーイメージを使用するクライアントをすべて停止します。この手順は、どのクライアントがイメージを使用するかにより異なります。たとえば、イメージを使用する OpenStack インスタンスからボリュームの割り当てを解除します。
site-a
クラスターのモニターノードで以下のコマンドを実行して、site-a
クラスターにあるプライマリーイメージをデモートします。構文
rbd mirror image demote POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image demote data/image1 [root@rbd-client ~]# rbd mirror image demote data/image2
site-b
クラスターにあるプライマリー以外のイメージをプロモートするには、site-b
クラスターのモニターノードで以下のコマンドを実行します。構文
rbd mirror image promote POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image promote data/image1 [root@rbd-client ~]# rbd mirror image promote data/image2
しばらくすると、
site-b
クラスターのモニターノードからイメージのステータスを確認します。イメージのステータスは、up+stopped
の状態を表示し、プライマリーとしてリストされているはずです。[root@rbd-client ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: local image is primary last_update: 2019-04-17 16:04:37 [root@rbd-client ~]# rbd mirror image status data/image2 image2: global_id: 596f41bc-874b-4cd4-aefe-4929578cc834 state: up+stopped description: local image is primary last_update: 2019-04-17 16:04:37
- イメージへのアクセスを再開します。この手順は、どのクライアントがイメージを使用するかにより異なります。
関連情報
- Red Hat OpenStack Platform ストレージガイドの ブロックストレージおよびボリューム の章を参照してください。
5.8.6. 正常にシャットダウンされなかった場合のフェイルオーバー
正常でないシャットダウン後にセカンダリーストレージクラスターにフェイルオーバーします。
前提条件
- 少なくとも実行中の Red Hat Ceph Storage クラスターが 2 台ある。
- ノードへのルートレベルのアクセス。
- 一方向ミラーリング を使用して設定されるプールのミラーリングまたはイメージミラーリング。
手順
- プライマリーストレージクラスターが停止していることを確認します。
- プライマリーイメージを使用するクライアントをすべて停止します。この手順は、どのクライアントがイメージを使用するかにより異なります。たとえば、イメージを使用する OpenStack インスタンスからボリュームの割り当てを解除します。
site-b
ストレージクラスターの Ceph Monitor ノードからプライマリー以外のイメージをプロモートします。site-a
ストレージクラスターにデモートが伝播されないので、--force
オプションを使用します。構文
rbd mirror image promote --force POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image promote --force data/image1 [root@rbd-client ~]# rbd mirror image promote --force data/image2
site-b
ストレージクラスターの Ceph Monitor ノードからイメージのステータスを確認します。状態として、up+stopping_replay
が、説明にforce promoted
と表示されるはずです。例
[root@rbd-client ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopping_replay description: force promoted last_update: 2019-04-17 13:25:06 [root@rbd-client ~]# rbd mirror image status data/image2 image2: global_id: 596f41bc-874b-4cd4-aefe-4929578cc834 state: up+stopping_replay description: force promoted last_update: 2019-04-17 13:25:06
関連情報
- Red Hat OpenStack Platform ストレージガイドの ブロックストレージおよびボリューム の章を参照してください。
5.8.7. フェイルバックの準備
2 つのストレージクラスターが元々、一方向ミラーリングだけ設定されていた場合に、フェイルバックするには、プライマリーストレージクラスターのミラーリングを設定して、反対方向にイメージをレプリケートできるようにします。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
site-a
ストレージクラスターのクライアントノードで、rbd-mirror
パッケージをインストールします。[root@rbd-client ~]# yum install rbd-mirror
注記パッケージは Red Hat Ceph Storage Tools リポジトリーによって提供されます。
site-a
ストレージクラスターのクライアントノードで、CLUSTER
オプションを/etc/sysconfig/ceph
ファイルに追加して、ストレージクラスター名を指定します。CLUSTER=site-b
site-b
Ceph 設定ファイルおよびキーリングファイルをsite-b
Ceph Monitor ノードからsite-a
の Ceph Monitor およびクライアントノードにコピーします。構文
scp /etc/ceph/ceph.conf USER@SITE_A_MON_NODE_NAME:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring root@SITE_A_MON_NODE_NAME:/etc/ceph/ scp /etc/ceph/ceph.conf user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/
注記Ceph 設定ファイルを
site-b
Ceph Monitor ノードからsite-a
の Ceph Monitor およびクライアントノードに転送するscp
コマンドをし用すると、ファイルの名前がsite-a.conf
に変更されます。キーリングファイル名は同じままです。site-a
キーリングファイルをsite-a
Ceph Monitor ノードからsite-a
クライアントノード にコピーします。構文
scp /etc/ceph/site-a.client.site-a.keyring <user>@SITE_A_CLIENT_HOST_NAME:/etc/ceph/
site-a
クライアントノードでrbd-mirror
デーモンを有効にして起動します。構文
systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@CLIENT_ID systemctl start ceph-rbd-mirror@CLIENT_ID
CLIENT_ID
は、rbd-mirror
デーモンが使用する Ceph Storage クラスターユーザーに変更します。ユーザーには、ストレージクラスターへの適切なcephx
アクセスが必要です。例
[root@rbd-client ~]# systemctl enable ceph-rbd-mirror.target [root@rbd-client ~]# systemctl enable ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl start ceph-rbd-mirror@site-a
site-a
クラスターのクライアントノードから、site-b
クラスターをピアとして追加します。例
[root@rbd-client ~]# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
複数のセカンダリーストレージクラスターを使用している場合には、フェイルオーバー先とフェイルバック元に選択されたセカンダリーストレージクラスターを追加する必要があります。
site-a
ストレージクラスターのモニターノードから、site-b
ストレージクラスターがピアとして正常に追加されたことを確認します。構文
rbd mirror pool info POOL_NAME
例
[root@rbd-client ~]# rbd mirror pool info data Mode: image Site Name: site-a Peer Sites: UUID: 950ddadf-f995-47b7-9416-b9bb233f66e3 Name: site-b Mirror UUID: 4696cd9d-1466-4f98-a97a-3748b6b722b3 Direction: rx-tx Client: client.site-b
関連情報
- 詳細は、Red Hat Ceph Storage 管理ガイドの User Management の章を参照してください。
5.8.7.1. プライマリーストレージクラスターへのフェイルバック
以前のプライマリーストレージクラスターが復元されたら、そのクラスターがプライマリーストレージクラスターにフェイルバックされます。
前提条件
- 少なくとも実行中の Red Hat Ceph Storage クラスターが 2 台ある。
- ノードへのルートレベルのアクセス。
- 一方向ミラーリング を使用して設定されるプールのミラーリングまたはイメージミラーリング。
手順
もう一度、
site-b
クラスターのモニターノードからイメージのステータスを確認します。状態としてup-stopped
、説明としてlocal image is primary
と表示されるはずです。例
[root@rbd-client ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: local image is primary last_update: 2019-04-22 17:37:48 [root@rbd-client ~]# rbd mirror image status data/image2 image2: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: local image is primary last_update: 2019-04-22 17:38:18
site-a
ストレージクラスターの Ceph Monitor ノードから、イメージがプライマリーかどうかを確認します。構文
rbd info POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd info data/image1 [root@rbd-client ~]# rbd info data/image2
コマンドの出力で、
mirroring primary: true
またはmirroring primary: false
を検索し、状態を判断します。site-a
ストレージクラスターの Ceph Monitor ノードから以下のようなコマンドを実行して、プライマリーとして表示されているイメージをデモートします。構文
rbd mirror image demote POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image demote data/image1
正常にシャットダウンされなかった場合にのみ、イメージをもう一度同期します。
site-a
ストレージクラスターのモニターノードで以下のコマンドを実行し、イメージをsite-b
からsite-a
に再同期します。構文
rbd mirror image resync POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image resync data/image1 Flagged image for resync from primary [root@rbd-client ~]# rbd mirror image resync data/image2 Flagged image for resync from primary
しばらくしたら、状態が
up+replaying
かをチェックして、イメージの最同期が完了していることを確認します。site-a
ストレージクラスターのモニターノードで以下のコマンドを実行して、イメージの状態を確認します。構文
rbd mirror image status POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image status data/image1 [root@rbd-client ~]# rbd mirror image status data/image2
site-b
ストレージクラスターの Ceph Monitor ノードで以下のコマンドを実行して、site-b
ストレージクラスターのイメージをデモートします。構文
rbd mirror image demote POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image demote data/image1 [root@rbd-client ~]# rbd mirror image demote data/image2
注記複数のセカンダリーストレージクラスターがある場合に、上記の実行は、プロモートされたセカンダリーストレージクラスターからだけで結構です。
site-a
ストレージクラスターの Ceph Monitor ノードで以下のコマンドを実行して、site-a
ストレージクラスターに配置されていた、以前のプライマリーイメージをプロモートします。構文
rbd mirror image promote POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image promote data/image1 [root@rbd-client ~]# rbd mirror image promote data/image2
site-a
ストレージクラスターの Ceph Monitor ノードからイメージのステータスを確認します。状態としてup+stopped
、説明としてlocal image is primary
と表示されるはずです。構文
rbd mirror image status POOL_NAME/IMAGE_NAME
例
[root@rbd-client ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: local image is primary last_update: 2019-04-22 11:14:51 [root@rbd-client ~]# rbd mirror image status data/image2 image2: global_id: 596f41bc-874b-4cd4-aefe-4929578cc834 state: up+stopped description: local image is primary last_update: 2019-04-22 11:14:51
5.8.8. 双方向ミラーリングの削除
フェイルバックが完了したら、双方向ミラーリングを削除し、Ceph ブロックデバイスのミラーリングサービスを無効にできます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ノードへのルートレベルのアクセス。
手順
site-a
ストレージクラスターから、ピアとしてのsite-b
ストレージクラスターを削除します。例
[root@rbd-client ~]# rbd mirror pool peer remove data client.remote@remote --cluster local [root@rbd-client ~]# rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-a
site-a
クライアントでrbd-mirror
デーモンを停止して無効にします。構文
systemctl stop ceph-rbd-mirror@CLIENT_ID systemctl disable ceph-rbd-mirror@CLIENT_ID systemctl disable ceph-rbd-mirror.target
例
[root@rbd-client ~]# systemctl stop ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl disable ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl disable ceph-rbd-mirror.target