MicroCephで超高速に作る、懐が厳しいニキのための自家製NAS②FileSystem運用編

環境構築は前の記事

https://qiita.com/jp_ibis/items/7b09bd2a4a1b70167ad3

# いざ運用
MicroCephは難しいことをしなければ簡単に使えるようにしてくれています。この記事では今回やりたかったHDD増設や万が一ホストが死んでしまったときの復旧の仕方について記載します。

残念ながらCephのトラブルでたどり着いた人、難しいほうのCephには対応しておらんのじゃよ(´・ω・`)

ここにはMicroCephで楽ちん運用の話しか書かれておりませぬ……

(まだ運用始めたばかりなので、途中途中でなにか追記するかも)

# ダッシュボード
運用して行くにあたって、GUIのダッシュボードで状態が見やすくなってると嬉しいですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140718/90362946-0125-2d51-9722-7546412b3a2b.png)

CephにはWeb用ダッシュボードサーバが付いているのですが、最初は無効になっています。まずはこれを有効にしておきます。

セキュリティはご家庭内向けなので考えません、オールトラストです。

おうちレベルだと証明書管理するよりSSHトンネルする方がまだ楽だと思うのですが、どうですかね？(´・ω・`)

```
ダッシュボードサーバ起動(port:8080)
$ sudo microceph.ceph mgr module enable dashboard

SSLは使わない
$ sudo microceph.ceph config set mgr mgr/dashboard/ssl false
```

パスワードはファイルに記述してそれを読み込ませる方式です。historyに残さないやつですね。

リモートログイン等の時は/root下でないとパスワードファイルが読めないようです……

```
/root下にパスワードが書かれたファイルを作成
$ sudo su -
# cd /root
# vi passwd.txt
(お好きなパスワードをどうぞ)

例としてadminという名前でユーザーを作ります(お好きに変えてね)
弱いパスワードは --force-password で強制できます。
# sudo microceph.ceph dashboard ac-user-create admin -i passwd.txt administrator --force-password

後片付け
# rm passwd.txt
# exit
```

これで `localhost:8080` をブラウザで開いたらダッシュボードが表示されます。

外からアクセスしたいときはFWを開けてアクセスしてください、この辺の運用は普通のWebサーバと同じです。

# HDDの増設・取り替え

MicroCephでのシンプルな運用だと簡単です。microcephのdiskコマンドでブロックストレージ(パーティションではない)を選択してください

あれこれしなくても自動でクラスタに追加・削除してくれます。使いかけのHDDの場合は`--wipe`を付ければクリーンな状態にしてから使ってくれます。

```
$ sudo microceph disk add <デバイス(/dev/sdb等)> --wipe
```

取り外すときはremove

```
$ sudo microceph disk remove <デバイス(/dev/sdb等)>
```

# バックアップとリストア

HDDが壊れたときは壊れたものを取り替えれば終わりですが、ホストが壊れたときはさぁ大変。マルチホストのクラスターなんて贅沢は個人ではできませんよね？💸

なにも手を打たない状態でホストPCが壊れると詰むようです。Cephの難しいやつだとたぶん復旧できそうな気がしますが、MicroCephでお手軽レベルでは詰みます。

MicroCephでもちゃんと手を打っていれば**簡単な障害**なら復旧できます(でも今回のやり方はちょっと怪しいです、ごめんなさい😇)

***バックアップ大切！***

### バックアップ

_※ドキュメントに書かれている方法ではないのでバージョン次第でダメになるかも_

バックアップといってもデータのバックアップは大変なので環境のバックアップだけおこないます。具体的には`/var/snap/microceph`だけバックアップすれば良いようです。

```
サーバを止めてから！
$ sudo snap stop microceph

バックアップ。ホストの故障対策なので、ホストの外で管理してください。
※シンボリックリンクがそのまま保存できること
$ sudo tar -czvf microceph-YYYYMMDD.tar.gz /var/snap/microceph
$ tar -tvf microceph-YYYYMMDD.tar.gz  | grep current
lrwxrwxrwx root/root         0 2024-07-04 16:49 var/snap/microceph/current -> 999

$ sudo mv microceph-YYYYMMDD.tar.gz <バックアップ保管場所>

バックアップ完了
$ sudo snap start microceph
```

日々バックアップを取る必要まではなく、設定を変えたりHDDを増設したりと環境が変わったときだけバックアップすれば大丈夫そうです。

