4.7. 一方向ミラーリングを使用した障害からの復旧
一方向のミラーリングで障害から回復するには、以下の手順を使用します。以下で、プライマリークラスターを終了してからセカンダリークラスターにフェイルオーバーする方法、およびフェイルバックする方法が紹介します。シャットダウンは、正常でもそうでなくても構いません。
以下の例では、プライマリークラスターは site-a クラスターと呼ばれ、セカンダリークラスターは site-b クラスターと呼ばれます。また、ストレージクラスターにはどちらも image1 と image2 の 2 つのイメージが含まれる data プールがあります。
一方向ミラーリングは、複数のセカンダリーサイトをサポートします。追加のセカンダリークラスターを使用している場合は、セカンダリークラスターの中から 1 つ選択してフェイルオーバーします。フェイルバック中に同じクラスターから同期します。
前提条件
- 2 つ以上の実行中のクラスター。
- 一方向ミラーリングを使用して設定されるプールのミラーリングまたはイメージミラーリング。
正常なシャットダウン後のフェイルオーバー
- プライマリーイメージを使用するクライアントをすべて停止します。この手順は、どのクライアントがイメージを使用するかにより異なります。たとえば、イメージを使用する OpenStack インスタンスからボリュームの割り当てを解除します。Red Hat OpenStack Platform ストレージガイドの ブロックストレージおよびボリューム の章を参照してください。
site-aクラスターのモニターノードで以下のコマンドを実行して、site-aクラスターにあるプライマリーイメージをデモートします。# rbd mirror image demote data/image1 # rbd mirror image demote data/image2site-bクラスターにあるプライマリー以外のイメージをプロモートするには、site-bクラスターのモニターノードで以下のコマンドを実行します。# rbd mirror image promote data/image1 # rbd mirror image promote data/image2しばらくすると、
site-bクラスターのモニターノードからイメージのステータスを確認します。up+stoppedの状態が表示されるはずです。また、説明にはprimaryが表示されるはずです。# 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 13:18:36 # 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 13:18:36
正常にシャットダウンされなかった場合のフェイルオーバー
- プライマリークラスターが停止していることを確認します。
- プライマリーイメージを使用するクライアントをすべて停止します。この手順は、どのクライアントがイメージを使用するかにより異なります。たとえば、イメージを使用する OpenStack インスタンスからボリュームの割り当てを解除します。Red Hat OpenStack Platform ストレージガイドの ブロックストレージおよびボリューム の章を参照してください。
site-bクラスターの監視ノードから、プライマリー以外のイメージをプロモートします。site-aストレージクラスターにデモートが伝播されないので、--force オプションを使用します。# rbd mirror image promote --force data/image1 # rbd mirror image promote --force data/image2もう一度、
site-bクラスターのモニターノードからイメージのステータスを確認します。状態として、up+stopping_replayが、説明にforce promotedと表示されるはずです。# 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 # 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
フェイルバックの準備
以前のプライマリークラスターが回復すると、フェイルバックを行います。
2 つのクラスターが最初に一方向ミラーリング用にのみ設定されている場合、フェイルバックを行うためにプライマリークラスターもミラーリング用に設定され、逆方向でイメージを複製する必要があります。
site-aクラスターのクライアントノードで、rbd-mirrorパッケージをインストールします。パッケージは Red Hat Ceph Storage Tools リポジトリーによって提供されます。Red Hat Enterprise Linux
# yum install rbd-mirrorUbuntu
$ sudo apt-get install rbd-mirrorsite-aクラスターのクライアントノードで、CLUSTERオプションを適切なファイルに追加してクラスター名を指定します。Red Hat Enterprise Linux で、/etc/sysconfig/cephファイルを更新し、Ubuntu で、それに応じて/etc/default/cephファイルを更新します。CLUSTER=site-bsite-bCeph 設定ファイルおよび RBD キーリングファイルをsite-bmonitor からsite-amonitor およびクライアントノードにコピーします。# scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/ # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/注記Ceph 設定ファイルを
site-bCeph Monitor ノードからsite-aの Ceph Monitor およびクライアントノードに転送するscpコマンドをし用すると、ファイルの名前がsite-a.confに変更されます。キーリングファイル名は同じままです。site-aキーリングファイルをsite-aCeph 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>は、rbd-mirror デーモンが使用する Ceph Storage クラスターユーザーに変更します。ユーザーに、クラスターへの適切なCLIENT_IDcephxアクセスが必要です。詳細は、Red Hat Ceph Storage 管理ガイド の ユーザー管理 の章を参照してください。site-aを使用した前述の例に基づいて、コマンドは以下のようになります。# systemctl enable ceph-rbd-mirror.target # systemctl enable ceph-rbd-mirror@site-a # systemctl start ceph-rbd-mirror@site-asite-aクラスターのクライアントノードから、site-bクラスターをピアとして追加します。# 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 -p data Mode: image Peers: UUID NAME CLIENT d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b
failback
以前のプライマリークラスターが回復すると、フェイルバックを行います。
site-aクラスターのモニターノードから、イメージがプライマリーかどうかを判別します。# rbd info data/image1 # rbd info data/image2コマンドの出力で、
mirroring primary: trueまたはmirroring primary: falseを検索し、状態を判断します。site-aクラスターのモニターノードから以下のようなコマンドを実行して、プライマリーとして一覧表示されるイメージを降格します。# rbd mirror image demote data/image1正常にシャットダウンされなかった場合にのみ、イメージをもう一度同期します。
site-aストレージクラスターのモニターノードで以下のコマンドを実行し、イメージをsite-bからsite-aに再同期します。# rbd mirror image resync data/image1 Flagged image for resync from primary # rbd mirror image resync data/image2 Flagged image for resync from primaryしばらくしたら、状態が
up+replayingかをチェックして、イメージの最同期が完了していることを確認します。site-a ストレージクラスターのモニターノードで以下のコマンドを実行して、イメージの状態を確認します。# rbd mirror image status data/image1 # rbd mirror image status data/image2
site-bクラスターのモニターノードで以下のコマンドを実行して、site-bクラスターのイメージを降格します。# rbd mirror image demote data/image1 # rbd mirror image demote data/image2注記複数のセカンダリークラスターがある場合、これは昇格されたセカンダリークラスターからのみ実行する必要があります。
site-aクラスターのモニターノードで以下のコマンドを実行して、site-aクラスターにあるプライマリーイメージをデモートします。# rbd mirror image promote data/image1 # rbd mirror image promote data/image2site-aクラスターの監視ノードからイメージのステータスを確認します。状態としてup+stopped、説明としてlocal image is primaryと表示されるはずです。# 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 # 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
双方向ミラーリングの削除
上記の Prepare for failback セクションで、双方向ミラーリングの機能は site-b クラスターから site-a クラスターへの同期を有効にするように設定されています。フェイルバックが完了すると、これらの関数を無効にすることができます。
site-aクラスターからピアとしてsite-bクラスターを削除します。$ rbd mirror pool peer remove data client.remote@remote --cluster local # rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-asite-aクライアントでrbd-mirrorデーモンを停止して無効にします。systemctl stop ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror.target以下に例を示します。
# systemctl stop ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror.target
関連情報
- イメージの降格、プロモート、再同期に関する詳細は、『 ブロックデバイスガイド』 の 「イメージの設定 」を参照してください。