ejo090の日記

みなさんの数分を無駄にするように毎日がんばります。コメントあると中の人めっちゃ喜びます。

Twitterをやめたことについての記事はここです。よしなに。

某所の色々な某を終わらせたやつ & Worldle & Wordle challenging & 市区町村 in 2022/12/25

おはようございます.

この記事は だらだらやる Advent Calendar 2022 の 25 日目,最終日の記事です.
本来は最終日じゃないところでやるはず ( 12 月中旬にやると言っていた ) だったんですが,やらないとやらないとと思い続けてずるずる年末付近になってしまいました.
タイトルにしている「某所の色々な某」とは, Mastodon の DB を 9.6 から 14 にアップグレードしてついでに本体のバージョンも 3.5.5 にしたことについてです.

昨日の記事は id:chy-na2 さんの SEと全く関係ない職種で独立した話 - 便所 でした.
ひさしぶりにお目にかかりましたね.(というか私がツイの世界から消えてるだけなんですが…)

奇遇で,私もほぼ独立しているようなものでやっております.仲間ですね.
大きく違うところと言えば,私は就職をせずにそっちに行ったくらいでしょうか.本当は就職したかったんですが,就活とやらが苦痛すぎてほとんどせずにそのままズルズルと今になってございます.
それ以外はまあ生活なども似たようなものです.起きてボーッとして仕事してげむーしてねるをやっており,タイムゾーンがグチャグチャです.
とてもわかるポイントとしては,

最大のメリットはコアタイムがないことですね。

ここが本当にそうです.コアタイムがなければいいんです.
まあ色々書きたいことはありますがここで書くことでもないでしょうしこのあたりで.

昨日の記事はもう一つあるようで, id:rou10 さんの だらだらやる Advent Calendar 2022 14日目 ~ついっちしていきたい~ - クリスマスだぞ!鮭を焼け! です.
昨日は 12 月 24 日のはずですが,おかしいですね.私のタイムゾーンがズレているなどがかわいく見えます.
配信をしろとおたくにテレパシーを送っていたら受けとっていただけたようで,環境を整えつつあるようです.
是非とも全人類がプレイしていると言われる[要出典],𝘾𝙞𝙫𝙞𝙡𝙞𝙯𝙖𝙩𝙞𝙤𝙣 𝙑𝙄 をプレイしましょう.
作家[要出典]は 𝘾𝙞𝙫𝙞𝙡𝙞𝙯𝙖𝙩𝙞𝙤𝙣 𝙑𝙄 をプレイして原稿を落とす[要出典]というのが一般的[要出典]らしいですよ.

閑話及第.

某所の某とは Mastodon の DB を指します.
2017 年より mstdn.nere9.help として稼動しはじめてから今まで PostgreSQL 9.6 で動いていました.
先日 ( ちょうど 2 ヶ月前 ),GCP の Cloud SQL で動いていた PostgreSQL 9.6 から自己管理の PostgreSQL 9.6 へ移行しました.
特に問題もなく移行完了しましたが,ここで問題が一つ.

PostgreSQL の EOL は 5 年です.9.6 リリースはいつか?→ 2016 年
サポート切れとるやん!!!

まあそこは分かってるのでよし.
それに伴い Mastodon においての DB も 9.6 から 14 へのアップグレードがなされました.
[Docker-Compose] [Breaking] Postgres 9.6 is EOL (11th Nov 2021) - Migrate to 14 Stable by shleeable · Pull Request #16947 · mastodon/mastodon · GitHub

というわけで,どちらかというとバージョンを上げたいので DB のアップグレードをしなければならないというわけです.

そのため,この記事はそれに伴うメモとなります.

~$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
14  main    5434 online postgres /var/lib/postgresql/14/main  /var/log/postgresql/postgresql-14-main.log
  • pg_lsclusters のようす
    • postgresを適当にインスコしたら14が先に入ってしまっており,9.6を別で入れたなどの事情がある
    • アップデート先のバージョンが入っていない場合,入れてから作業をする

postgres にはお便利なコマンドがいろいろあり,そのうちの一つ,pg_lsclusters で今動いてるクラスタのバージョンや待ち受けポートや data directory がわかります.えらい.

pg_dump をする

0100(JST)作業開始です.
とりあえず dump を取りましょう.9.6 は 5432 ポートで動いていることがわかっているので,そこを dump していきます. データベース名やユーザー名は環境により適宜変更してください.
pg_dump -Fc -v -h localhost -p 5432 -d postgres -U postgres > 20221225_backup.dump

待ってる間暇なのでほったらかしてブラウジングをしたりこの記事を書いていたら(なので枕が長い), 0154 には終わっていました.  
多分もっと早く終わっているはずです.  

動いてるやつを止める

