こんにちは、寝てるだけで夏が終わったぴくしぃです。
少し前にイーロンくんが「1日に見れるツイート数制限したぜ!」って言った時から、MisskeyだのMastodonに船乗り換えるみたいな話題になったことがありましたが、その時に僕も自分でサーバーを立てたことがあります
現在の様子
逝きスギ
ということで故ほわむん鯖がどうやってイキスギてしまったのかを書いていこうかな(しくじり先生)
予兆
故ほわむん鯖はGoogle Cloud Platform(GCP)のE2 microというVMインスタンスで動かしていた
VMってのはクラウド上にあるPCみたいなもんだと思ってOK
スペックがだいぶ終わってる代わりに無料で使えるという感じのもので、メモリが1GBしかないのをSwap領域を割り振ってなんとかしてた
この方法でMisskeyの鯖立てやってる記事とかもあって「まあ1人だけだし大丈夫だろ」って感じで動かしてた
実際最初のころは全然大丈夫で、TLも普通に見れてた
異変
TLが読み込めなくなる
これは、低スペだし、VMがある場所オレゴンだしそんなもんかな~って感じで放置してた
接続が遅くなる
リクエストが溜まり過ぎてだんだんと遅くなっていくサーバー
その後鯖立て3日くらいしてそろそろデータベースのバックアップの設定して取った方がいいな~と思ってた
破壊
一週間経つか経たないかしたくらいから接続のリクエストが何も通らなくなる
おかしいな~って思ってGCPのVMの様子を見に行ったら、インターネットの上りがほぼ0になっていた
この時点でデータベースのバックアップを取れれば良かったんだけど、SSH出来ないので何も出来ず、
「まあ一週間くらい再起動してないしSwap溜まり過ぎておかしくなってんのかな~」
と思い再起動をかけた
そして終焉へ―――。
終焉
再起動後、VMにアクセスするためにSSHで接続しようとしたら、接続できない
シリアルコンソールを見たら、起動時の初期化の処理(cloud-init)に3000秒(50分)以上かかって失敗している
ということで、再起動したらブートが壊れたっぽい
復旧をこころみるも…
やらかしたと思いながら、復旧を試みる
Misskeyはデータベース(DB)さえ生きていればなんとかなるため、別のインスタンスに壊れた疑惑のVMのディスクをマウントしてDBをバックアップしようと試みた…
どこにあるの?
Misskeyのサーバーを立てる際にバッチスクリプトを用いて構築したんだけど、Misskey本体(ブラウザで見える部分)はDockerのコンテナで起動していて、DBはホスト(別ユーザー)で直接動く仕様となっていた。
これのせいで復旧できなかった疑惑もある
⚠以下の内容はDBをあまり触ったことないので、的外れなこと書いてるかもしれない
MisskeyのDBはPostgreSQLで、普通に起動出来るのであれば、pg_dumpall
ってコマンドでDBまるごとバックアップ出来るんだけど、今回そもそも起動できないので、DBそのものの実データを引っ張りだしてマウントさせる必要がある(と考えた)
なので作戦としては、
- 実データの場所を探し
cp -a
とかでコピー - 新しくPostgreSQLのコンテナを作り、コピーした実データをマウントさせて起動
pg_dumpall
でバックアップを取る
という流れでやろうと思った
で、①はできて、②をやろうとすると、PostgreSQLのコンテナがうまく起動しない
色々中身の設定ファイルpostgresql.conf
とか見てみると設定が変わっていて、その設定ファイルが色んな場所に分散していてそれらを全部マウントしても動かず…
コピーしてきた実データの権限をchmod
とかchown
で色々変えたがよくわからず…
ということで諦め(詳しい人居たら教えてください)
まとめ
というわけで、データベースのバックアップを取ろうと思った矢先に死んだわけですな。
バックアップは大事
そして冒頭にあったように、最近になってサーバーが死んだことを伝える410 Goneを返すようにしました
ということで鯖立てしくじり反省点
- バックアップは先に設定しておく
- メモリが足りないので定期的に再起動する
原因はよくわかってないけど、メモリ不足でおかしくなった説か攻撃された説かな~と思ってる
創造
このまま失敗で終わるのもアレなので反省を踏まえて、スペックがある程度あって、全部Dockerコンテナで構築して、DBも定期的にバックアップするようにした新生ほわむん鯖、ほわむんびよりを立てました
リリィのおっぱいがデカすぎる
ほわむんびよりサーバー構築編も気が向いたら書きます。