我正在建立一个非常小的 Web 应用程序,希望它最终能发展成更大的应用程序。目前,这是一个几乎零预算的个人项目,所以我没有太多资源可以投入其中。我确实希望以一种能够扩大规模的方式进行设置,如果我开始看到一些成功的话。
我打算在 EC2 上设置一个微型实例,使用 Rails 应用程序并使用 PostgreSQL 作为数据库。我是 EC2 新手,对设置服务器的过程感到很困惑。
我已经读了足够多的内容,知道通常不建议在 Micro 实例上运行 PostgreSQL,更不建议在同一实例上运行 Web 服务器,但目前性能并不是一个实质性问题(我现在只有 3 个用户!)。正常运行时间更重要,但不是关键。关键是数据库的完整性和可靠性。
据我所知,只需在 EC2 实例上设置默认 PostgreSQL 安装即可,但如果实例终止,数据就会消失。我想知道的是;
如何设置 PostgreSQL 以将其数据存储在可以持久保存的地方?
如何设置连续备份以便始终拥有用户数据的另一份副本?
我意识到这两个问题都不是小问题,但只要指明正确的方向就会有很大的帮助,因为这是一个需要我去思考的相当大的话题。
答案1
在 EBS 上创建实例时,禁用根卷的“终止时删除”。这样可以防止意外破坏数据。几天前,我在这篇文章中写了一些关于 EBS 与实例存储的文章。同一篇文章还讨论了使 EC2 上的 PostgreSQL 性能可接受的选项(提示:不要使用微实例)。
现在,最重要的是确保你设置定期pg_dump
备份或pg_basebackup
+ WAL 归档到亚马逊云端的某个地方。看看酒保。如果您非常信任 AWS 云或者不介意偶尔出现中断,那么您可以将其存档到 S3(最好是另一个 AWS 区域的 S3)。
如果可能的话,还可以设置流式复制到另一个可用区域或地区的第二个 Pg 服务器。
定期测试备份。监控您的复制(可能使用以下工具)repmgr
以帮助实现自动化)。
对主机进行快照并不是一个坏主意,但如果你记录了你如何配置它,那么这实际上就没有必要了,而且你测试你的备份。
答案2
最初,您可以使用电子商务为您的微实例提供支持的实例。这应该可以解决您最初担心的在重启时丢失数据的问题。
稍后,您应该设置实例以拥有一个额外的 EBS 磁盘,仅用于数据(文档根目录和数据库文件)。您可以使用 EBS 快照功能对数据磁盘进行快照并将其备份到 s3。
这是对您应该做的事情的非常高级的描述。详细的答案会非常非常长。