使用 ZFS 头节点作为数据库服务器?

使用 ZFS 头节点作为数据库服务器?

我正在使用双头 ZFS 支持的 NAS 来实现高可用性集群共享存储,基于 Nexenta 推荐的架构,如下所示:

在此处输入图片描述

1 个 JBOD 中的磁盘将存储单个 4 TB Postgres 数据库的数据库文件,而另一个 JBOD 中的磁盘将存储 20 TB 的大型原始二进制平面文件(大型恒星物体碰撞模拟的集群结果)。换句话说,支持 Postgres 文件的 JBOD 将主要处理随机工作负载,而支持模拟结果的 JBOD 将主要处理串行工作负载。两个头节点都有 256 GB 内存和 16 个核心。集群有大约 200 个核心,每个核心维护一个 Postgres 会话,所以我预计大约有 200 个并发会话。

我想知道在我的设置中让 ZFS 头节点同时充当集群的 Postgres 数据库服务器镜像对是否明智?我能看到的唯一缺点是:

  1. 扩展基础设施的灵活性较低。
  2. 冗余程度稍低。
  3. Postgres 的内存和 CPU 资源有限。

然而,我看到的优点是 ZFS 在自动故障转移方面相当愚蠢,而且我不必花费大量精力让每个 Postgres 数据库服务器确定头节点是否已发生故障,因为它将与头节点一起发生故障。

答案1

您不能让两个 Postgres 实例(Postgres 术语中的“集群”)作用于同一个物理文件。

如果你想要性能,分片可能会对你有帮助(有两个实例,每个实例承载不同的数据)

如果您想要高可用性,那么使用 STONITH 的故障转移可能是解决方案。您需要确保硬件已修复,并且当第二个节点为其提供服务时,它不会尝试打开数据库。

相关内容