(タイトルは嘘)LXDコンテナのストレージファイルシステムがちょいちょい壊れるッポイ
LXDコンテナで GitLab を動かしているが、ちょいちょいストレージ応答が固まってしまう。
本日も GitLab の sidekick、redis が重くなってしまい応答が無くなるという事が起きた。これはちょいちょい週1くらいの頻度で起きている問題で、毎日のバックアップに起因していると思われるのだが、どうにか回避出来ないものか...。
- 問題箇所かもしれないところ(上から怪しい順)
- sidekiq
- redis
- puma
GitLab を動かしている環境について
GitLab の構成については公式ドキュメントのチャートがある。全然ワカランくらいに多くのミドルウェアで構成されている。で、宅サバでは GitLab Omnibus のEE版で構築している。
宅サバ環境は、こちら図のようにLXDコンテナにGitLab環境をインストールしている。
2台の Ubuntu VM 上で LXDコンテナ環境を用意しているが、これらはクラスタ化はしておらず独立させていて、スクリプトでイメージバックアップは取っているという状態。
事象の発生状況
ある時、気付くとGitLabのウェブUIの応答が無くなっていて、それに気付いてGitLabマシンにSSHするとSSHに対する応答も無いという状態になる。
LXDホスト上で top コマンドをみた時の状況
- ディスクIOでのロックがかかっているように見える...
疑ったこと(順に...
問題の切り分けとして試したこと
Windows の「高速シャットダウン」の無効化
バックアップスクリプトの停止
ストレージイメージを複数にしてコンテナを移動
- 疑義ポイント
一時的な解決
現状: 何の役にも立たない結論(過去時点)
- バックアップスクリプトの停止
- 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分も経っていないので暫く様子見しましょう。