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
site-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-mirror
Ubuntu
$ sudo apt-get install rbd-mirror
site-a
クラスターのクライアントノードで、CLUSTER
オプションを適切なファイルに追加してクラスター名を指定します。Red Hat Enterprise Linux で、/etc/sysconfig/ceph
ファイルを更新し、Ubuntu で、それに応じて/etc/default/ceph
ファイルを更新します。CLUSTER=site-b
site-b
Ceph 設定ファイルおよび RBD キーリングファイルをsite-b
monitor からsite-a
monitor およびクライアントノードにコピーします。# 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-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>
は、rbd-mirror デーモンが使用する Ceph Storage クラスターユーザーに変更します。ユーザーに、クラスターへの適切なCLIENT_ID
cephx
アクセスが必要です。詳細は、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
site-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/image2
site-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-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
以下に例を示します。
# systemctl stop ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror@site-a # systemctl disable ceph-rbd-mirror.target
関連情報
- イメージの降格、プロモート、再同期に関する詳細は、『 ブロックデバイスガイド』 の 「イメージの設定 」を参照してください。