暂时使用网络存储进行还原、PSQL 更新,

我们正在一个VPS设置上运行一个更大的Discourse安装,它基本上对我们来说效果很好。在CPU/内存性能方面,我们有足够的空间。但磁盘空间有点问题——不是在日常业务中,而是在升级Postgres时(例如,由于这个原因,13->15的升级仍然未完成),我们缺乏空间,而且无法轻易扩展。

我知道Postgres更新还有其他选择,但请把这看作是一个更一般的问题。

我们正在Hetzner上运行,在那里网络存储可以很容易地用于临时用途。

在我们的测试服务器上,我正在尝试使其以临时方式工作——首先是从实时站点恢复备份,稍后测试Postgres升级。到目前为止,我还没有成功。

我已经尝试过符号链接,但注意到它不起作用,并且也在这里的某个地方读到它不是推荐的方法。我也尝试过将/shared共享从/var/discourse/shared/standalone移动到/mnt/ext-storage/standalone,并将文件移动到那里——不幸的是,并非没有问题。我甚至无法完成构建。

是否有任何方法适用于这些情况?我知道驱动器性能比本地驱动器差很多,但我并不打算在它上面运行论坛。我只是想找到一种舒适的方式在某些场景中使用它。

如果您的目标是进行升级,最简单的方法是启动一个新的虚拟机并迁移到它。这样可以跳过升级数据库的需要,并且您可以在虚拟机上获得新的操作系统,而这很可能无论如何都需要进行。

遵循使用 rsync 将 Discourse 站点迁移到另一台 VPS 指南,不要复制数据库(但要复制上传文件、Let’s Encrypt 证书和 SSL 证书)。

如果您的备份在 s3 上,那么冻结旧的实例、进行备份并在新机器上恢复备份会非常简单。

如果 hetzner 有某种永久 IP 地址可以分配给不同的服务器,您甚至不需要更改 DNS。

您应该知道自己可以构建一个新服务器,这样万一有一天需要,您就能做到。这是一个完美的练习机会。

实际上这不是一个选项。无论如何,它都不会耗尽日常所需的空间。而且我们目前使用的是 600GB 的硬盘空间,只使用了约 50%。没有更大的选项了——至少在 Hetzner 上没有。

这就是为什么我明确要求外部硬盘。

您是否运行过 ./launcher cleanup app?这是否没有释放足够的空间来就地执行升级?

1 个赞

这在重建时应该重要吗?我能理解是简单的重启,但是重建呢?

我并不是建议换一个更大的驱动器,只是再买一台和那台一模一样的服务器。安装 Discourse,然后恢复你的数据库。

这是一个非常好的问题。

是的。每一次重建都会创建一个新的容器,而每一个容器都会占用空间。如果你从未执行过清理,你可能会腾出几十 GB 的空间。

1 个赞

对于数据库升级,您需要尽可能多的空间。所以是的。我认为这很重要。

{“translation”: "[quote="Helmi, post:1, topic:351878, username:helmi"]
有没有适用于这类情况的解决方法?
[/quote]

我们的更新指南中包含了针对您的具体使用场景的指南

我们为处于相同情况的用户增加了此选项。请确保在尝试之前备份到外部存储!"}

2 个赞

如果您使用的是虚拟机 (VM),那么迁移到新的虚拟机要容易得多,而且有很多好处。以下是其中几点:

  • 零风险——如果出现问题,您仍然拥有旧服务器
  • 零停机时间(旧服务器仅为只读状态)
  • 您可以获得可能需要的操作系统升级
  • 如果发生灾难,您可以验证自己知道如何启动新服务器
  • 您无需重新索引和清理
1 个赞

感谢各位的建议。

谢谢,这是我已知的另一个选项。不过还是感谢您指出来。

我没有怀疑这一点——但仍然很想探索在需要时添加额外存储以进行维护任务的选项。

2 个赞

将上传内容(例如 /var/discourse/shared/web_only)保存在网络存储上会很方便。您需要编辑 yml 文件以指向它,而不是使用符号链接(符号链接不起作用,因为容器无法访问符号链接指向的位置)。

然后,如果您迁移到新的虚拟机,只需重新挂载该网络存储即可,无需复制。

我不建议将数据库放在网络存储上,因为它速度较慢。

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 个赞