リストア、PSQLアップデートにネットワークストレージを(一時的に)利用する

現在、VPSセットアップで大規模なDiscourseインストールを実行しており、基本的に問題なく動作しています。CPU/メモリのパフォーマンスに関しては余裕がありますが、ディスク容量が少し問題になっています。日常業務では問題ないのですが、例えばPostgresのアップグレード(13->15へのアップグレードが未完了)を行う際に、容量が不足しており、簡単に拡張できません。

Postgresのアップデートには他の方法があることも承知していますが、これは一般的な質問としてお考えください。

Hetznerで実行しており、一時的に使用できるネットワークストレージが簡単に利用できます。

現在、テストサーバーで一時的な方法で動作させることを試しています。まずはライブサイトからバックアップを復元し、後でPostgresのアップグレードをテストします。しかし、今のところ成功していません。

すでにシンボリックリンクを試しましたが、うまくいかないことに気づき、どこかで推奨されていない方法であることも読みました。また、/shared共有を/var/discourse/shared/standaloneから/mnt/ext-storage/standaloneに移動し、ファイルをそこに移動しようとしましたが、残念ながら問題が発生しました。ビルドさえ完了できません。

このような場合に有効な方法はありますか?ドライブのパフォーマンスがローカルドライブよりも大幅に劣ることは承知していますが、フォーラムをその上で実行する予定はありません。特定のシナリオで快適に使用できる方法があればと思っています。

新しいVMを起動して移行するのが、アップグレードの最も簡単な方法です。データベースのアップグレードが不要になり、VMに新しいOSが導入されます。これは、いずれにしても必要になる可能性が高いです。

rsyncを使用してDiscourseサイトを別のVPSに移動するに従ってください。データベースはコピーせず、アップロード、Let’s Encrypt、証明書はコピーしてください。

バックアップがS3にある場合、古いものをフリーズし、バックアップを作成して、新しいマシンにバックアップを復元するのは非常に簡単です。

Hetznerに、異なるサーバーに割り当て可能な永続IPがある場合、DNSを変更する必要さえありません。

新しいサーバーを構築できることを知っておくことは、何らかの理由で必要になった場合に構築できることを意味します。これは練習に最適な機会です。

実際にはこれは選択肢ではありません。いずれにしても、日常的なニーズのために容量が不足しているわけではありません。また、現在600GBのドライブスペースを使用しており、その約50%を使用しています。少なくともHetznerには、それより大きなオプションはありません。

そのため、外部ドライブについて具体的に質問していました。

念のため ./launcher cleanup app を実行しましたか? それで、インプレースアップグレードを実行するのに十分なスペースが解放されませんでしたか?

「いいね!」 1

それは再構築にとって重要ですか?簡単な再起動なら理解できますが、再構築にはどうですか?

私はより大きいドライブに切り替えることを提案しているわけではなく、そのままのサーバーを新しく買うことを提案しているだけです。Discourseをインストールし、あなたのデータベースを復元してください。

それは非常に良い質問です。

はい。すべての再構築は新しいコンテナを作成し、それぞれがスペースを消費します。これを一度も行ったことがない場合、数十GBの空き容量ができている可能性があります。

「いいね!」 1

データベースのアップグレードには、利用可能なスペースをすべて確保する必要があります。したがって、はい。重要だと言えます。

私たちのアップデートガイドには、あなたの正確な使用例に関するガイドが含まれています

この選択肢は、あなたと同じ状況にある人々のために追加されました。ただし、試す前に必ずバックアップをオフサイトに保存してください!

「いいね!」 2

VM 上であれば、新しい VM に移行する方がはるかに簡単であり、多くのメリットがあります。いくつかご紹介します。

  • リスクゼロ–何か問題が発生しても、古いサーバーはそのまま残ります
  • ダウンタイムゼロ(古いサーバーは読み取り専用になります)
  • おそらく必要となる OS のアップグレードができます
  • 万が一の事態が発生した場合に、新しいサーバーを起動する方法を知っていることを確認できます
  • 再インデックスとバキュームを行う必要がありません
「いいね!」 1

皆さん、アドバイスありがとうございます。

ありがとうございます。それは私が認識しているもう一つの選択肢です。それでも指摘してくれて感謝します。

それは疑っていません。それでも、必要に応じてメンテナンスタスクのために追加のストレージを追加するという選択肢を探求したかったです。

「いいね!」 2

アップロードや /var/discourse/shared/web_only などをネットワークストレージに置いておくと便利です。シンボリックリンクを使用するのではなく、yml ファイルを編集してネットワークストレージを指すようにする必要があります(シンボリックリンクは、コンテナがシンボリックリンクが指す場所にアクセスできないため機能しません)。

その後、新しい VM に移行する場合でも、コピーするのではなく、そのネットワークストレージを再マウントするだけで済みます。

データベースには、遅いためネットワークストレージはお勧めしません。

「いいね!」 1

使用状況を詳しく分析することをお勧めします。アップグレード中にデータベース部分が3倍のスペースを必要とするだけで、実際のデータベースサイズはそれほど大きくない可能性があります。

ダウンロードを含むバックアップとダウンロードを含まないバックアップの相対的なサイズを比較して確認できます。

または、コマンドラインを使用します。これは私の比較的小さなフォーラムからの出力です。

root@rc-debian-hel:~# free -m
               total        used        free      shared  buff/cache   available