postgres にはお便利なコマンドがいろい(中略)の一つ, pg_ctlcluster <version> <cluster> <action> で止めたり起こしたりができます.
とりあえず 9.6 も 14 も止めます.
sudo pg_ctlcluster 9.6 main stop とか sudo pg_ctlcluster 14 main stop しましょう.
root じゃないとダメな気がするので sudo をつけます.

pg_upgrade をする

postgres にはお便利n(中略)つ,pg_upgrade でかんたんアップグレードが可能です.
とりあえず公式ドキュメントを見ながら… ( pg_upgrade )

環境としては,

 old data: /var/lib/postgresql/9.6/main
 new data: /var/lib/postgresql/14/main
 old bin: /usr/lib/postgresql/9.6/bin
 new bin: /usr/lib/postgresql/14/bin

なので…

~$ /usr/lib/postgresql/14/bin/pg_upgrade -U postgres \
-d /var/lib/postgresql/9.6/main \
-D /var/lib/postgresql/14/main \
-b /usr/lib/postgresql/9.6/bin \
-B /usr/lib/postgresql/14/bin

こうかな…と思い走らせると.

connection to server on socket "/var/lib/postgresql/.s.PGSQL.50432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

🤔🤔🤔🤔🤔

なんもわからん.
困ったときの Google 先生なのでググったら,postgresql.conf も設定しなきゃいけないらしい.

~$ /usr/lib/postgresql/14/bin/pg_upgrade -U postgres \
-d /var/lib/postgresql/9.6/main \
-D /var/lib/postgresql/14/main \
-b /usr/lib/postgresql/9.6/bin \
-B /usr/lib/postgresql/14/bin \
-o  '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \
-O '-c config_file=/etc/postgresql/14/main/postgresql.conf'   

ということでこうなる.
紆余曲折で 0300 までかかってしまった.
とりあえず走らせて放置…

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/14/bin/vacuumdb -U postgres --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh

全部 ok が出て,無事データベースのアップグレードが完了です.
ついでに /usr/lib/postgresql/14/bin/vacuumdb -U postgres --all --analyze-in-stages も走らせておきます.そんな時間かからなかった気がします.

~$ /usr/lib/postgresql/14/bin/vacuumdb -U postgres -p 5434 --all --analyze-in-stages
vacuumdb: processing database "postgres": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "template1": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "postgres": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "template1": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "postgres": Generating default (full) optimizer statistics
vacuumdb: processing database "template1": Generating default (full) optimizer statistics

こんなかんじ.
とりあえず確認だけでもしておきましょう.

~$ psql -p 5434 -U postgres
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.

いいねえ.
テーブルもあるか見ておきましょう.

postgres=# \d
----------------------------

                                 List of relations
 Schema |                   Name                    |       Type        |  Owner
--------+-------------------------------------------+-------------------+----------
 public | account_aliases                           | table             | postgres
 public | account_aliases_id_seq                    | sequence          | postgres
 public | account_conversations                     | table             | postgres
 public | account_conversations_id_seq              | sequence          | postgres
 public | account_deletion_requests                 | table             | postgres
 public | account_deletion_requests_id_seq          | sequence          | postgres
 public | account_domain_blocks                     | table             | postgres
 public | account_domain_blocks_id_seq              | sequence          | postgres
 public | account_identity_proofs                   | table             | postgres
 public | account_identity_proofs_id_seq            | sequence          | postgres
 public | account_migrations                        | table             | postgres
 public | account_migrations_id_seq                 | sequence          | postgres
 public | account_moderation_notes                  | table             | postgres
 public | account_moderation_notes_id_seq           | sequence          | postgres
 public | account_notes                             | table             | postgres
 public | account_notes_id_seq                      | sequence          | postgres
 public | account_pins                              | table             | postgres
 public | account_pins_id_seq                       | sequence          | postgres
 public | account_stats                             | table             | postgres
 public | account_stats_id_seq                      | sequence          | postgres
 public | account_statuses_cleanup_policies         | table             | postgres
 public | account_statuses_cleanup_policies_id_seq  | sequence          | postgres
 public | account_summaries                         | materialized view | postgres
 public | account_warning_presets                   | table             | postgres
 public | account_warning_presets_id_seq            | sequence          | postgres
(以下省略)

オオーあるある. 問題なさそうですね.多分.

このとき,一旦 Postgres 14 を落としたら上がらなくなってなんでや,となったんですが 𝓣𝓱𝓮 𝓒𝓸𝓶𝓹𝓾𝓽𝓮𝓻 𝓢𝓬𝓲𝓮𝓷𝓬𝓮 ( 𝙍𝙀𝘽𝙊𝙊𝙏 ) したら直りました.

