次世代の盆栽

Introduction

mstdn.maud.io Advent Calendar 2022 15日目です。
昨日は、やさいによる 客に物を買わせる悪魔の機械 でした。

当エントリでは、げね DC 港区リージョンの昨年から変わった所をせっせと書き綴ります。

Rack Environment

引き続きお世話になっております。
PC デスクの隣に置いてるので道が激狭になってしまうのが難点ですが、独房そもそも部屋が狭いのでしゃあないということで。

なお、健康で文化的な最低限度の生活には 3LDK が必要とされています。今俺が決めました。
仕事部屋、子供部屋 (子供とは俺のことです)、サーバルームの3部屋がほしいところ。

ラック内構成は、今比較してみて気づきましたが結構変わっています。

4U 右にあった黄ばみ散らかした AP (Cisco WAP150) はガタが来たので解雇。代わりに Ubiquiti U6 Pro を採用しました。
WiFi6 を吐くナウい仕様のヤツです。

白くて美しいですね。
設定が若干めんどくさいのが難点。

マシンの隙間についてですが、かっこよくないのでミチミチに詰めました。
ただし、取り付け位置を本来の Unit (赤線がそれ 写真参照) からズラす必要があるのでおすすめはしません。
本職が見たらキレると思う。僕も本職ですが。。。

サーバについては、去年から比較して2台増えて1台減りました。

  • IN: 下から2つ目の Lenovo ThinkCentre M70c Small
    • CPU: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz
    • RAM: 64GB
    • Storage: NVMe SSD 512GB
  • IN: 一番下の 4U 自作 NAS
    • 去年も設置していましたが、あの時点ではガワだけでした
    • CPU: AMD Ryzen 9 3900X 12-Core Processor
    • RAM: 64GB
    • Storage (OS): SATA SSD 512GB
    • Storage (Data): 52TB (4TB*6, 14TB*2, All SATA HDD)
      • Parity Disk の 14TB*2 は計算から除外
  • OUT: 古い NAS
    • スペックわすれた
    • 普通に動くから捨てるのもなあと思い、フォロワーにぶん投げました

去年の写真には Juniper EX2200 がありますが、うるせーし使わねーので捨てました。

ラック内構成はこんなところでしょうか。
なお、配線は終わったままです。

Network

変わっていません。

過労死寸前の何でも屋では、Disk I/O ドカ食い虫の InfluxDB をやめて Grafana Mimir に置き換えたり、ログをかき集めたいけどメモリドカ食い虫の ES を使いたくないので Loki を入れてみたり、色々試してる状態です。
その他、奴隷の皆さんですが、ようやく3台まで増えてくれたので Harvester HCI を入れて vSphere ごっこを始めてみたりしているところです。

Sensu Go + Mimir + Grafana

InfluxDB は、適当にブチ込んで起動でそのまま使えるので大変お手軽で良いのですが、歯がゆい思いをすることも多少あります。(クラスタ構成のサポートが商用のみ, ダウンサンプリングの設定がクッソだるい 等)
また、Disk IO をバカみたいに食います。NVMe SSD なら問題ないですが、そうでない場合は iowait の上昇が気になるところです。 (これについては設定で fsync 待機時間を伸ばすことである程度解消されます)
InfluxQL と Flux を両方書かされるのも大変キツイので、Grafana Mimir てのを使い始めました。(RPM は現状自作しかないですが、そのうち公式から提供されるはず)
Mimir は、Grafana Labs が Cortex から Fork したもので、Prometheus remote write で Sample を書き込み、参照する際は PromQL を使用します。
Prometheus のための長期ストレージといったところですが、僕は Sensu と一緒に使いたいので Handler を自作して Mimir に書き込めるようにしました。
書き込まれた Sample を S3 等のオブジェクトストレージに Upload する (で、参照時に見に行く) 機能があるので、Disk 容量も節約できます。最高。
おまけにクラスタ構成も組めるので、スケーリングが非常に楽です。
クラスタ間のデータ受け渡しには etcd が使われがちですが、Mimir では Gossip をバラ撒いてよしなにやっている模様。最高2。(ちなみに etcd, Consul も Optinal で使用できます)

これにより、すべてのコンポーネントをクラスタ内に押し込むロマン構成が可能になるワケですね。

Sensu + Mimir + Grafana は、考えうる監視基盤において正解の一つであると勝手に思っています。俺は Prometheus が好きではないので。
Grafana の DB は… 適当に用意しとけばよいでしょう。(Grafana でしか使わない DB をクラスタに押し込むのダルいな)
Jsonnet など使ってダッシュボードをコードに落とし込んでおけば管理が楽です。

余談ですが、Sensu 7 系からはデータストアとして etcd ではなく Postgres を使用するようになる (Issue) ので、構成案としては以下のようになるでしょうか。

さすがに RDB は分離したほうがよいか。。。

Loki

ES がマジで重いんで入れてみました。俺はログを保存したいだけなんや。
ES のように全文検索が可能なワケではないので、検索性能については妥協しないといけませんが、Log Storage として普通に使えるのでこっちでいいかなと思っています。RPM もあるし。
Loki も Cortex/Mimir 同様、各種オブジェクトストレージに Log を Upload できるので Disk 容量に優しいです。
クラスタ構成ももちろん組めます。
唯一大変なのは、LogQL がバカむずいこと。

Harvester HCI

vSphere ごっこがしたくて入れてみました。Kubernetes 上に HCI 環境を作るヤツです。
Harvester は SLE Micro にパックされているので、提供されている OS インストーラを使って、画面に従ってポチポチを3台分やればクラスタ完成 完。
Terraform Provider も公式提供されているので、構成管理も可能です。
なお、etcd を使うので、要求される Disk IO 性能は高めです。これはまあしゃあない。

ただ、なんも動かしてないのに CPU Reserve が既に 50% いきそうなのが腹たつ。
3台じゃ足りんかもしれないですね。

何より問題なのは、俺が Kubernetes をぜんぜんわかってない所にあるのですが。。。
それでも、ぶっちゃけ OpenStack よりは楽に扱えると思っています。

なんやこれ一体

SnapRAID & mergerfs

RAID はカス じゃんけんぽん。
冗談はさておき、Twitter のエロ画像を大量に保存できるでっけえストレージサーバを作る際に、単純に RAID で組んでるとメンテがだるいし Array 崩壊が脳裏を過ぎったりで肝が冷えるワケです。
なんも考えずに運用してえ〜! てことで SnapRAID でデータの Snapshot を定期的に取りつつ、mergerfs で Data Disk を全部まとめて扱う作戦でがんばるに至りました。
保存されたファイルは、mergerfs によって各 Disk に1ファイルずつバラ撒かれるだけなので、Disk を直接見に行ってもファイルへのアクセスが可能です。
少なくとも RAID Array 崩壊によるデータ全ロスみたいなシナリオは回避できるので安心感が違います。
あと容量の拡張がクソ楽です。(RAID-Z よりかは)
足りなくなったら適当に Disk 交換して Snapshot リストアで OK ということで。
今の容量は 4TB * 6 + 14TB * 2 で 52TB あります。
このへんは過去記事で適当に解説しているので、興味あれば。
https://blog.jadiunr.net/2022/01/14/my-strongest-storage-server-2022/
https://blog.jadiunr.net/2022/01/03/snapraid-and-mergerfs/

Conclusion

以上、道楽でした。
何でも屋に仕事が集中しているのはさすがになんとかしたいので、Harvester HCI を活用していきたいところ。
明日は MATTENN さんです。