Ceph
目次
Cephとは
分散ファイルシステム
必要機器
3台以上のPCが必要。
計画(予定)
第一段階でEeePC HDD500G×3台で構築してみる。
第二段階でBeagleBone Black HDD1.5T×4台の追加。
第三段階でRaspberryPi2B HDD2T×2台の追加。
Host名 | IPアドレス | OSD容量 | OS | 機器 |
---|---|---|---|---|
eeepc1 | 192.168.100.1 | 500G | Ubuntu14.04.2 | EeePC 1000H |
eeepc2 | 192.168.100.2 | 500G | Ubuntu14.04.2 | EeePC 1000H |
eeepc3 | 192.168.100.3 | 500G | Ubuntu14.04.2 | EeePC 1000H |
bbb1 | 192.168.100.11 | 1.5T | Ubuntu14.04.2 | BeagleBone Black |
bbb2 | 192.168.100.12 | 1.5T | Ubuntu14.04.2 | BeagleBone Black |
bbb3 | 192.168.100.13 | 1.5T | Ubuntu14.04.2 | BeagleBone Black |
bbb4 | 192.168.100.14 | 1.5T | Ubuntu14.04.2 | BeagleBone Black |
pi1 | 192.168.100.21 | 2T | Raspbian | RaspberryPi2B |
pi2 | 192.168.100.22 | 2T | Raspbian | RaspberryPi2B |
小型ボードだけで構築予定だったが、諸事情によりノートPC 3台で基本的なクラスターを作成し段階的に増やす方向にしました。
当初は、RaspberryPi2BのOSとしてOSMCを計画していたが、実験の結果OSDがDownする事が有り安定していなので急遽Raspbianに変更した。
BeagleBone Blackでも負荷が高い状態が続くとOSDがDownした。sshで接続も出来ない状態になった。不安定だ。
この状況になると、ダウンしたOSDをリカバリーしようとして、さらに負荷が高くなり全滅も有りうる。
EeePC 1000H の仕様
OS:Ubuntu 14.04.2 LTS CPU:Atom N270 RAM:2G HDD:500G LAN:100M USB:増設LAN Giga (実測値253Mbps) USB3.0の時は実測892Mbpsだそうです。
BeagleBone Black のPCの仕様
OS:Ubuntu 14.04.2 LTS CPU:ARM RAM:512M LAN:100M USB:増設HDD 1.5T
BeagleBone Black はメモリーが少ないので、最初から入っているApaceh2を削除します。
apt-get --purge remove apache2
Raspberry Pi2B の仕様
OS:Raspbian CPU:ARM RAM:1G LAN:100M USB:増設HDD 2T
Raspbian標準のcephパッケージはかなり古いそうです。以下を実行し最新の状態にするとよい。
apt-get update apt-get upgrade wget --no-check-certificate -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add - echo deb http://ceph.com/debian-firefly/ wheezy main | sudo tee /etc/apt/sources.list.d/ceph.list
sources.listの編集
nano /etc/apt/sources.list
内容を次の様に変更します。
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi 変更前 ↓ deb http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi 変更後
更に
apt-get update apt-get upgrade apt-get dist-upgrade apt-get autoremove
完了するまで約2時間程度かかります。
前準備
IPアドレスの設定
Hostsの設定
rootログインの設定
EeePCにセットアップしたUbuntuにはssh接続出来なかったのでsshをインストールした。
sudo su apt-get install ssh
rootでいきなりログイン出来る様に設定してしまう。
rootのパスワードを設定します。これでいきなりsshでrootでログイン出来る様になります。
sudo su passwd root 設定するパスワードを2回入力
RaspbianとOSMCは、これでいきなりログイン出来る様になりました。
Ubuntuは頑固でrootのパスワードを設定してもsshでいきなりrootログインはさせてくれなかった。
そこで、設定を変更しました。
sudo su nano /etc/ssh/sshd_config
次の行を見つけ出し変更する。
PermitRootLogin without-password 変更前 ↓ PermitRootLogin yes 変更後
変更後、sshを再起動する。
service ssh restart
SSHパスワード無し鍵の設定
インストール中に何度もパスワードを入力するのは大変、なのでrootで互いに入れるようにしておきます。
1台目で鍵を作って、それを配ります。
cd ~ ssh-keygen ssh-copy-id root@eeepc1 ssh-copy-id root@eeepc2 ssh-copy-id root@eeepc3
配る為に、最初はパスワードを聞いて来ます。今回だけ頑張って入力してください。
Cephのセットアップ
1台目のPCでインストール指示をします
まず、ceph-deployをインストールします。
apt-get install ceph-deploy
次にセットアップデータがカレントに出来る仕様の様なので適当なフォルダーを作ってその中で作業を行う。
cd mkdir ceph cd ceph ceph-deploy new eeepc1 eeepc2 eeepc3 ceph-deploy install eeepc1 eeepc2 eeepc3
これで、各ノードにcephがインストールされます。
monの設置
monを各ノードに設置します。
ceph-deploy mon create-initial
これでmonが3台のPCにインストール出来たはずだ。monの状態を確認してみよう。
ceph mon stat
osdの設置(HDD提供開始)
提供予定のHDDを予め/mnt/sda1にマウントしておきます。
osdを設定します。
ceph-deploy osd prepare eeepc1:/mnt/sda1 ceph-deploy osd prepare eeepc2:/mnt/sda1 ceph-deploy osd prepare eeepc3:/mnt/sda1 ceph-deploy osd activate eeepc1:/mnt/sda1 ceph-deploy osd activate eeepc2:/mnt/sda1 ceph-deploy osd activate eeepc3:/mnt/sda1
これでosdの設定が出来ました。osdの状態を確認してみましょう。
ceph osd stat
mdsの設置
mdsを設置します。
ceph-deploy mds create eeepc1 eeepc2 eeepc3
これでmdsの設置が出来ました。mdsの状態を確認してみましょう。
ceph mds stat
最後に全体の状態の確認
mon,osd,mdsの設定が終わったら、全体の確認をします。
ceph health
Cephのコマンドまとめ
コマンド名 | 意味 |
---|---|
ceph health | 全体の状態を見る |
ceph health detail | 全体の状態を詳しく見る |
ceph osd stat | osdの状態を見る |
ceph osd tree | osdの状態を詳しく見る |
ceph mon stat | monの状態を詳しく見る |
ceph mds stat | mdsの状態を詳しく見る |
ceph df | ディスク・ドライブの使用量を表示する |
ceph-deployのコマンドまとめ
調査中の為、暫くお待ちください。
CephFSでのマウント
マウント用のフォルダーを作成します。
mkdir /mnt/cluster
CephFSで使うキーを/etc/ceph/admin.keyに保管します。
ceph auth get-key client.admin > /etc/ceph/admin.key
マウントします。monを提供しているノードならどこでもいいらしい。今回はeeepc1に接続。
mount -t ceph eeepc1:6789:/ /mnt/cluster/ -o name=admin,secretfile=/etc/ceph/admin.key
マウント実行中にCephFSが mount: error writing /etc/mtab: Invalid argument というエラーメッセージを出すが、これは無視してもよい。
マウント出来ているか確認します。
root@pi1:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.3G 4.4G 2.6G 63% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6.6M 457M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 56M 20M 37M 35% /boot cgmfs 100K 0 100K 0% /run/cgmanager/fs tmpfs 93M 0 93M 0% /run/user/107 tmpfs 93M 0 93M 0% /run/user/0 192.168.100.1:6789:/ 6.8T 919G 5.9T 14% /mnt/cluster
cronでマウント
起動後に毎回マウントするのは面倒なので、cronで起動時に自動マウントされる様に設定します。
レプリケーション数を変更するには
標準状態でインストールすると、レプリケーションは3になっていた。
つまり、三重化し耐障害性を高めている。ちょっとやりすぎかも。
そこで、二重化に変更してみた。
ceph osd pool set data size 2 ceph osd pool set metadata size 2 ceph osd pool set rbd size 2
このコマンドで即座に、変更される様だ。ceph -wは、もう使わない?
今回は、poolデータ三種類とも二重化に変更したが、rdbだけ三重化とか出来る。
レプリケーション数は多い方が安全だが、多いと書き込み量が増えて速度が落ちる様だ。
2~3ぐらいでいいでしょう。3から2に変更した事により1.5倍ぐらい速度アップした感じです。
注意事項
OSMCをOSとして使う場合
CephFSマウントは出来ませんでした。カーネルの再構築が必要なようだ。現在、再構築方法不明。
RaspbianをOSとして使う場合
CephFSマウントは出来ませんでした。カーネルの再構築が必要なようだ。
カーネル構築方法 https://www.raspberrypi.org/documentation/linux/kernel/building.md
コンパイルには12時間ほどかかるらしい。と、言う事でやってみた。
あれやこれやで、4時間はかかります。構築方法調べたり、必要モジュール調べたりしたので3日はかかりました。
で、結論。CephFSでマウント出来る様になりました。
git clone --depth=1 https://github.com/raspberrypi/linux apt-get install bc apt-get install libncurses5-dev cd linux KERNEL=kernel7 make bcm2709_defconfig make menuconfig
ここで、ceph関係のモジュールをチェックします。
Networking support ---> Ceph core library File systems ---> Network File Systems ---> Ceph distributed file system Enable Ceph client caching support (NEW) Ceph POSIX Access Control Lists (NEW)
それぞれ選択しSaveします。Exitを数回選び抜けます。そしていよいよコンパイルです。2時間ほどかかります。
make zImage modules dtbs -j 4 make modules_install cp arch/arm/boot/dts/*.dtb /boot/ cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ cp arch/arm/boot/dts/overlays/README /boot/overlays/ scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img reboot
これでCephFSでマウント出来る様になりました。
SDカードの容量
8GのSDカードにシステムを入れていたのだが、以下のメッセージが出ました。
root@pi1:~# ceph health detail HEALTH_WARN mon.pi1 low disk space mon.pi1 low disk space -- 30% avail
残り容量2G位だった。
root@pi1:~# df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/root 7159512 4622888 2197052 68% /
不要なデータを全て消して残り容量を増やすと正常になりました。残り容量3.5G位
root@pi1:~# df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/root 7159512 3311976 3507964 49% /
時計の時刻のズレ
内蔵クロックが無いので起動時に、タイムサーバで調整する様だが、Cephのルールが厳しすぎる。
0.05秒以上のズレはダメみたいです。monサーバ同士で調整し最終的には、ピッタリ一致するようですが、調整に凄く時間がかかります。家の場合、最大5秒のズレがあった様で、調整には30分程度かかりました。
root@arm1:~# ceph health detail HEALTH_WARN clock skew detected on mon.osmc2, mon.osmc3 mon.osmc2 addr 192.168.100.102:6789/0 clock skew 2.42326s > max 0.05s (latency 0.0367512s) mon.osmc3 addr 192.168.100.103:6789/0 clock skew 0.16542s > max 0.05s (latency 0.103259s)
こうならない為にもNTPはインストールしておこう。
apt-get install ntp
保守管理
monの追加
管理用PCのceph.confを直接編集します。ノード名とIPアドレスを追加し保存終了後、次のコマンドで各ノードに設定値を送る。
ceph-deploy --overwrite-conf mon create-initial
monの削除
管理用PCのceph.confを直接編集します。ノード名とIPアドレスを削除し保存終了後、次のコマンドで各ノードに設定値を送る。
ceph-deploy --overwrite-conf mon create-initial
その後、次のコマンドで実際に切り離す。
ceph-deploy mon destroy ノード名
すでにノードがダウンしている場合
ceph mon remove ノード名
切り離したノードにログインし/etc/ceph/ceph.confを編集します。切り離しノードのノード名とIPアドレスを削除し保存します。
osdの追加
追加するHDDをxfsフォーマットし予め、/mnt/sdb1とかにマウントしておく。
ceph-deploy osd prepare ノード名:/mnt/sdb1 ceph-deploy osd activate ノード名:/mnt/sdb1
追加出来たか確認する。
ceph osd tree
osdの削除
削除するosdを確認する
ceph osd tree
切り離すosdの番号を確認出来たら、実際に切り離す。
ceph osd crush remove osd.1
即座にリカバリー作業が始まる。欠けたosdを補う動作になります。状態を見ます。
ceph health
作業が終わるまで暫く待ちます。リカバリーが終わったら、ノードを再起動します。
ssh ノード名 reboot
osdがdownしているか確認します
ceph osd tree
ダウンしていたら、そのまま切り離す。
ceph osd rm osd.1
放置しておくと、復活する?リブート中に削除してしまおう。
osdを提供していたノードを削除
切り離すノード名を確認する
ceph osd tree
次のコマンドで実際に切り離す
ceph osd crush remove ノード名
切り離せたか、確認する
ceph osd tree
mdsの追加
ceph-deploy mds create ノード名
mdsの削除
現在、削除方法不明