何百番煎じどころか 何千番煎じか分かりませんが クラスタを作っている所(進行形)なのでそのメモを残していきます。この記事ではおうちARMボードに、Cephを入れていきます。実際には上手く行かなかったのですが、試してみた、というメモとして残します。
おうちクラスタシリーズ
- 第1弾: ハードウェア編
- 第2弾: Portainer編
- 第3弾: Ceph編(ここ)
Cephについて
複数のストレージを使って分散型オブジェクトストレージを作れるOSSです。S3的な使い方もできるし、単にファイルを入れてくファイルシステムとしても使えます。ソフトウェアRAID的なやつです。(分散ストレージ ソフトウェア Ceph(セフ)とは等参照)
GlusterFSってやつもあると聞いたけど?
導入がシンプルで、要求スペックも低いのだけど転送パフォーマンスがCephより悪いらしいです。(ソースは不明)あとS3が使えたほうが後々便利そうなのでCephにします。
導入
他の記事ではCeph-deployがよく出てくるのですが、現在非推奨になっているようなので、cephadmを使う最新の方法で導入します。
sudo apt-get install lvm2
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
chmod +x cephadm
sudo ./cephadm add-repo --release pacific
sudo ./cephadm install
sudo cephadm bootstrap --mon-ip 192.168.0.X(モニターデーモンとして動作させるアドレス)
必要なDockerImageをPullしてきたり、設定したりしてくるのでそこそこ時間かかります
おわったらダッシュボードのアドレスとユーザー名、パスワード等が表示されます。
sudo cephadm install ceph-common
sudo nano /etc/hostname
sudo nano /etc/hosts
# debian系の場合
sudo nano /etc/network/interfaces
# dietpiの場合
sudo dietpi-config
Network Options: Adapters -> Ethernet -> Change mode -> Copy(現在の接続構成をコピー) -> StaticIP(変更) -> Apply
# 本来LAN内にNTP鯖を建てるのが望ましいようだが、今回はインターネットから取得する
# 下記コマンドは時刻同期が有効か確認する / loadedは実行していないことを示す
# dietpiの場合、起動時に一瞬だけ同期してその後は同期されない仕様らしい
sudo systemctl status systemd-timesyncd
# 時刻同期サービスを有効化
sudo systemctl enable systemd-timesyncd
# 時刻同期サービスを起動
sudo systemctl start systemd-timesyncd
sudo nano /etc/hosts
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ホスト名
# まだ署名がsshに入っていないが接続していいか訊かれる
yes
# rootのパスワードを求められるので入力する
# dietpiの場合(セットアップによるが)ユーザーパスワードと同じになっているかも
password
# Number of key(s) added: 1
# Now try logging into the machine, with: "ssh 'root@ホスト名'"
# と言われるので試しに接続する
ssh root@ホスト名
# パスワードを求められるので入力する
password
# 接続できるはず、接続できた場合は即exitで構わない
exit
sudo ceph orch host add ホスト名 ホストのIPアドレス
# うまく行っていたら以下のようなことを言われる
# Added host 'ホスト名' with addr 'ホストのIPアドレス'
# 問題があった場合以下のようなことを言われる
# lvcreate binary does not appear to be installed: lvm2が入っていない
# No time synchronization is active: 時刻同期が有効でない
sudo ceph orch device ls
Cephに追加できる条件は下記のようになっている
- デバイスにはパーティションがあってはなりません。
- デバイスはLVM状態であってはなりません。
- デバイスをマウントしないでください。
- デバイスにファイルシステムが含まれていてはなりません。
- デバイスにCephBlueStoreOSDが含まれていてはなりません。
- デバイスは5GBより大きくする必要があります。
sudo ceph orch daemon add osd ホスト名:/dev/sda
ここで、 デバイスにパーティションが複数あるので追加できないことに気づいてしまった。
どうやらOctopus版になる前のFilestoreではできたようだが、現行のBluestoreという方式ではパーティションを使えないらしい。
https://github.com/rook/rook/issues/6849
ならばFilestoreとして作成すればいいのではないかと思い やってみた。
sudo cephadm shell ceph-volume lvm prepare --data /dev/sda2
#
# auth: unable to find a keyring on /var/lib/ceph/bootstrap-osd/ceph.keyring: (2) No such file or directory
# monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
# [errno 13] RADOS permission denied (error connecting to the cluster)
恐らくだが、cephadmを使う場合想定されていない動作の様子。うーん、どうしよう困った...
なので
とりあえず諦めて、1台のパーティションを全て消して、まるごとボリュームとして扱うことにした。
そして改めて ceph daemon add osd したところ
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/sysctl.d/90-ceph-165bb7e6-e4c3-11eb-aa5e-00e04c6800f3-osd.conf'
と言われてうまく行かなかった。
sudo ceph log last cephadm
すると 実行ログが出るというのを見てやってみたところ
armv7用のceph/cephが見つからない
/ arm64用のceph-grafanaが見つけられない
などのFatalエラーが暴れ回っていった
どうやらこの方法では、ARMのDockerイメージがまだ用意されてないため、うまくいかないのかも...
今回は一旦Cephの導入を諦めることにした。
Cephの削除
仮想ボリュームなどが結構作られるので、完全に初期化して元に戻そうとすると結構めんどくさい手順が必要でした。この手順だとcephadmは消えませんが容量を取る以外に邪魔にはならないので放置します。
sudo systemctl stop ceph.target
sudo systemctl disable ceph.target
sudo rm /etc/systemd/system/ceph.target
sudo rm -rf /etc/ceph/*
sudo rm -rf /var/log/ceph/*
sudo lvs
sudo vgremove 表示されるvg
y
y
sudo pvremove /dev/sda
# Portainerなどで開いて コンテナを削除
参考リンク
Raspberry Piで始めるCeph入門 - qiita @tnaoto
DEPLOYING A NEW CEPH CLUSTER - Ceph doc