概要
Mastodonをv3.0.x系から一気にv3.1.xに上げたらgem周りが原因でsidekiqが死んでコケた
症状
Mastodonの連合TLがアップデートしたタイミングから一切更新されなくなった
トラブルシューティング
gem編
原因解明
まず、Sidekiqを覗きに行く
待機状態がやたら多く、その割にはデッドは0だし再試行数も極端に少ない。
Sidekiqが動いていないのが原因臭い
systemctlからログを覗く
当方Ubuntu 16.04環境でMastodonが稼働している為、
sudo systemctl status mastodon-sidekiq
でmastodonのsidekiqの直近の状態とログが覗ける。CentOSの場合はコマンドが異なるのであしからず。
すぐにログを取れなかったので載せれないが、gemの一部がビルドできてねえぞみたいなエラーが見えた。
それもそのはず。確かにアップデート後のbundle installをしていたらかなりの数のgemが Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version
とエラーを吐いていた。
参考: https://qiita.com/MIRAI1221/items/cfae7e7eb3ddba01e999
解決方法
先の章で参考にしたサイトでは
gem pristine gemfile名 --version
この方法でかいけつできるとのことだったが、相当数が同様のエラーが出ていたのでこの参考記事の方法ではとても解消できない。そこで、 gem pristine
のオプションを探ったところ、 --all
がちゃんとあるじゃないか。
念の為、mastodon/live配下(Mastodonのディレクトリ配下、多分最近入れた人はデフォルトだとMastodonって名前でフォルダ作ってるんじゃないかな)にある vendor/bundle
を全部消してgemを焼き払う。
参考: https://qiita.com/Yinaura/items/1a96fc77c81a2d6a4d95
rm -rf vendor/bundle
また、野生の感で、 gemコマンド側からもupdateしたほうがいいかなという気がしたので、やった。 gem update --system
を叩いたが、これはあくまでシステム側の(nodeでいうと yarn global update
とか npm update -g
みたいなもの)をアップデートしただけなので多分意味はない。
んで、さっきのコマンドを叩く。
gem pristine --all
「Restored」とつくgemが大量に出てくるあたり、お察しである。
これが終わり次第、いつもどおりbundle installすればハイ完成。
bundle install
ターンエンドだ。Mastodonの再起動を掛ける。
動いてくれたみたい。めでたしめでた・・・よく見たら「Stopped mastodon-sidekiq」とか出てない?止まってる?
sidekiq編
原因解明
小手先の対処を試してみる
sidekiqのGUI管理画面を覗いてみると案の定動いてなさそう。
エラーメッセージでググりつつ、githubのrailsアプリのOSSのそれっぽいissueを見ながらいろいろ試してみたら、
systemctl daemon-reload
systemctl stop mastodon-sidekiq
systemctl start mastodon-sidekiq
でも駄目だった。
systemctlからログを覗く
journalctl -r -u mastodon-sidekiq
でログをよく見てみると・・・うん?
「 You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater 」とかいうめちゃくちゃ嫌な予感のするログを発見。しかもその直後にエラートレースしてコケてるじゃない。
調べてみれば、今のredisの最新stableはv6.0.4。公式リポジトリ古すぎ・・・でもwgetするのは嫌だしPPAは無いかな・・・
解決方法
Ubuntu公式リポジトリのredis: https://launchpad.net/ubuntu/+source/redi
Ubuntuのバージョン上がるとインストール可能なredisも上がるのね・・・
参考: https://weblabo.oscasierra.net/redis-ubuntu1604-install-apt/
あったけど、非公式で怖いなこれ・・・・やだなぁ。でも手間に背は変えられないので仕方ない。aptのレポジトリに追加します。
add-apt-repository ppa:chris-lea/redis-server
apt update
apt upgrade
redisは晴れて6.0.7まで上がりました。
めんどくさいので一旦reboot(おい)
今度はちゃんと生き生きとしたログ(?)が流れているようですし、sidekiqもちょっとずつキューが消化されているようなので、これにてトラブルシューティング完了。
結論
- v3.1.3からredisの必須バージョンが3以上から4以上になるからUbuntu16.04以下を使用して鯖立ててる人は要注意
-
Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version
と見たら、わざわざ1個1個gem pristine hoge
しなくてもgem pristine --all
で一括操作できるよ - readmeとリリースノートはちゃんと見ようね
Try
説明書読まない癖で、もしかしてリリース情報にちゃんと手順書いてたかな?と思ったら、ありました
tootsuite/mastodon v3.1.3: https://github.com/tootsuite/mastodon/releases/tag/v3.1.3
The minimum supported Redis version has changed from 3 to 4
これ読んでたら少なくともredisでつまずくことはなかったですね。
ただ、gemに関しては何も書かれていなかったので、そんなものなのかな・・やだなぁ、こういうnodeみたいなところ・・・
これを書いた理由
ここ最近jp鯖が色んな意味で不安定なせいか、アーリーマジョリティ層によるMastodon移民が一段落したからなのか、露骨にMastodonに関する知見記事が減ってる気がするので、雑にトラブルシューティングしたときのログを書き殴ってみた
P.S.
学生エンジニア目指したい(新卒採用に携わるとよく見かけるまだ手を付けれてない学生君たち)にはぜひお一人様インスタンスを立てて、コスト意識とDevOpsとインフラ知識を身に着けてほしいと合うたびに言ってるんだけど、もっと心に響く説得方法が無いかな・・・