[Storage][Onpremise] Cephを改めて構築する

オンプレミス

やっぱり改めて動かしたい分散ストレージ:Ceph

以前、当ブログではこんな記事を書きました。2018年にCeph Luminousをコンテナ基盤と連携させて「分散ストレージってなんだろう?」と言うのを学んでいたわけですが、当時は空き容量管理がままならなくなり全てを撤廃したという苦い思い出がありました。

その後、色々勉強していく過程でもう少し細かいところを掘り下げたいなーというか、分からないままになっていたところを少しだけでも解決できないか?と言うところを見たくて、再度Cephクラスタを組んでみることにしました。

バージョンは13.2.8ということで、Luminousの後継になるMimicを選ぶことにしました。 Nautilus と言うのが実は最新なのですが、バージョン制御が意外と難しいので成り行きでMimicにする事になりました。

Ceph構築の手順

では、備忘録としてCeph構築の手順を書いていきます。構築後にあとからコンソールログとHistoryデータをベースに組んでいますので、内容に不正確なところがあると思います。何卒ご容赦を。

構築の前提

今回構成するのは以下のような非常にベーシックな構成です。

Cephの構成

今回紹介する手順としては、この中のRBDを構成してLibraと言うサーバにそのデバイスを見せるところまでを対象としています。

下準備

まずは以下の手順をCephコンポーネントを導入する対象のサーバ全てに対して実施します。rootユーザで基本的に実行した方が良いでしょう。

■ceph-deploy用ユーザの作成
useradd ceph
passwd ceph

■sudo実行時のノーパスワード昇格を許可
sudo su -
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
chmod 0440 /etc/sudoers.d/ceph

続いて、今度はbootstrap的な役割を持つサーバ上でSSHキーの作成とコピーを行います。今回は1号機(eins)で行っています。これはCephユーザで実施します。

■SSHキーの作成と登録
ssh-keygen
ssh-copy-id ceph@eins
ssh-copy-id ceph@zwei
ssh-copy-id ceph@drei
ssh-copy-id ceph@vier

続いて、1号機側で必要となる従属パッケージを導入していきます。不思議なことに、1号機以外の導入に関しては、Ceph-Deployの手によって必要となるものが全てインストールされるようになっています。

■必要となるものの追加
yum install yum-plugin-priorities
yum -y install epel-release
yum install ceph-deploy

■Python2.xを使用する
sudo yum -y install python2-pip
sudo yum install python-setuptools
sudo pip install apipkg
sudo pip install --upgrade pip

コンポーネントのインストール・初期化

クラスタ構成用ディレクトリを作成し、基本的にはその中で全ての作業を実施します。その後、ceph-deployコマンドで1号機を起点に作業するためのコマンドを実行します。

すると、必要となるceph.confやその他アクセス時に必要とするkeyringが準備されます。ceph.confを設定し、必要最低限の機能を実装します。当方が導入した設定としては、

  • 初期段階のmonノードを指定する
  • パブリックネットワークの明示的な指定
  • クラスタネットワークの明示的な指定
■クラスタ構成用ディレクトリの作成
mkdir deploy-cluster
cd deploy-cluster

■ceph-deployの準備
ceph-deploy new eins
vi ceph.conf
-----
[global]
fsid = 817a315d-ffe2-4856-b5eb-e5d0904df2b7
mon_initial_members = eins, zwei
mon_host = 192.168.100.111,192.168.100.112
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.100.0/24
cluster network = 192.168.110.0/24
-----

この設定を実施後に順次Cephのインストールを実施していきます。

■Cephコンポーネントのインストール(1号機-4号機)
ceph-deploy install eins zwei drei vier

■各種コンポーネントのイニシャライズ(管理系)
ceph-deploy mon create-initial
ceph-deploy admin eins zwei drei 
ceph-deploy mgr create eins

■初期OSDの追加
ceph-deploy osd create --data /dev/sdb eins
ceph-deploy osd create --data /dev/sdb zwei
ceph-deploy osd create --data /dev/sdb drei
ceph-deploy osd create --data /dev/sdb vier

プールの作成

これでストレージの原型としてはできあがった状態になりますので、次はプールと呼ばれるストレージの大枠を構成します。

■プールの作成
sudo ceph osd pool create Dev-Ceph-Pool1 64 64 

■対象プールに対するアプリケーション用途を指定する
sudo ceph osd pool application enable Dev-Ceph-Pool1 rbd

プールで指定するのは、名称・総PG数・ActiveなPG数(だったと思う)ですが、PG数の数字はイコールとする必要があるので、基本は名前とPG数の2つが設定要素になります。

PG=Placement Groupを指しますが、これは

  • 多い=領域がきめ細かく管理される=CPU/メモリ負荷が高い
  • 少ない=領域が大雑把に管理される=CPU/メモリ負荷が低い

ということで、適切な値を設定する必要があります。とは言え、よほど大規模でもない限りは200を超えない程度がちょうど良さそうです。当方では原則PG数64もしくは128で管理していることが多いです。

