5.3. Ansible を使用した一方向ミラーリングの設定

以下の手順では、ceph-ansible を使用して site-a と呼ばれるプライマリーストレージクラスターでイメージの一方向レプリケーションを、site-b と呼ばれるセカンダリーストレージクラスターに設定します。以下の例では、data はミラーリングされるイメージが含まれるプールの名前です。

前提条件

  • Red Hat Ceph Storage クラスターを実行する 2 つ。
  • Ceph クライアントノード。
  • 同じ名前のプールが両方のクラスターに存在する。
  • プール内のイメージで排他的ロックおよびジャーナリングが有効になっている。
注記

一方向レプリケーションを使用する場合は、複数のセカンダリーストレージクラスターにミラーリングできます。

手順

  1. イメージ上で排他的ロックおよびジャーナリング機能を有効にします。

    1. 新規イメージの場合は、--image-feature オプションを使用します。

      構文

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 既存のイメージ の場合は、rbd feature enable コマンドを使用します。

      構文

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. デフォルトですべての新規イメージの排他的ロックおよびジャーナリングを有効にするには、以下の設定を Ceph 設定ファイルに追加します。

      rbd_default_features = 125
  2. site-b クラスターの Ansible 管理ノードで [rbdmirrors] グループを Ansible インベントリーファイルに追加します。通常のインベントリーファイルは /etc/ansible/hosts です。
  3. [rbdmirrors] グループの下に、 rbd-mirror デーモンが実行される site-b クライアントノードの名前を追加します。デーモンは、イメージの変更をsite-a から site-b にプルします。

    [rbdmirrors]
    ceph-client
  4. /usr/share/ceph-ansible ディレクトリーに移動します。

    [root@admin ~]# cd /usr/share/ceph-ansible
  5. group_vars/rbdmirrors.yml.sample から group_vars/rbdmirrors.yml にコピーして、新しい rbdmirrors.yml ファイルを作成します。

    [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
  6. group_vars/rbdmirrors.yml ファイルを開いて編集します。
  7. ceph_rbd_mirror_configuretrue に設定します。ceph_rbd_mirror_pool は、イメージをミラーリングするプールに設定します。この例では、data はプールの名前です。

    ceph_rbd_mirror_configure: true
    ceph_rbd_mirror_pool: "data"
  8. オプション: デフォルトでは、ceph-ansible はプール内の全イメージをミラーリングするプールモードを使用してミラーリングを設定します。また、ミラーリングが明示的に有効になっているイメージだけがミラーリングされたイメージモードを使用できます。イメージモードを有効にするには、ceph_rbd_mirror_modeimage に指定します。

    ceph_rbd_mirror_mode: image
  9. オプション: イメージモードを設定する場合は、任意のイメージでミラーリングを明示的に有効にします。

    構文

    rbd mirror image enable POOL/IMAGE

    [root@mon ~]# rbd mirror image enable data/image1

  10. site-a クラスターのモニターノードで、rbd-mirror デーモンがクラスターへの接続に使用するユーザーを作成します。この例では、site-a ユーザーを作成し、そのキーを site-a.client.site-a.keyring という名前のファイルに出力します。

    構文

    ceph auth get-or-create client.CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/CLUSTER_NAME.client.USER_NAME.keyring

    [root@mon ~]# ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring

  11. Ceph 設定ファイルおよび新たに作成された鍵ファイルを site-a のモニターノードから site-b のモニターおよびクライアントノードにコピーします。Ceph 設定ファイルの名前を ceph.conf から CLUSTER-NAME.conf に変更します。この例では、ファイルは /etc/ceph/site-a.confです。
  12. rbd-mirror がプルするクラスターの名前を設定します。以下の例では、他のクラスターは site-a です。

    ceph_rbd_mirror_remote_cluster: "site-a"
  13. Ansible 管理ノードで、ceph_rbd_mirror_remote_user を使用してキーのユーザー名を設定します。キーの作成時に使用した同じ名前を使用します。この例では、ユーザーの名前は client.site-a です。

    ceph_rbd_mirror_remote_user: "client.site-a"
  14. site-a でミラーリングを有効にします。

    構文

    rbd mirror pool enable pool -p POOL_NAME

    [root@mon ~]# rbd mirror pool enable pool -p data

  15. ceph-ansible ユーザーとして、Ansible Playbook を実行します。

    • ベアメタルデプロイメント

      [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
    • コンテナーデプロイメント

      [ansible@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  16. ミラーリングのステータスを確認します。site-b クラスターの Ceph Monitor ノードから以下のコマンドを実行します。

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2019-04-22 13:19:27

    1
    イメージが up+replaying の場合には、ミラーリングが正常に機能します。
    注記

    サイト間の接続によって、ミラーリングでイメージの同期に時間がかかる場合があります。