今回は、ceph を all-in-one でインストールしてみます。公式ドキュメントを参考にシンプルにインストールする手順を紹介します。
構成
さっそく、all-in-oneと言いましたが、clientだけは分割しています。client側でcephの操作と、ansible playbookを実行していこうと思います。また、ceph nodeには、予め vdb,vdc,vddというディスクを用意しておきました。
client node
+----------+
| |
| client |
| |
+----------+
ceph node
+-------------+
| osd |
| mon |
| mgr |
| |
| vdb,vdc,vdd |
+-------------+
必要パッケージとansibleの準備
Ceph Node での準備
subscriptionを登録しておきます。
# subscription-manager register
# subscription-manager attach --pool=xxxx
# subscription-manager repos --disable=*
また、以下のポートを空けておきます。
systemctl enable firewalld
systemctl start firewalld
systemctl status firewalld
// monitor node
firewall-cmd --zone=public --add-port=6789/tcp
firewall-cmd --zone=public --add-port=6789/tcp --permanent
// osd node && mgr node
firewall-cmd --zone=public --add-port=6800-7300/tcp
firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
// mds node
firewall-cmd --zone=public --add-port=6800/tcp
firewall-cmd --zone=public --add-port=6800/tcp --permanent
Object Gateway nodeとして使う場合には、7480や80の設定も必要ですが、今回は使わないので省略します。また、アクセス元のネットワーク範囲を絞ったりした方が良いですが、今回は簡単のため省略です。Cheph Node側での準備は、これだけです。
Client Node での準備
Client Nodeで操作します。まずは、subscriptionを登録しておきます。
# subscription-manager register
# subscription-manager attach --pool=xxxx
# subscription-manager repos --disable=*
Clientからansibleを実行するので、ssh keyの準備とceph-ansibleパッケージのインストールしておきます。
# ssh-keygen // パスフレーズ等は入力せず、すべてenterで進めます。
# ssh-copy-id root@knakayam-rhel7.example.com
# ssh-copy-id root@knakayam-ceph-c1.example.com
# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
# yum -y install ceph-ansible
playbook の準備
ansibleを実行するclient nodeで準備していきます。
inventoryファイル
最初の構成通り、以下を設定しておきます。
[mons]
knakayam-ceph-c1.example.com
[mgrs]
knakayam-ceph-c1.example.com
[osds]
knakayam-ceph-c1.example.com
[clients]
knakayam-rhel7.example.com
cephパラメータの設定
ここからは、cephで使われるパラメータを設定していきます。すべて、/usr/share/ceph-ansible/
以下のファイルに書き込んでいきます。
# cd /usr/share/ceph-ansible/
all.ymlの設定
# cd /usr/share/ceph-ansible/
# cp group_vars/all.yml.sample group_vars/all.yml
# vim group_vars/all.yml
all.ymlには、次の設定をしておきます。今回は、検証なのでpublic_networkもcluster_networkも同じものを利用しています。
ceph_rhcs_version: "3"
ceph_repository_type: cdn
rbd_cache: "true"
rbd_cache_writethrough_until_flush: "false"
rbd_client_directories: false
journal_size: 1024
## この設定項目だけは、環境によって変更が必要です ##
monitor_interface: eth0
public_network: 10.64.222.0/26
cluster_network: "{{ public_network }}"
## ココまで ##
ceph_conf_overrides:
global:
mon_osd_allow_primary_affinity: 1
mon_clock_drift_allowed: 0.5
osd_pool_default_size: 2
osd_pool_default_min_size: 1
mon_pg_warn_min_per_osd: 0
mon_pg_warn_max_per_osd: 0
mon_pg_warn_max_object_skew: 0
mon_allow_pool_delete: true
client:
rbd_default_features: 1
osds.ymlの設定
こちらも、同様に/usr/share/ceph-ansible/
以下のosds.ymlに設定します。
# cd /usr/share/ceph-ansible/
# cp group_vars/osds.yml.sample group_vars/osds.yml
# vim group_vars/osds.yml
構成で述べたように、準備しておいたvdb,vdcv,vddを指定します。osd_scenario: collocated
の設定も忘れずに。
devices:
- /dev/vdb
- /dev/vdc
- /dev/vdd
osd_scenario: collocated
clients.ymlの設定
# cd /usr/share/ceph-ansible/
# cp group_vars/clients.yml.sample group_vars/clients.yml
# vim group_vars/clients.yml
以下の設定を追加するだけです。
copy_admin_key: true
ansibleの実行
いよいよ、playbookの実行です。やはりclient nodeでの実行になります。
# cd /usr/share/ceph-ansible/
# cp site.yml.sample site.yml
# ansible-playbook site.yml
RADOS Blcok Deviceを使ってみる
まずは、状態が健全であることを確認しておきましょう
[root@knakayam-rhel7-work ~]# ceph -s
cluster:
id: 3945dd03-69d2-43c0-b699-adb5819f22dc
health: HEALTH_OK
services:
mon: 1 daemons, quorum knakayam-ceph-c1
mgr: knakayam-ceph-c1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 bytes
usage: 321 MB used, 27293 MB / 27614 MB avail
pgs:
次に、testpool
という名前のpoolを作成します。
[root@knakayam-rhel7-work ~]# ceph osd pool create testpool 32 32
pool 'testpool' created
[root@knakayam-rhel7-work ~]# rbd pool init testpool
[root@knakayam-rhel7-work ~]# ceph osd pool ls
rbd
testpool
あっという間にpoolの作成までできるようになりました。次からは、Block Deviceを作っていきます。
RADOS Block Device を作成
先程作成したtestpool
からtest
というrbdイメージを作成します。
[root@knakayam-rhel7-work ~]# rbd create testpool/test --size=128M
[root@knakayam-rhel7-work ~]# rbd -p testpool ls
test
rbd イメージ作成をしたら、deviceにマッピングします。
[root@knakayam-rhel7-work ~]# rbd map testpool/test
/dev/rbd0
[root@knakayam-rhel7-work ~]# rbd showmapped
id pool image snap device
0 testpool test - /dev/rbd0
最後にマウントを試してみます。
[root@knakayam-rhel7-work ~]# mkfs.ext4 /dev/rbd0
[root@knakayam-rhel7-work ~]# mkdir /mnt/rbd
[root@knakayam-rhel7-work ~]# mount /dev/rbd0 /mnt/rbd
クリーンアップ
作成したrbdイメージの削除は、以下のようになります。
[root@knakayam-rhel7-work ~]# umount /mnt/rbd/
[root@knakayam-rhel7-work ~]# rbd unmap /dev/rbd0
[root@knakayam-rhel7-work ~]# rbd showmapped
[root@knakayam-rhel7-work ~]# rbd rm testpool/test
Removing image: 100% complete...done.
cephクラスタ全てをアンインストールする場合には、purge-cluster.yml
を使います。
# ansible-playbook /usr/share/ceph-ansible/infrastructure-playbooks/purge-cluster.yml
簡単な手順を実行して、CephをRHEL7にインストールしてみました。