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 3 years have passed since last update.

ARMボード色々でおうちDockerSwarmクラスタ Ceph編(失敗)

Last updated at Posted at 2021-07-15

何百番煎じどころか 何千番煎じか分かりませんが クラスタを作っている所(進行形)なのでそのメモを残していきます。この記事ではおうちARMボードに、Cephを入れていきます。実際には上手く行かなかったのですが、試してみた、というメモとして残します。

おうちクラスタシリーズ

Cephについて

複数のストレージを使って分散型オブジェクトストレージを作れるOSSです。S3的な使い方もできるし、単にファイルを入れてくファイルシステムとしても使えます。ソフトウェアRAID的なやつです。(分散ストレージ ソフトウェア Ceph(セフ)とは等参照)

GlusterFSってやつもあると聞いたけど?

導入がシンプルで、要求スペックも低いのだけど転送パフォーマンスがCephより悪いらしいです。(ソースは不明)あとS3が使えたほうが後々便利そうなのでCephにします。

導入

他の記事ではCeph-deployがよく出てくるのですが、現在非推奨になっているようなので、cephadmを使う最新の方法で導入します。

lvm2のインストール(Cephクラスタに参加させる全ノードに)
sudo apt-get install lvm2
cephadmのインストール
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してきたり、設定したりしてくるのでそこそこ時間かかります
おわったらダッシュボードのアドレスとユーザー名、パスワード等が表示されます。

CephFSファイルシステムをマウントする場合インストール
sudo cephadm install ceph-common
Cephではホスト名ベースで処理をするようなので変更したい場合はここでやっておく
sudo nano /etc/hostname
sudo nano /etc/hosts
CephではIPアドレスが動的に変わったらダメなようなので固定していない場合は固定しておく
# debian系の場合
sudo nano /etc/network/interfaces

# dietpiの場合
sudo dietpi-config
Network Options: Adapters -> Ethernet -> Change mode -> Copy(現在の接続構成をコピー) -> StaticIP(変更) -> Apply
Cephではノード間の時刻差が0.05秒以下でないといけないのでNTP同期を有効にする
# 本来LAN内にNTP鯖を建てるのが望ましいようだが、今回はインターネットから取得する
# 下記コマンドは時刻同期が有効か確認する / loadedは実行していないことを示す
# dietpiの場合、起動時に一瞬だけ同期してその後は同期されない仕様らしい
sudo systemctl status systemd-timesyncd
# 時刻同期サービスを有効化
sudo systemctl enable systemd-timesyncd
# 時刻同期サービスを起動
sudo systemctl start systemd-timesyncd
クラスタにしたいノードそれぞれのhostsにそれぞれのホスト名とアドレスを登録しておく
sudo nano /etc/hosts
モニターデーモンを作成したノード上でSSH鍵を登録する
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
Cephに新しいノードの存在を教える
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: 時刻同期が有効でない
CephにOSDとして追加できるデバイス一覧を表示する
sudo ceph orch device ls

Cephに追加できる条件は下記のようになっている

  • デバイスにはパーティションがあってはなりません。
  • デバイスはLVM状態であってはなりません。
  • デバイスをマウントしないでください。
  • デバイスにファイルシステムが含まれていてはなりません。
  • デバイスにCephBlueStoreOSDが含まれていてはなりません。
  • デバイスは5GBより大きくする必要があります。
CephにOSDとして追加する
sudo ceph orch daemon add osd ホスト名:/dev/sda

ここで、 デバイスにパーティションが複数あるので追加できないことに気づいてしまった。
どうやらOctopus版になる前のFilestoreではできたようだが、現行のBluestoreという方式ではパーティションを使えないらしい。
https://github.com/rook/rook/issues/6849

ならばFilestoreとして作成すればいいのではないかと思い やってみた。

Cephのボリュームとして作成できるかを確認する(実際にやる場合はprepareをcreateにする)
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/*
Ceph用仮想ボリュームの消去
sudo lvs
sudo vgremove 表示されるvg
y
y
sudo pvremove /dev/sda
実行中のCephの削除
# Portainerなどで開いて コンテナを削除

参考リンク

Raspberry Piで始めるCeph入門 - qiita @tnaoto
DEPLOYING A NEW CEPH CLUSTER - Ceph doc

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?