2ノードでの rbd-mirror設定
ceph を2台 (1ノード1クラスタ) にインストールし、その間で rbd mirror を設定してみている。
環境はAWS上のCentOS7.5 AMI (ami-3185744e) を t2.medium で起動し、 disk は / に 8GB, /dev/xvdb として 8GB を割り当てている。
1ノードへのceph インストール
以下の設定で、1ノード上のceph でも HEALTH OK になることを確認できた。
※ デフォルト設定だと、同じクラスタ内に3ノード必要だったため、1ノードで動かしたい場合、ceph.conf に2行追記する必要があった。
hostname=$(hostname | awk -F. '{print $1}') yum -y install epel-release cat << EOM > /etc/yum.repos.d/ceph.repo [ceph-noarch] name=Ceph noarch packages baseurl=https://download.ceph.com/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc EOM yum install -y ceph-deploy mv -i /etc/yum.repos.d/ceph.repo /tmp mkdir /root/my-cluster cd /root/my-cluster/ ceph-deploy new ${hostname} ## 以下の2行を追記 echo 'osd_crush_chooseleaf_type = 0' >> ceph.conf echo 'osd_pool_default_size = 1' >> ceph.conf ceph-deploy install ${hostname} ceph-deploy mon create-initial ceph-deploy admin ${hostname} ceph-deploy mgr create ${hostname} ceph-deploy osd create --data /dev/xvdb ${hostname}
作成後、以下のように pool / image の作成を行い、block device として使用できることを確認している。
※ rbd-mirror の設定を続けて行う場合、mirror 先のクラスタにも、pool1 の作成 (# ceph osd pool create pool1 8) を実施しておく
ceph status ceph osd pool create pool1 8 rbd pool init pool1 rbd create image1 --size 4096 --image-feature layering -p pool1 rbd map image1 --name client.admin -p pool1 ls -lhtr /dev/rbd/pool1/image1 mkfs -t xfs /dev/rbd/pool1/image1 mount /dev/rbd/pool1/image1 /mnt
rbd-mirror の設定
pool の作成が終わった後、rbd-mirror の設定を行う。
実際にミラーを行う rbd-mirror デーモンは、データ元の ceph クラスタに ceph クライアントとして接続するため、事前にデータ元クラスタでのkeyring作成と、mirror先クラスタからの疎通確認を行う必要がある。
上記のインストール手順だと データ元、 mirror 先ともに、ceph クラスタ名が 'ceph' となっており、mirror 時に別クラスタの指定が出来なくなってしまうため、事前にクラスタ名指定用のファイルを変更しておく。
各ノードで /etc/sysconfig/ceph CLUSTER=cluster1 - CLUSTER=cluster2 を追記 ※ cluster1 がデータ元、cluster2 を mirror 先とする
次に、以下のコマンドにより、cluster1 アクセス用の keyring (id: replusr1) を作成する。
※ データ元ノード上で実施 cd /etc/ceph ln -s ceph.conf cluster1.conf ln -s ceph.client.admin.keyring cluster1.client.admin.keyring ※ --cluster cluster1 の cli 指定を動作させるために必要 ceph auth get-or-create client.replusr1 mon 'profile rbd' osd 'profile rbd pool=pool1' -o /etc/ceph/cluster1.client.replusr1.keyring --cluster cluster1
ファイルが出来たら以下の2ファイルを、mirror 先ノードの /etc/ceph 以下に、scp 等でコピーする。
/etc/ceph/cluster1.conf /etc/ceph/cluster1.client.replusr1.keyring
この段階で、mirror先のノードで以下を発行し、データ元のcephクラスタにアクセス出来ることを確認しておく。
※ mirror 先のノードで実施 ceph --id replusr1 --cluster cluster1 -s
また、後で、rbd-mirror デーモン起動時に使用するので、mirror 先のノードでも、cluster2 用の設定ファイルを作成しておく。
※ mirror 先のノード上で実施 cd /etc/ceph ln -s ceph.conf cluster2.conf ln -s ceph.client.admin.keyring cluster2.client.admin.keyring ceph auth get-or-create client.replusr2 mon 'profile rbd' osd 'profile rbd pool=pool1' -o /etc/ceph/cluster2.client.replusr2.keyring --cluster cluster2
この後、実際にmirrorを始めるために、mirror を有効化する pool に対して以下を発行する。
※ データ元のノードで実施 # rbd feature enable pool1/image1 exclusive-lock # rbd feature enable pool1/image1 journaling ※ 両方のノードで実施 # rbd mirror pool enable pool1 pool
最後に、mirror 先のノードにて、rbd-mirror デーモンの起動と、pool への peer 設定を実施する。
※ mirror 先のノードで実施 yum -y install rbd-mirror systemctl enable ceph-rbd-mirror.target systemctl enable ceph-rbd-mirror@replusr2 systemctl start ceph-rbd-mirror@replusr2 # rbd --cluster cluster2 mirror pool peer add pool1 client.replusr1@cluster1 # rbd --cluster cluster2 mirror pool info pool1 Mode: pool Peers: UUID NAME CLIENT f383c009-2adf-419b-9f57-03030287fb8e cluster1 client.replusr1 # rbd mirror image status pool1/image1 image1: global_id: ce71a13a-2a1d-4e5f-beb6-d95ca8e6558a state: up+replaying 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-02-09 11:09:40
この状態で、以下のように、pool に image を追加すると、数秒後に mirror 先にも追加されるようになるはずである。
# rbd create image2 --size 4096 --image-feature layering,exclusive-lock,journaling -p pool1 ※ 反映までの時間を計測した結果、約2秒後に反映された [root@ip-172-31-12-196 ceph]# date; rbd create image2 --size 4096 --image-feature layering,exclusive-lock,journaling -p pool1 Sat Feb 9 12:30:20 UTC 2019 [root@ip-172-31-12-196 ceph]# [root@ip-172-31-7-146 ~]# while true; do date; rbd -p pool1 ls; sleep 0.5; done (snip) Sat Feb 9 12:30:19 UTC 2019 image1 Sat Feb 9 12:30:19 UTC 2019 image1 Sat Feb 9 12:30:20 UTC 2019 image1 Sat Feb 9 12:30:20 UTC 2019 image1 Sat Feb 9 12:30:21 UTC 2019 image1 Sat Feb 9 12:30:21 UTC 2019 image1 Sat Feb 9 12:30:22 UTC 2019 image1 image2 Sat Feb 9 12:30:23 UTC 2019 image1 image2
参考リンク
[1ノードでのcephインストール]
https://www.berrange.com/posts/2015/12/21/ceph-single-node-deployment-on-fedora-23/
[rbd-mirror]
https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/block_device_guide/block_device_mirroring
https://cloud.garr.it/support/kb/ceph/ceph-enabling-rbd-mirror/
https://blog.devnu11.net/2016/10/ceph-setting-up-rbd-mirror-between-two-ceph-clusters/