そういえばクラスター上げ下げしようとしたときに上で書いた pg_ctlcluster を使ったらそれ Systemd じゃねえぞ systemctl を使えと下記のように怒られました.なるほどね.
みなさんは systemctl を使おうね.

~$ pg_ctlcluster 14 main start
Warning: the cluster will not be running as a systemd service. Consider using systemctl:
  sudo systemctl start postgresql@14-main

Mastodon のアップデート

v3.5.0 をマージして延々とコンフリクト修正を2時間くらいやることになってしまった.
本当にこれでいいんだっけ?っつっていろいろやり,0600になってしまいました.
ねれきゅは基本的に Docker で動いているので,docker-compose build をしてボーっと待ちます. 0618に終了.

データベースの整合性チェック

そういえば止めることがなかったのでビルドついでにやっておきます.
詳しくは Database index corruption - Mastodon documentation に書かれている通りです.
0600から 30 分くらいで 2 つ終わった気がします.

DB のマイグレーション

Release v3.5.0 · mastodon/mastodon · GitHub
ここに書いてある通りのことをします.そこそこ時間がかかるかもしれない.
もうめんどくさくなって時間のメモをしていません.
マイグレーションだけで 30 分くらいやってる気がしてきた してないかもしれない

とりあえず v3.5.0 で起動してみる

動いたので v3.5.5 にしよう.
0710くらい.

v3.5.5 にする

上でやってるのとそんなに変わりませんので割愛.
マージしたりいろいろして0730にビルド開始.

非常に滑稽な様子 ちなみにうごかなかった

diff の仕方をミスっていて動かんコードを push していました.首から札下げるのでゆるして.
.git/config に meld を設定した上で git difftool -d vhoge をしろ,未来のねこ,わかったか.

あと眠くてビルド終わってるのにボーッとしてたりする.人々,すまない.
マージして再ビルドしているが,--pull をしてしまい,さらに虚無の時間を過ごしている.

動きました!!!!!!


無事動きました.0844です.
ですが問題が発覚しました.


画像が上がらんらしいです.

エラーメッセージ見て,Docker の中から名前解決できてなさそうな感じのエラーで,なんでや!設定ファイル変なとこあんのか! nginx の設定ファイルが悪いんか!など様々なことを考えていた.


そしてなにかを発見したようです.


しかも分かったと!すごい


は?

そんなことある?

そうはならんやろ

というわけで,止めるまでは動いていたはずで特になにもしてないはず(再起動くらいはした)なのに何故か名前解決ができなくなっており,ズルズルとメンテの終了時間が伸びてしまいました.

Q . 本来のメンテ時間は何時まででしたっけ?
A .

Q . 何故こんなに伸びたんですか? A . DB アップデートまでは詰まりはありもよかったんですが,眠くなってきて適当にやってたらボーッとしてきて,最終的にクソ単純なのに無限に悩んでおしめぇになりました.

というわけで, 特に大したこともやってないのに 0100 - 1050 の 9 時間 50 分にも及ぶメンテナンスになりました.
うち DB のアップデートにかけたのは 2 時間半,Mastodon のアップデートに 5 時間[何故?],上げてからまともになるまでが 2 時間と本来の目的であるところの DB が一番すんなり行っておりますね.
上げてからまともになるまでが一番しょうもないところでまあアップデート自体はいいとして 2 時間は短くなっていたはずなのに….
それはそれとして,チマチマとアップデートはすべきですね.

総括

というわけで色々書き連ねましたが,無事なんとかアップデートできました.
ひさしぶりにやったんで完全に忘れているアレソレがありましたね.
はじめは書くぞ~という気持ちでやっていたんですが,段々ねむくなってきてもう書くのがなげやりになってしまいました.すみません.

ねれきゅユーザや連合している Fediverse のみなさん,今後ともよろしくお願いします.

最後にいつものを.

Worldle

#Worldle #338 2/6 (100%)
🟩🟩🟩🟩🟨↙️
🟩🟩🟩🟩🟩🎉
⭐⭐
https://worldle.teuteuf.fr

  • わかった

Wordle

Wordle 554 4/6

🟩🟨🟨⬜⬜
🟩🟨⬜⬜🟨
🟨🟨🟨⬜⬜
🟩🟩🟩🟩🟩

  • わかった

市区町村

#市区町村 #ShiKuChoSon No.267 X/6 (98%)
🟩🟩🟩⬜⬜⬅️
🟩🟩🟩🟩🟨↙️
🟩🟩🟩🟩🟨↖️
🟩🟩🟩🟩🟨↙️
🟩🟩🟩🟩🟨⬇️
🟩🟩🟩🟩🟨↙️
https://shikuchoson.jp

  • わからなかった

こんなもので.

じゃぁ!