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/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow site-bクラスターにあるプライマリー以外のイメージをプロモートするには、site-bクラスターのモニターノードで以下のコマンドを実行します。rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow しばらくすると、
site-bクラスターのモニターノードからイメージのステータスを確認します。up+stoppedの状態が表示されるはずです。また、説明にはprimaryが表示されるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
正常にシャットダウンされなかった場合のフェイルオーバー
- プライマリークラスターが停止していることを確認します。
- プライマリーイメージを使用するクライアントをすべて停止します。この手順は、どのクライアントがイメージを使用するかにより異なります。たとえば、イメージを使用する OpenStack インスタンスからボリュームの割り当てを解除します。Red Hat OpenStack Platform ストレージガイドの ブロックストレージおよびボリューム の章を参照してください。
site-bクラスターの監視ノードから、プライマリー以外のイメージをプロモートします。site-aストレージクラスターにデモートが伝播されないので、--force オプションを使用します。rbd mirror image promote --force data/image1 rbd mirror image promote --force data/image2
# rbd mirror image promote --force data/image1 # rbd mirror image promote --force data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow もう一度、
site-bクラスターのモニターノードからイメージのステータスを確認します。状態として、up+stopping_replayが、説明にforce promotedと表示されるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
フェイルバックの準備
以前のプライマリークラスターが回復すると、フェイルバックを行います。
2 つのクラスターが最初に一方向ミラーリング用にのみ設定されている場合、フェイルバックを行うためにプライマリークラスターもミラーリング用に設定され、逆方向でイメージを複製する必要があります。
site-aクラスターのクライアントノードで、rbd-mirrorパッケージをインストールします。パッケージは Red Hat Ceph Storage Tools リポジトリーによって提供されます。Red Hat Enterprise Linux
yum install rbd-mirror
# yum install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ubuntu
sudo apt-get install rbd-mirror
$ sudo apt-get install rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow site-aクラスターのクライアントノードで、CLUSTERオプションを適切なファイルに追加してクラスター名を指定します。Red Hat Enterprise Linux で、/etc/sysconfig/cephファイルを更新し、Ubuntu で、それに応じて/etc/default/cephファイルを更新します。CLUSTER=site-b
CLUSTER=site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow site-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/
# 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/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記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/
# scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/Copy to Clipboard Copied! Toggle word wrap Toggle overflow site-aクライアントノードでrbd-mirrorデーモンを有効にして起動します。systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>
systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@<client-id> systemctl start ceph-rbd-mirror@<client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow は、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-a
# systemctl enable ceph-rbd-mirror.target # systemctl enable ceph-rbd-mirror@site-a # systemctl start ceph-rbd-mirror@site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow site-aクラスターのクライアントノードから、site-bクラスターをピアとして追加します。rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のセカンダリークラスターを使用している場合は、フェイルオーバー先に選択したセカンダリークラスターのみを追加し、フェイルバックから追加する必要があります。
site-aクラスターのモニターノードから、site-bクラスターが正常にピアとして追加されたことを確認します。rbd mirror pool info -p data
# rbd mirror pool info -p data Mode: image Peers: UUID NAME CLIENT d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow
failback
以前のプライマリークラスターが回復すると、フェイルバックを行います。
site-aクラスターのモニターノードから、イメージがプライマリーかどうかを判別します。rbd info data/image1 rbd info data/image2
# rbd info data/image1 # rbd info data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの出力で、
mirroring primary: trueまたはmirroring primary: falseを検索し、状態を判断します。site-aクラスターのモニターノードから以下のようなコマンドを実行して、プライマリーとして一覧表示されるイメージを降格します。rbd mirror image demote data/image1
# rbd mirror image demote data/image1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正常にシャットダウンされなかった場合にのみ、イメージをもう一度同期します。
site-aストレージクラスターのモニターノードで以下のコマンドを実行し、イメージをsite-bからsite-aに再同期します。rbd mirror image resync data/image1 rbd mirror image resync data/image2
# rbd mirror image resync data/image1 Flagged image for resync from primary # rbd mirror image resync data/image2 Flagged image for resync from primaryCopy to Clipboard Copied! Toggle word wrap Toggle overflow しばらくしたら、状態が
up+replayingかをチェックして、イメージの最同期が完了していることを確認します。site-a ストレージクラスターのモニターノードで以下のコマンドを実行して、イメージの状態を確認します。rbd mirror image status data/image1 rbd mirror image status data/image2
# rbd mirror image status data/image1 # rbd mirror image status data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
site-bクラスターのモニターノードで以下のコマンドを実行して、site-bクラスターのイメージを降格します。rbd mirror image demote data/image1 rbd mirror image demote data/image2
# rbd mirror image demote data/image1 # rbd mirror image demote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記複数のセカンダリークラスターがある場合、これは昇格されたセカンダリークラスターからのみ実行する必要があります。
site-aクラスターのモニターノードで以下のコマンドを実行して、site-aクラスターにあるプライマリーイメージをデモートします。rbd mirror image promote data/image1 rbd mirror image promote data/image2
# rbd mirror image promote data/image1 # rbd mirror image promote data/image2Copy to Clipboard Copied! Toggle word wrap Toggle overflow site-aクラスターの監視ノードからイメージのステータスを確認します。状態としてup+stopped、説明としてlocal image is primaryと表示されるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
双方向ミラーリングの削除
上記の 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-a
$ 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-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow site-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@<client-id> systemctl disable ceph-rbd-mirror@<client-id> systemctl disable ceph-rbd-mirror.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
systemctl stop ceph-rbd-mirror@site-a systemctl disable ceph-rbd-mirror@site-a 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.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- イメージの降格、プロモート、再同期に関する詳細は、『 ブロックデバイスガイド』 の 「イメージの設定 」を参照してください。