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?

この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

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

Last updated at Posted at 2024-07-15

環境構築は前の記事

なにもしてない(嘘)のに壊れた(´;ω;`)ブワッ

CephFSベースでの運用でたまに失敗して泣きながらリペアしてたりしましたが、そこそこ安定し始めたので徐々に本運用にスライドさせてました。

どうやらSambaよりCephFSの方が速いみたいなので、Windowsからデータを送るときはWSLのUbuntu内にCephFSでマウントして……みたいなことしてましたが、さすがにいちいちWSL立ち上げるのも面倒なのでWindowsに直接CephFSを突っ込もうとしたのですが……

Windowsが立ち上がらなくなりました(´;ω;`)ブワッ

セーフモードでも立ち上がらないとかなかなかやっかいなことになりましたが、ドライバの署名を無効にすると立ち上がりました。それでそそくさとドライバをアンインストールして今に至る_(:3」∠)_

だめかー。Windows用ドライバ、安定しないかー(´・ω・`)

当初の目論見としてはWindowsにCephFSを入れて高速大量転送しつつ、他端末等からはSamba経由でファイルアクセスする予定でした。

WSLを通せばそれも可能ですがいちいちWSLを立ち上げるのがメンドクサイ。ちょっとした変更をGitでcommitしたいだけみたいなとき、このWSLを立ち上げる手間が苦痛です。

もういっそCephFSをやめてファイル転送はSambaにまとめちゃおうかと考えたわけですが、そうなるとCephFSではなくRBDの方も選択肢に入ります。

※RBDを設定中に知ったのですが、RBDもネットワーク越しマウントできました

RBDを使ってみたかったのもあって、CephのホストにRBDでマウントしてSamba経由でファイル転送するやり方に変更してみました。

余談ですが、私はRBDとRDBをすぐに間違えます(´・ω・`)

RBDの構築

サーバ側でRBD用のpool(論理パーティション)を作ってimage(仮想ディスク)として適当なサイズを切り出します。

クライアント側で切り出したimageをブロックデバイスとして登録(map)します。

サーバ側作業

それではまずはRBD用のpoolを作ります。今回はrbd-dataという名前で進めます。

プールを作って
$ sudo microceph.ceph osd pool create rbd-data

RBDのpoolとして初期化
$ sudo microceph.rbd pool init rbd-data

続いてimageの作成を行います。

ドキュメントにはクライアント側のコマンドって書いてあってクライアントのコマンドでも作れるのですが、サーバに変更を加えるのでサーバ側の作業としておきます。

サイズ指定がありますが 最大サイズの指定なだけなので、後から増減させることができます

気楽に作成しちゃいましょう。

$ sudo microceph.rbd create rbd-data/rbd01 --size 4096 --image-feature layering

クライアント側作業

CephFSの時と同様、クライアント側のコマンドはceph-commonが入っていれば使えます。

ceph-commonのインストールがまだならこちらを参照して設定してください。

RBDのイメージをクライアント側のブロックデバイスとして見えるようにします。ネットワーク越しにmapすることもできるようですが(WSLは不可っぽい)、今回はホストで全部やるのでモニターアドレス指定は不要です。

$ sudo rbd map rbd-data/rbd01 --name client.admin

※再起動するとマップされたデバイスは消えます

lsblkでマウントできるブロックデバイスが作成できているか見ておきます。

$ lsblk
省略
rbd0        251:0    0     4G  0 disk 
省略

デバイス名がrbd0となっています。これを使うこともできますがimageが増えたときにデバイス名とimageの対応を覚えておくのが面倒です。

/dev/rbd/<pool名>/<image名>も同じデバイスとして使えるので、こちらを使うようにしておいた方がトラブルは少ないでしょう。

続いてフォーマット。xfs等好きなフォーマットで可。

$ sudo mkfs.ext4 -m0 /dev/rbd/rbd-data/rbd01

後はフォーマットされたデバイスとして普通にマウントして使えます。

$ sudo mkdir /mnt/rbd
$ sudo mount -t ext4 /dev/rbd/rbd-data/rbd01 /mnt/rbd

起動時にマウントする

※HDDを外してたりsystemdの起動順がずれた等でRBDのmapやマウントに失敗すると、OSが起動しなくなります!

デバイスmapを行うサービスrbdmap.serviceがあるのでそちらを使います。

まずは設定から。

イメージ名とユーザー(とそのキー)を指定しておきます。

$ sudo vi /etc/ceph/rbdmap
rbd-data/rbd01  id=admin,keyring=/etc/ceph/ceph.client.admin.keyring

設定が書けたらサービスを実行します。

$ sudo systemctl start rbdmap.service

ホスト起動時に自動でstartするように
$ sudo systemctl enable rbdmap.service

自動マウントはfstabに普通のブロックデバイスと同様の設定を書いておきます。

$ sudo vi /etc/fstab
/dev/rbd/rbd-data/rbd01 /mnt/rbd ext4 defaults 0 0

反映
$ sudo systemctl daemon-reload

サービス起動順やHW構成の変更時には十分気をつけてください。

OS起動時に自動でマウントしないように(個人向け)

rbdmap.serviceをdisableにして、fstabにnoautoを付けておきます。

$ sudo systemctl disable rbdmap.service

$ sudo vi /etc/fstab
/dev/rbd/rbd-data/rbd01 /mnt/rbd ext4 defaults,noauto 0 0

反映
$ sudo systemctl daemon-reload

簡単なコマンドでmapしてマウントできます。

$ sudo systemctl start rbdmap.service
$ sudo mount -a

リサイズ

