環境構築は前の記事
なにもしてない(嘘)のに壊れた(´;ω;`)ブワッ
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接続)
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 -ndav
かfind
なりで漏れがないか確認した方がいいかも。
$ find /mnt/cephfs /mnt/rbd -type f -printf "%s %P\n" | sort | uniq -u
本番環境へ移行
ここまでお試しでNotePCで構築・運用してきました。いざ本番環境に移行です。
本番用機材
6TBのHDD x 3台
楽天ビック:40,295円
HDDケース
Amazon:10488円
ホストPC
Amazon:23,800円
合計:74583円
ポイントが結構残ってたので、わりと余裕をもって10万円を切りました☺️
Cephのホスト変更
環境移行時の注意ですがホスト名とipは移行前の環境と同じでなければなりません。
この辺りがRAIDと違ってメンドクサイところですね。クラスターがホスト名やipをガッツリ固定前提になっているので、ipやホスト名を変えての環境移行はちょっと難しいです。
ホスト名とipが同じでさえあればバックアップと同じ手順でバックアップのtar.gzの展開先を新しい環境の/var/snap/microcephにすればそれでお引っ越し完了です。
まずはなんとかしてバックアップを新しいホストに持って来ます。
後はリストアと同じ手順です。
- Microcephをインストールしてcluster bootsrapまでする
$ sudo snap install microceph $ sudo snap refresh --hold microceph $ sudo microceph cluster bootstrap
- 一旦MicroCephを停止して、/var/snap/microcephを削除して置き換える
$ sudo snap stop --disable microceph $ sudo rm -r /var/snap/microceph $ sudo tar -xzvf microceph-YYYYMMDD.tar.gz -C /
- ホストを再起動してから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)
有線LANになったのでさらに速くなりました☺️
夏休みの自由研究終了
ホスト名やipが同じでないといけないというのはちょっと辛いですね。
調べてみたらorchやらceph-volumeやらceph-monやらを使って環境移行できるようですが、基本的には それ(ip)を かえるなんて とんでもない! ってことみたいです。
MicroCephの範囲を超えてくるので(orchは非サポート)、ip・ホスト名変更については諦める方向にします。
ip・ホスト名を変えたいときは新しいip・ホストのストレージを作って、普通にデータコピーしろってことでしょう。
個人には辛い😢
そうはいってもホームルーターを変えただけでネットワークグループごとまるっとかわるのが個人環境。
余計な労力をかけないことを考えたらRAID10の方がいいかな……って😇