我想在 Azure 上设置一个高耐久性数据库。我以前依赖数据库即服务产品,但在这种情况下无法做到这一点,所以我想听听您对以下计划的反馈。这足以确保数据的可靠存储吗?
- Azure Web 应用程序从网络获取指标数据,进行一些简单的处理和采样,然后将数据分批发送到 VM2。
- VM2 运行 Clickhouse 数据库,并将数据存储在 Azure 托管磁盘上
- 一些定期作业会拍摄磁盘快照并将其存储到冷存储中
我对托管磁盘的理解是,它们足以确保数据的可靠存储,它们应该可以消除因硬件故障导致数据丢失的任何担忧。这是正确的吗?
另一个担忧是由于人为错误导致的数据丢失,即意外对错误的数据运行“DROP TABLE xx”。我认为存储定期备份可以消除这种担忧(即允许恢复到上次备份)。你同意吗?
恢复计划是,如果 VM2 发生故障,一些监控过程会捕获此情况并启动连接到同一托管磁盘的新 VM2 实例。如果发生故障,Web 应用程序同样会重新启动。
我知道这种设置不是高可用性的,如果虚拟机发生故障,在它能够存储新数据之前会有一段时间。这对我来说是可以接受的。但我想确保存储的数据不会丢失,即以极高的概率持久存储。这足以确保这一点吗?你发现有什么问题吗?
答案1
我询问的是 Azure 托管磁盘是否可以替代复制数据库,以确保高耐用性。
我不这么认为。托管磁盘通过消除磁盘作为单点故障来提供高可用性。但托管磁盘对写入磁盘的资源一无所知。
数据库管理员不依赖文件系统备份来保护数据库免受人为错误的影响;文件系统备份本身无法解决并发数据库使用等问题。DBA做依赖备份,但不要文件系统備份。
同样的道理,托管磁盘提供了高可用性文件系统。作为 DBA,我认为我不会依赖托管磁盘来取代复制,原因与我不会使用文件系统备份来取代适当的数据库备份相同。
答案2
定义高耐用性的含义。您希望它能保护您免受哪种类型的数据丢失问题的影响?
数据库复制支持独立于底层块结构的逻辑复制。假设某个操作系统管理员做了一件傻事,删除了数据库文件。这会在下一个磁盘快照中被捕获。但是,如果您有一个复制的数据库,则文件删除不会被复制。辅助数据库可以相对快速地成为主数据库。
没有完美的存储系统。磁盘丢失数据的可能性很小,但并非为零。可能是存储中的硬件或软件出现故障。也许一场自然灾害摧毁了一个地区的多个可用区域。另一个地区的数据库副本最好位于遥远的城市,并且完全不受主存储发生的情况的影响。不同的存储硬件、不同的电网、不同的物理风险。
复制另一份副本的成本很高。您可能会发现一份备份副本足以满足您的需求。