RBD自体のリサイズは簡単にできますが、ファイルフォーマットのリサイズも行う必要があります。

ext4の場合resize2fsが使えます。

$ sudo microceph.rbd resize rbd-data/rbd01 --size 3T

ファイルフォーマット側のリサイズ
$ sudo e2fsck -fy /dev/rbd/rbd-data/rbd01
$ sudo resize2fs /dev/rbd/rbd-data/rbd01

dfで確認
$ df -h /dev/rbd/rbd-data/rbd01
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0       3.0T  604G  2.4T  20% /mnt/rbd

ベンチマーク

RBDをマウントしたホストにSamba経由でアクセス(CIFS3.1.1:Wifi接続)

スクリーンショット 2024-07-15 201834.png

CephFSでSamba経由した時とほぼ一緒な感じです。微妙に速度が落ちてますかね?

CephFSの時と同じでベンチマーク上では速度が出てませんが、実際に大きなファイルを転送すると結構速いです。

ダッシュボードのインストール等

ダッシュボードの追加やバックアップ・リストアに関してはCephFSの時にやっちゃってるのでここでは省略。

データコピー

CephFSに頑張ってデータを移したばかりですが仕方ありません。CephFSからRBDにさらに移し替えます。この辺いろいろやり方があると思いますが、私はrsync -daP派です。

まずは確認
$ sudo rsync -ndaP /mnt/cephfs /mnt/rbd

よさそうならnを取って実行
$ sudo rsync -daP /mnt/cephfs /mnt/rbd

なぜか1ディレクトリコピーし損ねてたので、rsync -ndavfindなりで漏れがないか確認した方がいいかも。

$ find /mnt/cephfs /mnt/rbd -type f -printf "%s %P\n" | sort | uniq -u

本番環境へ移行

ここまでお試しでNotePCで構築・運用してきました。いざ本番環境に移行です。

本番用機材

6TBのHDD x 3台
楽天ビック:40,295円

image.png

HDDケース
Amazon:10488円

image.png

ホストPC
Amazon:23,800円

image.png

合計:74583円

ポイントが結構残ってたので、わりと余裕をもって10万円を切りました☺️

Cephのホスト変更

環境移行時の注意ですがホスト名とipは移行前の環境と同じでなければなりません。

この辺りがRAIDと違ってメンドクサイところですね。クラスターがホスト名やipをガッツリ固定前提になっているので、ipやホスト名を変えての環境移行はちょっと難しいです。

ホスト名とipが同じでさえあればバックアップと同じ手順でバックアップのtar.gzの展開先を新しい環境の/var/snap/microcephにすればそれでお引っ越し完了です。

まずはなんとかしてバックアップを新しいホストに持って来ます。

後はリストアと同じ手順です。

  1. Microcephをインストールしてcluster bootsrapまでする
    $ sudo snap install microceph
    $ sudo snap refresh --hold microceph
    $ sudo microceph cluster bootstrap
    
  2. 一旦MicroCephを停止して、/var/snap/microcephを削除して置き換える
    $ sudo snap stop --disable microceph
    $ sudo rm -r /var/snap/microceph
    $ sudo tar -xzvf microceph-YYYYMMDD.tar.gz -C /    
    
  3. ホストを再起動してからMicroCephを起動する
    $ sudo reboot
    $ sudo snap start --enable microceph
    

これで上手くい……かない_(:3」∠)_

起動直後はPGがinactiveになったりして泣きそうになりましたが、deep-scrubを有効に戻してあちこち診断しながら何度かホストごと再起動しているうちに勝手に復活しました。

謎ぃ(´・ω・`)

移行先でマウントする

新しいホストにceph-commonを入れてRBDデバイスのmapをやり直します。

$ sudo apt install ceph-common

ceph-commonの設定
$ cd /etc/ceph
$ sudo ln -s /var/snap/microceph/current/conf/ceph.conf .
$ sudo ln -s /var/snap/microceph/current/conf/ceph.client.admin.keyring .

map用の設定を行います。

$ sudo vi /etc/ceph/rbdmap
rbd-data/rbd01  id=admin,keyring=/etc/ceph/ceph.client.admin.keyring

disable必須!
$ sudo systemctl disable rbdmap.service
$ sudo systemctl start rbdmap.service

mount用の設定を行います。

$ sudo vi /etc/fstab
/dev/rbd/rbd-data/rbd01 /mnt/rbd ext4 defaults,noauto 0 0

反映
$ sudo systemctl daemon-reload

設定を使ってmap&mountします。

$ sudo systemctl start rbdmap.service
$ sudo mount -a

お引っ越し完了☺️

$ ls /mnt/rbd/
backup/     lost+found/ repos/      share/

ベンチマーク

新しいホスト(MiniPC)上のRBD(CIFS3.1.1:有線LAN)

image.png

有線LANになったのでさらに速くなりました☺️

image.png

夏休みの自由研究終了

ホスト名やipが同じでないといけないというのはちょっと辛いですね。

調べてみたらorchやらceph-volumeやらceph-monやらを使って環境移行できるようですが、基本的には それ(ip)を かえるなんて とんでもない! ってことみたいです。

MicroCephの範囲を超えてくるので(orchは非サポート)、ip・ホスト名変更については諦める方向にします。

ip・ホスト名を変えたいときは新しいip・ホストのストレージを作って、普通にデータコピーしろってことでしょう。

個人には辛い😢

そうはいってもホームルーターを変えただけでネットワークグループごとまるっとかわるのが個人環境。

余計な労力をかけないことを考えたらRAID10の方がいいかな……って😇

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?