1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RHCS 3 の CephFS を使う

Last updated at Posted at 2018-07-24

今回は、RHCS 3 で CephFS を使う方法を紹介しようと思います。公式ドキュメントはこちらです。ドキュメントには、ansile-playbookを利用する方法や、(tech previewですが) 複数ファイルシステムを利用する方法がなかったので、紹介しようと思います。

  1. ansible-playbookを利用して、CephFSを構築
  2. 2つ目のFilesystemのデプロイとクライアントからの利用方法

みたいな流れで書いています。なお、環境は、こちらの記事で利用した環境と全く同じで、odsやmonはすでにデプロイされていることを前提にしています。ホスト名がknakayam-ceph-c1からknakayam-ceph-c2に変更されていますが、関係はありません。knakayam-ceph-c1に読み替えて使ってください。

1. ansible-playbookを利用して、CephFSを構築

まずは、ansible playbookを使って CephFS を構築していこいうと思います。

playbookの編集

いつも通り /usr/share/ceph-ansible 配下のplaybookを利用します。mdss.yml.sampleの編集は必要なく、そのまま利用可能です。

cd /usr/share/ceph-ansible

cp group_vars/mdss.yml.sample group_vars/mdss.yml

inventory ファイルの編集

# vim /etc/ansible/hosts

以下の[mdss]を追加します。

[mdss]
knakayam-ceph-c2.example.com

playbookの実行

ansible-playbook -vvv site.yml  --limit=mdss

無事にplaybookが完走したら、デプロイを確認してみます。

cephfs のデプロイ確認

まずは、ceph fs status <FS>を叩いてみます。

ceph fs status cephfs

filesystemが一つ出来上がっていることがわかります。ansibleで[mdss]を追記しただけで、filesystemまで作ってくれるのは、あるべき実装なのでしょうか・・metadata serverをインストールしたら、filesystem使うのは当然だから、勝手にインストールしてくれてるのだと思いますが・・

[root@knakayam-ceph-c2 ceph-ansible]# ceph fs status cephfs
cephfs - 0 clients
======
+------+--------+------------------+---------------+-------+-------+
| Rank | State  |       MDS        |    Activity   |  dns  |  inos |
+------+--------+------------------+---------------+-------+-------+
|  0   | active | knakayam-ceph-c2 | Reqs:    0 /s |   11  |   13  |
+------+--------+------------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 9728  | 12.3G |
|   cephfs_data   |   data   |    0  | 12.3G |
+-----------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+

クライントからのマウント (kernel client)

まず、keyringの準備をしておきます。

注意: 今回は簡易テストのため、client.adminのkeyを利用していますが、adminとは別のクライアントを利用すべきです。

Cephホスト上でsecretを取り出します。

# ceph auth get-key client.admin
AQADvUlblC/RGxAALnjhQPNBuR0+HXxGpsb+aw==

クライント側に移動して、keyを記載したファイルを作っておきます。

# echo "AQADvUlblC/RGxAALnjhQPNBuR0+HXxGpsb+aw==" > /root/asecret

あとは、secretfileとusernameを指定して、mountするだけです。

# mount -t ceph  knakayam-ceph-c2.example.com:/ /mnt/cephfs/ -o name=admin,secretfile=/root/asecret

knakayam-ceph-c2.example.comは、monの名前です。knakayam-ceph-c2.example.com:6789としても良いですが、デフォルトで6789ポートを利用します。

getfattrコマンドで属性も確認してみます。期待通りのcephfsがマウントされていることがわかります。

# getfattr -n ceph.dir.layout /mnt/cephfs/
getfattr: Removing leading '/' from absolute path names
# file: mnt/cephfs/
ceph.dir.layout="stripe_unit=4194304 stripe_count=1 object_size=4194304 pool=cephfs_data"

確認が終わったらumountしておきます。

# umount /mnt/cephfs/

以上が、cephfsを利用する手順でした。次からは、複数の CephFS をデプロイして利用してみます。現時点(2018年7月)では、複数 CephFS には、既知の問題があるようですので、ご注意ください。

2. 複数の CephFS を利用する

2つ目のCephFSの作成

まずは、2つ目のCephFSを作っていきます。

# ceph osd pool cephfs_metadata_ssd 64
# ceph osd pool create cephfs_metadata_ssd 64
# ceph fs new cephfs2 cephfs_metadata_ssd cephfs_data_ssd

最後のコマンドで、以下のエラーが発生すると思います。

[root@knakayam-ceph-c2 ceph-ansible]# ceph fs new cephfs2 cephfs_metadata_ssd cephfs_data_ssd
Error EINVAL: Creation of multiple filesystems is disabled.  To enable this experimental feature, use 'ceph fs flag set enable_multiple true'

これは、先に述べた通り、複数のFilesystemには既知の問題があるため、以下のコマンドが必要になります。

ceph fs flag set enable_multiple true  --yes-i-really-mean-it
ceph fs new cephfs2 cephfs_metadata_ssd cephfs_data_ssd

作成が終わったら、ceph fs status <FS>でcephfs2のステータスを確認してみます。

