论坛上的文档化流程列出了两种升级 PostgreSQL 的方法。
- 让 Discourse 自动处理。这需要 3 倍 的磁盘空间。因此,如果您的数据库为 100GB,则需要额外 200GB 的 空闲 空间才能完成升级。显然,这对拥有大型安装的用户来说是个大问题。
- 遵循他们的“手动更新”流程。这需要 2 倍 的磁盘空间,因此如果您的数据库为 100GB,则需要额外 100GB 的空闲空间。这对某些用户来说也是个不小的问题。
在这篇帖子中,@Falco 建议使用 --link 选项,通过硬链接就地执行升级。他们建议使用的 Docker 容器 支持该参数,但 Discourse 开发者在该帖子中并未推荐使用它。
所以我的问题是,是否应该将第 3 种方案列为:
- 运行以下命令,这仅需 极少 的额外磁盘空间。因此,如果您的数据库为 100GB,可能只需要额外 10GB 左右的空间?如果是这样,这是否是 Discourse 开发者推荐的流程?是否有人实际尝试过并成功完成?
新的就地升级命令:
docker run --rm \
-v DIR:/var/discourse/shared/standalone/postgres_data:/var/lib/postgresql \
tianon/postgres-upgrade:12-to-13 \
--link
与旧的升级到新目录的命令(需要双倍空间)相比:
docker run --rm \
-v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/12/data \
-v /var/discourse/shared/standalone/postgres_data_new:/var/lib/postgresql/13/data \
tianon/postgres-upgrade:12-to-13
附注:我本可以直接回复那条 PG13 升级主题的帖子,但该主题会在 7 天后删除帖子。为什么配置成这样?我知道当初这个话题刚出现时有很多讨论,本可作为有用的参考。
1 个赞
pfaffman
(Jay Pfaffman)
2
如果他们做过,他们并没有在这里提及。这里的指导说明大多力求尽可能万无一失,并尽可能减少系统管理知识的需求。这里的大多数人更愿意采用最安全、经过最充分测试的方法,而不是某种旨在节省极少成本的方法。
如果这对你有效,你可以相应地更新 PostgreSQL 13 升级。但在你这样做之前,你是否有信心向一个连 bash 是什么都不知道的人推荐这种方式?你确定这不会搞砸他们的数据库,导致他们的网站永远无法恢复吗?
这样做的初衷是,如果有其他有价值的信息出现,应将其添加到原始帖子(OP)中,而不是要求人们去翻阅可能毫无用处或已过时的、长达数年的帖子记录。
1 个赞
不,我不确定。我对 PostgreSQL 不太熟悉,希望 Discourse 的开发者能确认这是否可行。
即使它确实可行,我也不建议将其作为默认的升级流程,因为旧方法会保留一份独立的数据库副本以便回滚。不过,如果可行,它将成为存储空间受限环境下的一个绝佳选择。
pfaffman
(Jay Pfaffman)
4
另一种简单的方法是启动新服务器,迁移数据,然后关闭旧服务器。如果必须使用旧服务器,请在临时服务器上执行升级,然后在原始服务器上进行全新安装(该服务器可能还需要操作系统升级),最后再将服务迁回。
这种方法安全、简单且文档齐全,已有数百人成功采用。
是的,但这需要一两天时间。在此期间,我们要么a) 告知用户此期间的帖子将会丢失,要么b) 将论坛设为只读。这两种方案都不是最佳选择。
1 个赞
pfaffman
(Jay Pfaffman)
6
我认为服务器停机时间不会比重建期间长太多。如果你迁移到新服务器并一直使用它,可以在迁移过程中将旧服务器设置为只读模式。如果担心停机时间,迁移到新服务器会好得多,好得多。
1 个赞
我们的论坛规模相当大,但我从未尝试过恢复备份,所以不确定需要多长时间。如果这样做,我们确实会留在新主机上。如果可能的话,我希望避免这种情况,因为这会带来额外的工作和麻烦。
1 个赞
我在这里发布的所有帖子,都是为了不断尝试避免那样做。
pfaffman
(Jay Pfaffman)
11
解决空间有限的升级问题的另一种方法是进行备份,删除(rm - r)postgres目录,重新构建,然后恢复备份。我上周在一个站点上这样操作过。
2 个赞
RGJ
(Richard - Communiteq)
12
备份占用的空间几乎和复制数据目录一样多(甚至更多,因为它还需要压缩)?
1 个赞
不,从未成功升级。删除数据库并恢复备份听起来风险很大。我们基本上需要就地升级才能奏效。
我们目前运行的是 Ubuntu 18.04,它将在 2023 年停止支持,所以我想届时我们别无选择,只能迁移到新主机,并计划在那时下定决心,构建一台运行 22.04 LTS 的新主机,并从备份恢复。
pfaffman
(Jay Pfaffman)
14
嗯。可能是白费力气。我认为使用备份模型,其中一个副本被压缩了,这可能会产生影响?我进行操作的网站在 S3 上有备份。而且它是一个测试网站,所以如果出现问题,风险很低。
除了备份的使用频率比就地升级高得多,使用场景也多得多。我认为它安全得多。
1 个赞
也许可以,但我对 PostgreSQL 的专业知识不多,做起来不放心。不过,从备份中恢复整个站点到一个完全不同的虚拟机,我倒是很在行,但这会意味着丢失几个小时的帖子,直到恢复完成,所以我对此也不是特别热衷。但由于 18.04 即将被停止支持,明年我将别无选择。
1 个赞
pfaffman
(Jay Pfaffman)
16
除非你的数据库有几十GB,否则不会花费数小时。而且你在备份和恢复之前会把论坛设为只读模式,所以你不会丢失任何帖子。这并不难做到,几乎没有停机时间,只有只读时间。
root@forum-app:/shared/postgres_data# du -sh
97G .
我不会将其设为只读,而是会发布一个横幅,告知人们他们今天的帖子是短暂的。在我看来,最好让他们就此聊天,即使那些帖子会丢失。
1 个赞
届时,您还将可以使用内置的 Discourse 聊天功能,该功能将在 2.9 版本中发布(可能默认关闭,但处于测试阶段并支持使用)。
3 个赞