Mem:            3813        1631         267         492        1915        1504
Swap:           4095         730        3365
root@rc-debian-hel:~# swapon
NAME                       TYPE  SIZE   USED PRIO
/var/local/swap/swapfile.1 file 1024M 730.2M   -2
/var/local/swap/swapfile.3 file 1024M 136K   -3
/var/local/swap/swapfile.0 file 1024M     0B   -4
/var/local/swap/swapfile.2 file 1024M     0B   -5
root@rc-debian-hel:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           382M  1.2M  381M   1% /run
/dev/sda1        38G   22G   14G  62% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda15      253M  6.3M  246M   3% /boot/efi
overlay          38G   22G   14G  62% /var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766/merged
tmpfs           382M     0  382M   0% /run/user/0

詳しく見てみましょう:

root@rc-debian-hel:~# du -kx / | sort -n | tail -33
767000	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local/share/pnpm
767004	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local/share
767020	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local
795804	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse
795808	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home
833836	/var/discourse/shared/standalone/postgres_data
884648	/var/discourse/shared/standalone/uploads/default/original
978000	/usr/lib/modules
991644	/var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766/diff
991664	/var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766
1025164	/var/discourse/shared/standalone/uploads/default/optimized
1146528	/usr/lib/firmware
1350496	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff
1350512	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554
1909816	/var/discourse/shared/standalone/uploads/default
1919380	/var/discourse/shared/standalone/uploads
2471968	/usr/lib
2506940	/var/log/journal/82e4cf9bff9748d090b41e6d336353eb
2515140	/var/log/journal
2592200	/var/log
3029428	/usr
3839148	/var/discourse/shared/standalone/backups/default
3839152	/var/discourse/shared/standalone/backups
4194324	/var/local/swap
4194328	/var/local
5171844	/var/lib/docker/overlay2
5217052	/var/lib/docker
5455612	/var/lib
6682972	/var/discourse/shared/standalone
6682976	/var/discourse/shared
6685716	/var/discourse
19041368	/var
23037264	/
root@rc-debian-hel:~# du -kx /var/discourse/shared/ | sort -n | tail -33
42312	/var/discourse/shared/standalone/uploads/default/original/2X/f
42448	/var/discourse/shared/standalone/uploads/default/original/2X/1
42548	/var/discourse/shared/standalone/uploads/default/original/2X/6
43380	/var/discourse/shared/standalone/uploads/default/optimized/2X/2
44148	/var/discourse/shared/standalone/uploads/default/optimized/2X/5
44340	/var/discourse/shared/standalone/uploads/default/optimized/2X/1
45240	/var/discourse/shared/standalone/uploads/default/optimized/2X/e
46648	/var/discourse/shared/standalone/uploads/default/optimized/2X/c
49516	/var/discourse/shared/standalone/uploads/default/optimized/2X/8
49772	/var/discourse/shared/standalone/uploads/default/optimized/2X/9
49932	/var/discourse/shared/standalone/log/var-log/nginx
50788	/var/discourse/shared/standalone/uploads/default/optimized/2X/0
55428	/var/discourse/shared/standalone/uploads/default/optimized/2X/d
55844	/var/discourse/shared/standalone/uploads/default/optimized/2X/f
57548	/var/discourse/shared/standalone/uploads/default/optimized/2X/6
77280	/var/discourse/shared/standalone/log/var-log
81928	/var/discourse/shared/standalone/postgres_data/pg_wal
84064	/var/discourse/shared/standalone/log
294384	/var/discourse/shared/standalone/uploads/default/optimized/1X
325068	/var/discourse/shared/standalone/uploads/default/original/1X
559576	/var/discourse/shared/standalone/uploads/default/original/2X
724684	/var/discourse/shared/standalone/postgres_data/base/16384
730776	/var/discourse/shared/standalone/uploads/default/optimized/2X
749424	/var/discourse/shared/standalone/postgres_data/base
833836	/var/discourse/shared/standalone/postgres_data
884648	/var/discourse/shared/standalone/uploads/default/original
1025164	/var/discourse/shared/standalone/uploads/default/optimized
1909816	/var/discourse/shared/standalone/uploads/default
1919380	/var/discourse/shared/standalone/uploads
3839148	/var/discourse/shared/standalone/backups/default
3839152	/var/discourse/shared/standalone/backups
6682972	/var/discourse/shared/standalone
6682976	/var/discourse/shared/
「いいね!」 2

最初にもっと正確に記述すべきでしたが、これほど広範なフィードバックが得られるとは予想していませんでした。

アップロードとバックアップはS3にあります。ライブシステムのデータベースサイズは現在約230GBです。圧縮バックアップは約25GBだと思います。

「いいね!」 4

うわー、それは大きいですね!そのサイズになると、データベース操作は通常、確かに少し厄介になります。

「いいね!」 2

ヨー。最近掃除機かけた?

いいえ、自動バキュームがそれを処理するはずだと思っていましたが?違いますか?

そうなるはずだと思います。何がそれをトリガーするのかはっきりしません。余分に実行しても害はなく、スペースを節約できるかもしれません。インプレースアップグレードを行う場合は、アップグレード後に実行することが推奨されます。何度かかなりのスペースをクリーンアップするのを見てきました。

データベースが 230GB の場合、新しいサーバーに復元することを強くお勧めします。230GB の読み書きのダウンタイムはかなりのものになるでしょう。

「いいね!」 1