### リストア

`/var/snap/microceph`以下をバックアップファイルで置き換えます

まずはMicrocephをインストール

```
$ sudo snap install microceph
$ sudo snap refresh --hold microceph

bootstrapで子サーバーが動き出すのでここまでやっておくと楽
$ sudo microceph cluster bootstrap
$ sudo snap stop --disable microceph
```

バックアップで置き換え

```
$ sudo rm -r /var/snap/microceph
$ sudo tar -xzvf microceph-YYYYMMDD.tar.gz -C /
```

**<font color=red>ここでホストをシャットダウンし、HDDをつないで再起動</font>**

ホスト再起動後にMicroCephを起動

```
$ sudo snap start --enable microceph
```

これでクラスターが復活します

# 停止・再開

個人運用だとわりとホストの電源を落とすことってあると思います。実家に帰るときとか全サーバ落として家を空けますよね？

……よね？\_(:3」∠)\_

会社でも数ヶ月に一回電源点検とかで落としたりするので、停止・再開はストレージ管理者にとってはわりと一大イベントだったりします。

FileSystemを使っている場合停止前にサーバの操作が必要になりますので、下に読み進めてください。

RBDを使っている場合は調査中。特になにも必要ないのかも……

### 停止

ストレージシステムはシャットダウン前に中の処理(キャッシュ書き込みや再配置等)が落ち着くまで待つ必要があります。

でも放っておいたらいつまでもガリガリやってるので、停止しろーってフラグを設定する必要があります。

https://docs.ceph.com/en/latest/cephfs/administration/#taking-the-cluster-down

マルチホスト運用の場合はクラスタへのjoinやリバランス等を止める必要がありますが、今回はシングルホスト前提なのでファイルシステムを止める(＝データ入出力を止める)だけで大丈夫じゃないかなって。

```
$ sudo microceph.ceph fs set cephfs01 down true
```

これでファイルシステムが停止するので、ダッシュボードを眺めてODSsが静まるまで待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140718/074b6bc9-8c5a-61e0-a1f6-f6f130e88342.png)

後は普通に停止できます

```
$ sudo snap stop microceph
```

### 再開

MicroCephがenableであればホストの再起動時に自動で起動します。手動で起動するなら

```
$ sudo snap start microceph
```

続いてファイルシステムのdownフラグを解除します。

```
$ sudo microceph.ceph fs set cephfs01 down false
```

これで読み書きが復活します。

### fstabの自動マウントとは相性が悪い

fstabに次のような感じで書けば起動時にマウントするのですが、ファイルシステムがdownしているとマウントに失敗します。

```fstab
admin@.cephfs01=/ /mnt/ceph ceph mon_addr=<IPアドレス>:6789,noatime,_netdev 0 0
```
※IPアドレスは192.168.xxx.xxxで指定。localhostや127.0.0.1はダメっぽい(ceph.confのネットワーク設定による)

MicroCephのホスト以外からだったら自動マウントでいいのですが、ホストは起動後にdownフラグの解除を行う必要があるのでそれまでマウントできません。

起動後に自動実行するスクリプトがあれば、そちらにファイルシステムのdown解除とマウントを追加するようにしてください。

### ちょくちょく再起動するような環境とは相性が悪い？

普段使いのPCで運用する場合も相性が悪いです。

というのも起動時にdeep-scrubがスケジュールされるようで、数時間ずっとHDDをガリガリやり始めます。

個人運用でdeep-scrub(データのチェックに加えHDDの不良セクタまで調べてるっぽい)はちょっと大袈裟だと思うので、データがそこまで大事なものでなければdeep-scrubは止めてもいいんじゃないかなって。

```
$ sudo microceph.ceph osd set nodeep-scrub

deep-scrubを止めるとhealthで警告が出るので止める
$ sudo microceph.ceph health mute OSDMAP_FLAGS
```

たまに戻して実行させれば良いでしょう。

```
$ sudo microceph.ceph osd unset nodeep-scrub
```

# 現在未解決の問題点

### デバイス名のずれはダメそう

ディスクを増設するときにHDDの中にSSDを紛れ込ませるなど、/dev/sd?がずれるようなことをするとpool(PG)が死にます😇
(外して順番を元通りにすると生き返る)

おかしいな、UUIDで管理されてるはずなのになんで/dev/sd?で問題が出るんだろう……