CentOS7上でCephブロックデバイスを構築しました。
Cephは、オブジェクト、ブロック、ファイルストレージを1つの統一されたシステムで独自に提供してくれます。今回はこのうちブロックデバイスの構築を実施します。
Windows版VMWareWorkstation12上でCentOS7.5を3台稼働させて構築しましたが、同様の手順でベアメタルサーバ上にも構築できます。
1.環境
1-1.VMWare
筐体 : 自作PC CPU : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz VMWare : VMware(R) Workstation 12 Pro 12.5.9 build-7535481 OS : CentOS7.5(1804) Kernel : 3.10.0-862.el7.x86_64 Installed Environment Groups : Server with GUI
WinおよびVMWare環境は以下の画像で確認してもらった方が良いかもしれません。
Win環境
VMWare環境
50GBのOS用とは別に100GB×2のHDDを追加しています。
これをマスター(ceph00)として、クローンを3台分(ceph01,ceph02,ceph03)作成しておきます。
1-3.全体の流れ
各ノード共通設定
cephのインストール
cephブロックデバイス設定
2.各ノード共通設定
3台のノード全てに同一の設定を行っていきます。
2-1.セキュリティ設定の無効化
firewalldとSELinuxを無効化します。
systemctl disable firewalld vi /etc/selinux/config で開いて SELINUX=disabled にして保存。
また、ここでは触れませんが、chronyなどで時刻同期を行ってください。
2-2.パスワード無しsshログイン設定
#ssh-keygen -N "" -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #そのままEnter Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:oaQzt0YznhT9W2ZjSQtqSNgT8+OE2y5zUp7J9++aCeM root@ceph01.md.jp The key's randomart image is: +---[RSA 2048]----+ | o | | o * | | . B * . . | | + X = o o | | + X S . O | | B @ o * . | | O B = | | . = o + o | | E =+o | +----[SHA256]-----+
次に3台のノードにそれぞれ鍵をコピーしていきます。
このとき、ホスト名もしくはFQDNで各ノードにアクセスできるようにhostsファイルもしくはDNSサーバの設定を実施しておいてください。
#ssh-copy-id root@ceph01.md.jp /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host 'ceph01.md.jp (192.168.11.121)' can't be established. ECDSA key fingerprint is SHA256:nC6u8EYKElp2okhoYNCqJatrYlCzWi8ZtRudjt9VHQA. ECDSA key fingerprint is MD5:6e:45:af:09:1a:be:10:af:8f:31:b9:f1:81:2a:2a:58. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@ceph01.md.jp's password: #パスワードを入力 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@ceph01.md.jp'" and check to make sure that only the key(s) you wanted were added. 上記と同様に他2台分のカギもコピー #ssh-copy-id root@ceph02.md.jp #ssh-copy-id root@ceph03.md.jp
3.cephのインストール
ここからはadminノード(ceph01)のみで操作を行います。
3-2.ceph.confの設定
各ノード間通信を行うNWアドレスを追加
# vi ceph.conf
[global]
fsid = fad4e572-b6cb-47e7-b38e-ed41fa1545c0
mon_initial_members = ceph01, ceph02, ceph03
mon_host = 192.168.11.121,192.168.11.122,192.168.11.123
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.11.0/24
3-3.cephのインストール
何も問題がなければ、以下のコマンド一発でインストール可能なのですが、途中で止まる時がちょいちょいありました。なので、エラー吐いて止まった場合は、「5.トラブルシュート」を参照してください。
# ceph-deploy install --release mimic ceph01.md.jp ceph02.md.jp ceph03.md.jp
3-4.インストール後の設定
監視ノードの初期化
設定とadminキーを各ノードに展開
各ノードのディスクをOSDとして登録
# ceph-deploy mon create-initial # ceph-deploy admin ceph01.md.jp ceph02.md.jp ceph03.md.jp # ceph-deploy osd create ceph01.md.jp --data /dev/sdb && \ ceph-deploy osd create ceph01.md.jp --data /dev/sdc && \ ceph-deploy osd create ceph02.md.jp --data /dev/sdb && \ ceph-deploy osd create ceph02.md.jp --data /dev/sdc && \ ceph-deploy osd create ceph03.md.jp --data /dev/sdb && \ ceph-deploy osd create ceph03.md.jp --data /dev/sdc
3-5.管理マネージャの起動
ディレクトリと空ファイル作成
mgr.adminのキー生成
空ファイルにキーを追記
管理マネージャ起動
# mkdir /var/lib/ceph/mgr/ceph-admin # touch /var/lib/ceph/mgr/ceph-admin/keyring # ceph --cluster ceph auth get-or-create mgr.admin mon 'allow profile mgr' osd 'allow *' mds 'allow *' [mgr.admin] key = AQAXT0BbUiPaCRAAwqwc/7UEzfzB8Ts9qDNf2g== #上記の鍵を空ファイルに追記して保存 # vi /var/lib/ceph/mgr/ceph-admin/keyring [mgr.admin] key = AQAXT0BbUiPaCRAAwqwc/7UEzfzB8Ts9qDNf2g== # ceph-mgr -i admin
3-6.起動確認
#ps -C ceph-mgr PID TTY TIME CMD 58425 ? 00:00:00 ceph-mgr # ceph -s cluster: id: fad4e572-b6cb-47e7-b38e-ed41fa1545c0 health: HEALTH_OK services: mon: 3 daemons, quorum ceph01,ceph02,ceph03 mgr: admin(active) osd: 6 osds: 6 up, 6 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 6163 MB used, 593 GB / 599 GB avail pgs:
4.cephブロックデバイス設定
4-1.プール作成およびイメージ作成
poolの作成
poolの初期化
イメージの作成
イメージとブロックデバイスのマッピング
# ceph osd pool create pool01 128 pool 'pool01' created # rbd pool init pool01 # rbd create vol01 -p pool01 --size 10G --image-feature layering # rbd map vol01 -p pool01 /dev/rbd0
pool01という名前のプール作成
pool01を初期化
pool01上にvol01という名前の10GB空イメージを作成
pool01上のvol01をブロックデバイスとしてマッピングすることで、/dev/rbd0というデバイスが追加される。
あとは、通常のディスク(ブロックデバイス)と同様にfdiskやmkfsを構成することが可能です。
4-2.各種情報の確認
プールの確認
プール内イメージの確認
イメージの情報(容量など)確認
ブロックデバイスの確認
# rados lspools pool01 # rbd ls pool01 vol01 # rbd info pool01/vol01 rbd image 'vol01': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.103f74b0dc51 format: 2 features: layering flags: create_timestamp: Sat Jul 7 13:35:56 2018 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk tqsda1 8:1 0 1G 0 part /boot mqsda2 8:2 0 49G 0 part tqcentos-root 253:0 0 47G 0 lvm / mqcentos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 100G 0 disk mqceph--fab7c5a8--f170--4a59--93b4--68948d9c91a1-osd--block--9024dc2b--ef0e--403b--bbd1--eec740127c24 253:2 0 100G 0 lvm sdc 8:32 0 100G 0 disk mqceph--4fc60b45--ac73--470f--beac--ea58fcb809ee-osd--block--ecff0a57--aee5--4119--9769--0156b634ad34 253:3 0 100G 0 lvm sr0 11:0 1 1024M 0 rom rbd0 252:0 0 10G 0 disk
4-3.プールやイメージの削除方法
Default設定ではプール削除などができないようになっているため少々厄介です。
イメージのアンマップ
イメージの削除(1つのプールに複数のイメージがある場合は全イメージを削除)
pool削除の許可設定を追加
ceph-monのリスタート
poolの削除禁止設定を無効化
プールの削除
# rbd unmap -p pool01 --image vol01 # rbd remove -p pool01 --image vol01 Removing image: 100% complete...done. #vi /etc/ceph/ceph.conf 最終行に以下を追記 [mon] mon allow pool delete = true # systemctl restart ceph-mon.target # for pool in $(rados lspools); do ceph osd pool set $pool nodelete false; done set pool 1 nodelete to false # ceph osd pool delete pool01 pool01 --yes-i-really-really-mean-it
5.トラブルシュート
私の場合、なぜか?土日にインストールコマンドを実行すると、YumのDL時に途中で止まる事象を確認しました。
途中で止まってしまう箇所は以下の通り。
以下、抜粋 [ceph01.md.jp][DEBUG ] Dependencies Resolved [ceph01.md.jp][DEBUG ] [ceph01.md.jp][DEBUG ] ================================================================================ [ceph01.md.jp][DEBUG ] Package Arch Version Repository [ceph01.md.jp][DEBUG ] Size [ceph01.md.jp][DEBUG ] ================================================================================ [ceph01.md.jp][DEBUG ] Installing: [ceph01.md.jp][DEBUG ] ceph x86_64 2:12.2.5-0.el7 Ceph 3.0 k [ceph01.md.jp][DEBUG ] ceph-radosgw x86_64 2:12.2.5-0.el7 Ceph 3.8 M [ceph01.md.jp][DEBUG ] Installing for dependencies: [ceph01.md.jp][DEBUG ] ceph-base x86_64 2:12.2.5-0.el7 Ceph 3.9 M [ceph01.md.jp][DEBUG ] ceph-common x86_64 2:12.2.5-0.el7 Ceph 15 M [ceph01.md.jp][DEBUG ] ceph-mds x86_64 2:12.2.5-0.el7 Ceph 3.6 M [ceph01.md.jp][DEBUG ] ceph-mgr x86_64 2:12.2.5-0.el7 Ceph 3.6 M [ceph01.md.jp][DEBUG ] ceph-mon x86_64 2:12.2.5-0.el7 Ceph 5.0 M [ceph01.md.jp][DEBUG ] ceph-osd x86_64 2:12.2.5-0.el7 Ceph 13 M [ceph01.md.jp][DEBUG ] ceph-selinux x86_64 2:12.2.5-0.el7 Ceph 20 k [ceph01.md.jp][DEBUG ] leveldb x86_64 1.12.0-11.el7 epel 161 k [ceph01.md.jp][DEBUG ] libbabeltrace x86_64 1.2.4-3.el7 epel 147 k [ceph01.md.jp][DEBUG ] libcephfs2 x86_64 2:12.2.5-0.el7 Ceph 432 k [ceph01.md.jp][DEBUG ] libradosstriper1 x86_64 2:12.2.5-0.el7 Ceph 330 k [ceph01.md.jp][DEBUG ] librgw2 x86_64 2:12.2.5-0.el7 Ceph 1.7 M [ceph01.md.jp][DEBUG ] lttng-ust x86_64 2.4.1-4.el7 epel 176 k [ceph01.md.jp][DEBUG ] mailcap noarch 2.1.41-2.el7 base 31 k [ceph01.md.jp][DEBUG ] pyOpenSSL x86_64 0.13.1-3.el7 base 133 k [ceph01.md.jp][DEBUG ] python-babel noarch 0.9.6-8.el7 base 1.4 M [ceph01.md.jp][DEBUG ] python-beaker noarch 1.5.4-10.el7 base 80 k [ceph01.md.jp][DEBUG ] python-cephfs x86_64 2:12.2.5-0.el7 Ceph 82 k [ceph01.md.jp][DEBUG ] python-cherrypy noarch 3.2.2-4.el7 base 422 k [ceph01.md.jp][DEBUG ] python-flask noarch 1:0.10.1-4.el7 extras 204 k [ceph01.md.jp][DEBUG ] python-itsdangerous noarch 0.23-2.el7 extras 24 k [ceph01.md.jp][DEBUG ] python-jinja2 noarch 2.7.2-2.el7 base 515 k [ceph01.md.jp][DEBUG ] python-mako noarch 0.8.1-2.el7 base 307 k [ceph01.md.jp][DEBUG ] python-markupsafe x86_64 0.11-10.el7 base 25 k [ceph01.md.jp][DEBUG ] python-paste noarch 1.7.5.1-9.20111221hg1498.el7 base 866 k [ceph01.md.jp][DEBUG ] python-pecan noarch 0.4.5-2.el7 epel 255 k [ceph01.md.jp][DEBUG ] python-prettytable noarch 0.7.2-3.el7 base 37 k [ceph01.md.jp][DEBUG ] python-rados x86_64 2:12.2.5-0.el7 Ceph 172 k [ceph01.md.jp][DEBUG ] python-rbd x86_64 2:12.2.5-0.el7 Ceph 105 k [ceph01.md.jp][DEBUG ] python-requests noarch 2.6.0-1.el7_1 base 94 k [ceph01.md.jp][DEBUG ] python-rgw x86_64 2:12.2.5-0.el7 Ceph 73 k [ceph01.md.jp][DEBUG ] python-simplegeneric noarch 0.8-7.el7 epel 12 k [ceph01.md.jp][DEBUG ] python-singledispatch noarch 3.4.0.2-2.el7 epel 18 k [ceph01.md.jp][DEBUG ] python-tempita noarch 0.5.1-6.el7 base 33 k [ceph01.md.jp][DEBUG ] python-urllib3 noarch 1.10.2-5.el7 base 102 k [ceph01.md.jp][DEBUG ] python-webob noarch 1.2.3-7.el7 base 202 k [ceph01.md.jp][DEBUG ] python-webtest noarch 1.3.4-6.el7 base 102 k [ceph01.md.jp][DEBUG ] python-werkzeug noarch 0.9.1-2.el7 extras 562 k [ceph01.md.jp][DEBUG ] userspace-rcu x86_64 0.7.16-1.el7 epel 73 k [ceph01.md.jp][DEBUG ] Updating for dependencies: [ceph01.md.jp][DEBUG ] librados2 x86_64 2:12.2.5-0.el7 Ceph 2.9 M [ceph01.md.jp][DEBUG ] librbd1 x86_64 2:12.2.5-0.el7 Ceph 1.1 M [ceph01.md.jp][DEBUG ] [ceph01.md.jp][DEBUG ] Transaction Summary [ceph01.md.jp][DEBUG ] ================================================================================ [ceph01.md.jp][DEBUG ] Install 2 Packages (+39 Dependent packages) [ceph01.md.jp][DEBUG ] Upgrade ( 2 Dependent packages) [ceph01.md.jp][DEBUG ] [ceph01.md.jp][DEBUG ] Total download size: 60 M [ceph01.md.jp][DEBUG ] Downloading packages: [ceph01.md.jp][DEBUG ] No Presto metadata available for Ceph ここで5分待たされて、以下の表示で止まる。 [ceph01.md.jp][WARNIN] No data was received after 300 seconds, disconnecting... [ceph01.md.jp][INFO ] Running command: ceph --version [ceph01.md.jp][ERROR ] Traceback (most recent call last): [ceph01.md.jp][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/lib/vendor/remoto/process.py", line 119, in run [ceph01.md.jp][ERROR ] reporting(conn, result, timeout) [ceph01.md.jp][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/lib/vendor/remoto/log.py", line 13, in reporting [ceph01.md.jp][ERROR ] received = result.receive(timeout) [ceph01.md.jp][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/lib/vendor/remoto/lib/vendor/execnet/gateway_base.py", line 704, in receive [ceph01.md.jp][ERROR ] raise self._getremoteerror() or EOFError() [ceph01.md.jp][ERROR ] RemoteError: Traceback (most recent call last): [ceph01.md.jp][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy/lib/vendor/remoto/lib/vendor/execnet/gateway_base.py", line 1036, in executetask [ceph01.md.jp][ERROR ] function(channel, **kwargs) [ceph01.md.jp][ERROR ] File "", line 12, in _remote_run [ceph01.md.jp][ERROR ] File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__ [ceph01.md.jp][ERROR ] errread, errwrite) [ceph01.md.jp][ERROR ] File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child [ceph01.md.jp][ERROR ] raise child_exception [ceph01.md.jp][ERROR ] OSError: [Errno 2] No such file or directory [ceph01.md.jp][ERROR ] [ceph01.md.jp][ERROR ] [ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
よくよく動きを観察していると、ceph-radosgwやceph-osdのDLが遅すぎてタイムアウトするような状態となっている事象でした。一台目のノードで引っ掛かると、他のノードにおいても同様に上記の箇所で都度停止してしまいます。
このため、少々ダサい方法ですが各ノードに対して手動でインストールします。
5-1.各ノードでインストールの実行
各ノード(ceph01,ceph02,ceph03)にsshでログインしてください。
ceph01
yumが動作したままになっている可能性が高いのでKillしてください。 # ps -aux | grep yum root 2038 0.7 7.2 1020036 135832 pts/0 S 12:51 0:02 /usr/bin/python /usr/bin/yum -y install ceph ceph-radosgw root 2109 0.0 0.0 112704 972 pts/0 R+ 12:57 0:00 grep --color=auto yum # kill -9 2038 再度、Yum実行 # yum -y install ceph ceph-radosgw さらに、以下のように停止する場合があるため、再々度、Yum実行 Trying other mirror. Error downloading packages: 2:ceph-osd-12.2.5-0.el7.x86_64: [Errno 256] No more mirrors to try. # yum -y install ceph-osd
最初に抜粋した箇所で止まった場合、ceph02やceph03は、まだceph-deploy installが行われていません。このため、一度個別にceph-deploy installを実行し、エラーは吐かせた後で、ceph01と同様の対処を行います。この作業はceph02とceph03で並行して行っても構いません。
ceph02
# ceph-deploy install --release mimic ceph02.md.jp # ps -aux | grep yum # kill -9 {PID} # yum -y install ceph ceph-radosgw
ceph03
# ceph-deploy install --release mimic ceph03.md.jp # ps -aux | grep yum # kill -9 {PID} # yum -y install ceph ceph-radosgw
ceph01
# ceph-deploy install --release mimic ceph01.md.jp ceph02.md.jp ceph03.md.jp ~略~ [ceph01.md.jp][DEBUG ] Complete! [ceph01.md.jp][INFO ] Running command: ceph --version [ceph01.md.jp][DEBUG ] ceph version 13.2.0 (79a10589f1f80dfe21e8f9794365ed98143071c4) mimic (stable) ~略~ [ceph02.md.jp][DEBUG ] Complete! [ceph02.md.jp][INFO ] Running command: ceph --version [ceph02.md.jp][DEBUG ] ceph version 13.2.0 (79a10589f1f80dfe21e8f9794365ed98143071c4) mimic (stable) ~略~ [ceph03.md.jp][DEBUG ] Complete! [ceph03.md.jp][INFO ] Running command: ceph --version [ceph03.md.jp][DEBUG ] ceph version 13.2.0 (79a10589f1f80dfe21e8f9794365ed98143071c4) mimic (stable)
最後にceph01にて再度同じコマンドを実行します。
正常に完了すると、上記の通り各ノードごとにComplete!のメッセージが表示されます。
以上です。
6.最後に
以下のサイトを参考にさせて頂きました。
Ceph(luminous)のインストール方法
删除pool error的解决方法 - sisimi_2017 - 博客园
Protecting your Ceph pools against removal or property changes – Widodh
今回はCephをブロックデバイスとして使う場合の構築方法でしたが、これ以外にもオブジェクトストレージやファイルシステムとして使う場合の構築方法もあるため、一つのストレージシステムで全てをまかなえるのが良いなと思っています。
というのもありますが、一番の理由としてCephはspdkのTargetとして使えるためです。