RBD(RADOS Block Device)の作成

ブロックデバイスを作成します。

■RBDデバイスの作成
sudo rbd create --size 100G Dev-Ceph-Pool1/rbd-dev-1 --image-feature layering

上記コマンドにて、指定のプールに「rbd-dev-1」というイメージファイルを作成します。本来は –image-feature と言うオプションは不要らしいのですが、これを入力してfeatureを明示的に宣言しないとエラーになるようです。このあたりはLuminous時代と余り変わってません。

作成されたイメージの詳細を rados コマンドにて確認してみます。

sudo rados info rbd-dev-1
-----
rbd image 'rbd-dev-1':
	size 100 GiB in 25600 objects
	order 22 (4 MiB objects)
	id: 5e766b8b4567
	block_name_prefix: rbd_data.5e766b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features: 
	flags: 
	create_timestamp: Wed Feb  5 12:14:29 2020
-----

クライアントからの接続

それでは、クライアントとなってもらう Libra サーバから接続できるようにします。このとき、クライアントとしてCephコンポーネントのインストールが結局必要になります。(もちろんSSHキーのコピーなりSudoersの設定はお忘れ無く~)

ceph-deploy install libra.bluecore.net

その上で、以下のようにファイルを修正します。

■RBDMAPの作成
vi /etc/ceph/rbdmap
-----
Dev-Ceph-Pool1/rbd-dev-1        id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
-----

これでサーバを再起動させると、/dev/rbd0と言うデバイスが接続されます。ここにmke2fsなりを実行するとファイルシステムフォーマットがなされ、ディスク領域として使用することが可能になります。

そして、 /etc/fstab 上には以下の通り設定します。

vi /etc/fstab
-----
/dev/rbd/Dev-Ceph-Pool1/rbd-dev-1      /ceph-data      ext4    noauto  0 0
-----

これでmountさせると無事Cephのデータ領域をRBDとしてマウントすることが出来るようになります。

df -h
/dev/rbd0                      99G   54G   45G   55% /ceph-data

領域の拡張

領域の拡張は

  • ディスクを足す
  • ノードを足す

の2種類で広げることが可能です。大前提として、ノードを増やす場合は全くの同一構成で増やす必要があると考えてください。これは、構成に不均衡が生じると、その際を埋めるためにCRUSHマップの比率変更が行われますが、Luminousの時もそうでしたが、かなーり性能上の負担がかかり、やがてうまく動作できなくなります。

ディスクを足す場合も、既存ノード間の容量不均衡を発生させないように気をつける必要があります。今回は200GBのVHDを /etc/sdc として追加する作業をしています。その上で、以下のコマンドによりceph-deploy コマンドを利用してOSDを追加します。

■OSDの追加
ceph-deploy osd create --data /dev/sdc eins
ceph-deploy osd create --data /dev/sdc zwei
ceph-deploy osd create --data /dev/sdc drei
ceph-deploy osd create --data /dev/sdc vier

そして、RBDを拡張します。

■RBDデバイスの拡張
sudo rbd resize --size 250G Dev-Ceph-Pool1/rbd-dev-1

最後に、クライアントアクセスしているサーバで file system の拡張を行います。

resize2fs /dev/rbd0

諸々確認

ヘルスステータスのチェックは以下のような感じで。

sudo ceph -s
-----
  cluster:
    id:     817a315d-ffe2-4856-b5eb-e5d0904df2b7
    health: HEALTH_OK

  services:
    mon: 2 daemons, quorum eins,zwei
    mgr: eins(active)
    mds: dev-cephfs-1-1/1/1 up  {0=vier=up:active}, 1 up:standby
    osd: 8 osds: 8 up, 8 in
    rgw: 1 daemon active

  data:
    pools:   8 pools, 288 pgs
    objects: 14.18 k objects, 54 GiB
    usage:   168 GiB used, 1024 GiB / 1.2 TiB avail
    pgs:     288 active+clean

  io:
    client:   4.6 MiB/s wr, 0 op/s rd, 10 op/s wr

そんで、容量管理は以下のような感じに。

sudo ceph df
-----
GLOBAL:
    SIZE        AVAIL        RAW USED     %RAW USED
    1.2 TiB     1023 GiB      169 GiB         14.16
POOLS:
    NAME                    ID     USED        %USED     MAX AVAIL     OBJECTS
    Dev-Ceph-Pool1          1       54 GiB     14.87       308 GiB       13950
    Dev-Ceph-Pool2          2          0 B         0       308 GiB           0
    .rgw.root               3      1.1 KiB         0       308 GiB           4
    default.rgw.control     4          0 B         0       308 GiB           8
    default.rgw.meta        5        379 B         0       308 GiB           2
    default.rgw.log         6          0 B         0       308 GiB         207
    Dev-Ceph-Pool3          7       19 KiB         0       308 GiB          22
    Dev-Ceph-Pool4          8          0 B         0       308 GiB           1
-----

タイトルとURLをコピーしました