(タイトルは嘘)LXDコンテナのストレージファイルシステムがちょいちょい壊れるッポイ

LXDコンテナで GitLab を動かしているが、ちょいちょいストレージ応答が固まってしまう。

本日も GitLab の sidekick、redis が重くなってしまい応答が無くなるという事が起きた。これはちょいちょい週1くらいの頻度で起きている問題で、毎日のバックアップに起因していると思われるのだが、どうにか回避出来ないものか...。

  • 問題箇所かもしれないところ(上から怪しい順)
    • sidekiq
    • redis
    • puma

GitLab を動かしている環境について

GitLab の構成については公式ドキュメントのチャートがある。全然ワカランくらいに多くのミドルウェアで構成されている。で、宅サバでは GitLab Omnibus のEE版で構築している。

docs.gitlab.com

宅サバ環境は、こちら図のようにLXDコンテナにGitLab環境をインストールしている。

2台の Ubuntu VM 上で LXDコンテナ環境を用意しているが、これらはクラスタ化はしておらず独立させていて、スクリプトでイメージバックアップは取っているという状態。

f:id:nginoza:20201230130052j:plain

事象の発生状況

ある時、気付くとGitLabのウェブUIの応答が無くなっていて、それに気付いてGitLabマシンにSSHするとSSHに対する応答も無いという状態になる。

  • LXDホスト上で top コマンドをみた時の状況

    • ディスクIOでのロックがかかっているように見える...
    • f:id:nginoza:20201230130756p:plain
  • 疑ったこと(順に...

    1. GitLab omnibus 内のバグ
      • でも、これ調べるの面倒くさ過ぎだろ...
    2. コンテナバックアップ時の失敗
      • とりあえずバックアップ止めれば発生しないか確かめられる。
    3. btrfsストレージのファイルシステム破損
      • GitLab専用のコンテナストレージを分けて作れば他のコンテナの影響を切り分けられる。
    4. Windows 10 が勝手に再起動している問題
      • 物理マシンだと初期設定のシャットダウンは実はスリープしてるだけだったので、仮想マシンのイメージファイルが破損する事があった。無効化することで解消している。

問題の切り分けとして試したこと

Windows の「高速シャットダウン」の無効化

バックアップスクリプトの停止

ストレージイメージを複数にしてコンテナを移動

  • 疑義ポイント
    • btrfs のファイルシステム破損というメッセージも過去に出たことがあったので、コンテナの競合か何かでファイルシステムが破損している事を疑った。
    • LXDホストのローカルストレージ上にbtrfs 等のイメージファイルを持たせて、コンテナ用のストレージとして使用する。

一時的な解決

現状: 何の役にも立たない結論(過去時点)

  • バックアップスクリプトの停止
    • lxc コマンドで stop && copy && start をしているところのどこかで転けてしまっていそうである。
    • GitLabコンテナが完全に停止していない状態で再startしているとかなのかなぁ?と妄想している。
    • バックアップ処理を止めると、GitLabコンテナが固まることは起きていないように見える...。

現状その2: 何の役にも立たない結論(現時点)

  • GitLab omnibus のアップグレード
    • バックアップを停止してから暫く経って、ウェブUIを操作中にGitLabが固まる事が起きている。
    • 以前と異なるのは、我慢して待っていれば自然復旧するという点にある。
      • 固まった時の簡易な様子としては CPU Load Ave. 30以上、io wait 96% といういつもの状態になる。
      • 15分ほど放置すると、CPU Load Ave. は通常通りの 1.0 以下に下がってくる。こうなるとウェブUIの操作もスムーズに出来るように戻ってしまう。
    • この問題も深追いすると面倒そうなので、GitLabのアップデートが降ってくるまで放置することにした。
      • GitLab 13.6.2(?)だったかな、では再現せずに安定している。

その後、現在について Ver-14.9.2-ee

やはり、13.6.2 以降でもストレージを嘗め回すようにディスクスループット(帯域)を使い切るようにリードIOが発生する。何が原因なのか分からないが別に困ってないしぃ、的に放置していた。

最近は(14.x以降)、Gitlabにブラウザアクセスする度にリードフラッド(read flood)状態が発生してしまって Gitlab を使う気が起きない状態になっていた。面倒くさいので放置していたが、ふと検索してみたところ Prometheus を無効にする というページを見つけたので試してみた。

$ sudo rcsdiff -ub /etc/gitlab/gitlab.rb
===================================================================
RCS file: /etc/gitlab/RCS/gitlab.rb,v
retrieving revision 1.1
diff -ub -r1.1 /etc/gitlab/gitlab.rb
--- /etc/gitlab/gitlab.rb       2022/04/05 07:20:09     1.1
+++ /etc/gitlab/gitlab.rb       2022/04/05 07:21:21
@@ -1647,7 +1647,7 @@
 # gitlab_exporter['probe_sidekiq'] = true

 # To completely disable prometheus, and all of it's exporters, set to false
-# prometheus_monitoring['enable'] = true
+prometheus_monitoring['enable'] = false

 #######################

確かに、自分の環境ではわざわざ Prometheus で監視してても無意味なので要らなかったな...。未だ、30分も経っていないので暫く様子見しましょう。