[root@knakayam-ceph-c2 ceph-ansible]# ceph fs status cephfs2
cephfs2 - 0 clients
=======
+------+-------+-----+----------+-----+------+
| Rank | State | MDS | Activity | dns | inos |
+------+-------+-----+----------+-----+------+
+------+-------+-----+----------+-----+------+
+---------------------+----------+-------+-------+
|         Pool        |   type   |  used | avail |
+---------------------+----------+-------+-------+
| cephfs_metadata_ssd | metadata |    0  | 12.3G |
|   cephfs_data_ssd   |   data   |    0  | 12.3G |
+---------------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
+---------+---------+
| version | daemons |
+---------+---------+
+---------+---------+

Poolは作られているのですが、以下の項目が空です。2つ目に作ったCephFSに利用するMDSが不足しているようです。

+------+-------+-----+----------+-----+------+
| Rank | State | MDS | Activity | dns | inos |
+------+-------+-----+----------+-----+------+
+------+-------+-----+----------+-----+------+

2つ目のMDSのデプロイ

1つ目のMDSをデプロイしたホストに、2つ目のMDSをデプロイしていきます。しかし今回は、ansible playbookでなく、手作業でデプロイしていきます。cephのドキュメント(Adding MDS)を参考にしています。

mdsのデプロイ

export cluster_name=ceph
export id=a
export mon=knakayam-ceph-c2.example.com:6789

echo "[mds.${id}]"  >> /etc/ceph/ceph.conf
echo "host = ${}" >> /etc/ceph/ceph.conf
mkdir -p /var/lib/ceph/mds/${cluster_name}-${id}
ceph-authtool --create-keyring /var/lib/ceph/mds/${cluster_name}-${id}/keyring --gen-key -n mds.${id}
ceph auth add mds.${id} osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/${cluster_name}-${id}/keyring
ceph-mds --cluster ${cluster_name} -i ${id} -m ${mon}

サービスの再起動

systemctl restart ceph-mds@*

cephfs2にmax_mdsを設定しておきます。

ceph fs set cephfs2 max_mds 1

無事に2つ目のMDSがデプロイできれば、cephfs2のMDSステータスもactiveになっているはずです。

[root@knakayam-ceph-c2 ~]# ceph fs status cephfs2
cephfs2 - 0 clients
=======
+------+--------+------------------+---------------+-------+-------+
| Rank | State  |       MDS        |    Activity   |  dns  |  inos |
+------+--------+------------------+---------------+-------+-------+
|  0   | active | knakayam-ceph-c2 | Reqs:    0 /s |   10  |   12  |
+------+--------+------------------+---------------+-------+-------+
+---------------------+----------+-------+-------+
|         Pool        |   type   |  used | avail |
+---------------------+----------+-------+-------+
| cephfs_metadata_ssd | metadata | 3615  | 12.3G |
|   cephfs_data_ssd   |   data   |    0  | 12.3G |
+---------------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+

ceph fs lsも確認しておきましょう。cephfsとcephfs2が見えていることがわかります。

[root@knakayam-ceph-c2 ceph-ansible]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
name: cephfs2, metadata pool: cephfs_metadata_ssd, data pools: [cephfs_data_ssd ]

2つ目のcephfsをマウントする

クライアントから使ってみるのですが、RHEL7の kernel client(mount -t ceph)では、cephfsの指定が未だできないようでした。ceph-fuseを利用します。

admin の keyring /etc/ceph/ceph.client.admin.keyring をscpしておきます。ここでもadminのkeyringは使うべきではないですが、簡単のため利用します。

# scp root@knakayam-ceph-c2.example.com:/etc/ceph/ceph.client.admin.keyring  ceph.client.admin.keyring

いよいよマウントです。cephfsは、client_mds_namespaceで指定します。

ceph-fuse  /mnt/cephfs  -m knakayam-ceph-c2.example.com  --client_mds_namespace=cephfs2  -c ceph.client.admin.keyring

マウントができれば、以下のような出力が得られます。

[root@knakayam-rhel7-work ~]# ceph-fuse  /mnt/cephfs   -m knakayam-ceph-c2.example.com  --client_mds_namespace=cephfs2  -c ceph.client.admin.keyring
2018-07-23 09:37:43.861054 7f09482c70c0 -1 init, newargv = 0x55f0e75a0ea0 newargc=9ceph-fuse[
2983]: starting ceph client
ceph-fuse[2983]: starting fuse

属性を確認してみると、pool名がpool=cephfs_data_ssdとなっているので、cephfs2が利用されているようです。

[root@knakayam-rhel7-work ~]# getfattr -n ceph.dir.layout /mnt/cephfs/
getfattr: Removing leading '/' from absolute path names
# file: mnt/cephfs/
ceph.dir.layout="stripe_unit=4194304 stripe_count=1 object_size=4194304 pool=cephfs_data_ssd"

テストが終わったら、unmountしておきましょう。

fusermount -u /mnt/cephfs/

以上が、CephFSを利用する手順でした。一つのclusterで複数のCephFSが利用できるようになれば便利ですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?