5.4. Ansible を使用した双方向ミラーリングの設定
この手順では、ceph-ansible を使用して双方向のレプリケーションを設定し、イメージを site-a と site-b と呼ばれる 2 つのクラスター間でミラーリングできるようにします。以下の例では、data はミラーリングされるイメージが含まれるプールの名前です。
双方向ミラーリングでは、どちらのクラスターにおいても、同じイメージへの同時書き込みはできません。イメージは一方のクラスターでプロモートされ、他方のクラスターではデモートされます。ステータスに応じて、それらは一方向または反対方向でミラリングされます。
前提条件
- Red Hat Ceph Storage クラスターを実行する 2 つ。
- 各クラスターにクライアントノードがある。
- 同じ名前のプールが両方のクラスターに存在する。
- ジャーナルベースのミラーリングでは、プール内のイメージで排他的ロックとジャーナリングを有効にする必要があります。
手順
イメージの元のクラスターで、イメージの排他的ロックおよびジャーナリング機能を有効にします。
新規イメージの場合は、
--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既存のイメージ の場合は、
rbd feature enableコマンドを使用します。構文
rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME例
[root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journalingデフォルトですべての新規イメージの排他的ロックおよびジャーナリングを有効にするには、以下の設定を Ceph 設定ファイルに追加します。
rbd_default_features = 125
site-aクラスターで、以下の手順を実行します。モニターノードで、
rbd-mirrorデーモンがクラスターへの接続に使用するユーザーを作成します。この例では、site-aユーザーを作成し、そのキーをsite-a.client.site-a.keyringという名前のファイルに出力します。Ceph 設定ファイルは/etc/ceph/site-a.confです。構文
ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/PRIMARY_CLUSTER_NAME.conf例
[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 -c /etc/ceph/site-a.confキーリングは
site-bクラスターにコピーします。rbd-daemonが実行されるsite-bクラスターのクライアントノードにファイルをコピーします。このファイルを/etc/ceph/site-a.client.site-a.keyringに保存します。構文
scp /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring root@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring例
[root@mon ~]# scp /etc/ceph/site-a.client.site-a.keyring root@client.site-b:/etc/ceph/site-a.client.site-a.keyringCeph 設定ファイルをモニターノードから
site-bモニターノードおよびクライアントノードにコピーします。この例の Ceph 設定ファイルは/etc/ceph/site-a.confです。構文
scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf root@SECONDARY_MONITOR_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf user@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf例
[root@mon ~]# scp /etc/ceph/site-a.conf root@mon.site-b:/etc/ceph/site-a.conf [root@mon ~]# scp /etc/ceph/site-a.conf user@client.site-b:/etc/ceph/site-a.conf
site-bクラスターで、以下の手順を実行します。-
site-aからsite-bへのミラーリングを設定します。Ansible 管理ノードで、rbdmirrorsグループを Ansible インベントリーファイル (通常は/usr/share/ceph-ansible/hosts) に追加します。 [rbdmirrors]グループの下に、rbd-mirrorデーモンが実行されるsite-bクライアントノードの名前を追加します。このデーモンは、イメージの変更をsite-aからsite-bにプルします。例
[rbdmirrors] client.site-b/usr/share/ceph-ansibleディレクトリーに移動します。[root@admin ~]$ cd /usr/share/ceph-ansiblegroup_vars/rbdmirrors.yml.sampleからgroup_vars/rbdmirrors.ymlにコピーして、新しいrbdmirrors.ymlファイルを作成します。[root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml-
group_vars/rbdmirrors.ymlファイルを開いて編集します。 ceph_rbd_mirror_configureをtrueに設定し、ceph_rbd_mirror_poolをイメージをミラーリングするプールに設定します。この例では、dataはプールの名前です。ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"デフォルトでは、
ceph-ansibleはプール内の全イメージをミラーリングするプールモードを使用してミラーリングを設定します。ミラーリングが明示的に有効になっているイメージのみがミラーリングされるイメージモードを有効にします。イメージモードを有効にするには、ceph_rbd_mirror_modeをimageに設定します。ceph_rbd_mirror_mode: imagegroup_vars/rbdmirrors.ymlファイルにrbd-mirrorのクラスターの名前を設定します。以下の例では、他のクラスターはsite-aです。ceph_rbd_mirror_remote_cluster: "site-a"Ansible 管理ノードで、
group_vars/rbdmirrors.ymlファイルのceph_rbd_mirror_remote_userを使用してキーのユーザー名を設定します。キーの作成時に使用した同じ名前を使用します。この例では、ユーザーの名前はclient.site-aです。ceph_rbd_mirror_remote_user: "client.site-a"ansible ユーザーとして、Ansible Playbook を実行します。
ベアメタルデプロイメント
[user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hostsコンテナーデプロイメント
[user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
-
ミラーリングのステータスを確認します。
site-bクラスターで、Ceph Monitor ノードから以下のコマンドを実行します。例
ジャーナルベースのミラーリング
[root@mon ~]# rbd mirror image status data/image1 image1: global_id: 7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac state: up+replaying1 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: 2021-04-22 13:19:27スナップショットベースのミラーリング
[root@mon ~]# rbd mirror image status data/image1 image1: global_id: 06acc9e6-a63d-4aa1-bd0d-4f3a79b0ae33 state: up+replaying1 description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642689843,"remote_snapshot_timestamp":1642689843,"replay_state":"idle"} service: admin on ceph-rbd2-vasi-43-5hwia4-node2 last_update: 2022-01-20 12:41:57注記サイト間の接続によって、ミラーリングでイメージの同期に時間がかかる場合があります。
site-bクラスターで、以下の手順を実行します。手順は上記とほぼ同じです。モニターノードで、
rbd-mirrorデーモンがクラスターへの接続に使用するユーザーを作成します。この例では、site-bユーザーを作成し、そのキーをsite-b.client.site-b.keyringという名前のファイルに出力します。Ceph 設定ファイルは/etc/ceph/site-b.confです。構文
ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/SECONDARY_CLUSTER_NAME.conf例
[root@mon ~]# ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring -c /etc/ceph/site-b.confキーリングを
site-aクラスターにコピーします。rbd-daemonが実行されるsite-aクラスターのクライアントノードにファイルをコピーします。ファイルを/etc/ceph/site-b.client.site-b.keyringに保存します。構文
scp /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring root@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring例
[root@mon ~]# scp /etc/ceph/site-b.client.site-b.keyring root@client.site-a:/etc/ceph/site-b.client.site-b.keyringCeph 設定ファイルをモニターノードから
site-aモニターノードおよびクライアントノードにコピーします。この例の Ceph 設定ファイルは/etc/ceph/site-b.confです。構文
scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf root@PRIMARY_MONITOR_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf user@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf例
[root@mon ~]# scp /etc/ceph/site-b.conf root@mon.site-a:/etc/ceph/site-b.conf [root@mon ~]# scp /etc/ceph/site-b.conf user@client.site-a:/etc/ceph/site-b.conf
site-aクラスターで、以下の手順を実行します。-
site-bからsite-aへのミラーリングを設定します。Ansible 管理ノードで、rbdmirrorsグループを Ansible インベントリーファイル (通常は/usr/share/ceph-ansible/hosts) に追加します。 [rbdmirrors]グループの下に、rbd-mirrorデーモンが実行されるsite-aクライアントノードの名前を追加します。このデーモンは、イメージの変更をsite-bからsite-aにプルします。例
[rbdmirrors] client.site-a/usr/share/ceph-ansibleディレクトリーに移動します。[root@admin ~]# cd /usr/share/ceph-ansiblegroup_vars/rbdmirrors.yml.sampleからgroup_vars/rbdmirrors.ymlにコピーして、新しいrbdmirrors.ymlファイルを作成します。[root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml-
group_vars/rbdmirrors.ymlファイルを開いて編集します。 ceph_rbd_mirror_configureをtrueに設定し、ceph_rbd_mirror_poolをイメージをミラーリングするプールに設定します。この例では、dataはプールの名前です。ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"オプション: デフォルトでは、
ceph-ansibleはプール内の全イメージをミラーリングするプールモードを使用してミラーリングを設定します。ミラーリングが明示的に有効になっているイメージのみがミラーリングされるイメージモードを有効にします。イメージモードを有効にするには、ceph_rbd_mirror_modeをimageに設定します。ceph_rbd_mirror_mode: imageAnsible 管理ノードで、
group_vars/rbdmirrors.ymlファイルにrbd-mirrorクラスターの名前を設定します。例に従い、その他のクラスターの名前はsite-bとします。ceph_rbd_mirror_remote_cluster: "site-b"Ansible 管理ノードで、
group_vars/rbdmirrors.ymlファイルのceph_rbd_mirror_remote_userを使用してキーのユーザー名を設定します。この例では、ユーザーの名前はclient.site-bです。ceph_rbd_mirror_remote_user: "client.site-b"管理ノードで Ansible ユーザーとして、Ansible Playbook を実行します。
ベアメタルデプロイメント
[user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hostsコンテナーデプロイメント
[user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
-
site-aクラスターとsite-bクラスターの両方で、必要なイメージのミラーリングを明示的に有効にします。構文
ジャーナルベースのミラーリング
rbd mirror image enable POOL/IMAGEスナップショットベースのミラーリング
rbd mirror image enable POOL/IMAGE snapshot例
[root@mon ~]# rbd mirror image enable data/image1 [root@mon ~]# rbd mirror image enable data/image1 snapshot注記新規イメージをピアクラスターにミラーリングする場合は常にこの手順を繰り返します。
ミラーリングのステータスを確認します。
site-aクラスターのクライアントノードから以下のコマンドを実行します。例
ジャーナルベースのミラーリング
[root@mon ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped1 description: local image is primary last_update: 2021-04-16 15:45:31スナップショットベースのミラーリング
[root@mon ~]# rbd mirror image status data/image1 image1: global_id: 47fd1aae-5f19-4193-a5df-562b5c644ea7 state: up+stopped1 description: local image is primary service: admin on ceph-rbd1-vasi-43-5hwia4-node2 last_update: 2022-01-20 12:42:54 peer_sites: name: rbd-mirror.site-b state: up+replaying description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642693094,"remote_snapshot_timestamp":1642693094,"replay_state":"idle"} last_update: 2022-01-20 12:42:59 snapshots: 5 .mirror.primary.47fd1aae-5f19-4193-a5df-562b5c644ea7.dda146c6-5f21-4e75-ba93-660f6e57e301 (peer_uuids:[bfd09289-c9c9-40c8-b2d3-ead9b6a99a45])