26.1. 不同解决方案的比较

共享硬件功能在网络存储设备中很常见。尽管必须注意文件系统具有完整的 POSIX 行为,但也可以使用网络文件系统(请参见Section 18.2.2)。此方法的一个重要限制是,如果共享磁盘阵列发生故障或损坏,则主服务器和备用服务器都将无法运行。另一个问题是,在主服务器运行时,备用服务器永远不应访问共享存储。

备用服务器可以使用基于文件的日志传送(Section 26.2)或流复制(请参见Section 26.2.5)或两者的组合来实现。有关热待机的信息,请参见Section 26.5

Slony-I 是这种复制类型的示例,具有每个表的粒度,并且支持多个备用服务器。因为它异步(批量)更新备用服务器,所以在故障转移期间可能会丢失数据。

如果只是简单地 Broadcast 查询而未修改,则类似random()CURRENT_TIMESTAMP和序列的函数在不同服务器上可以具有不同的值。这是因为每个服务器都独立运行,并且因为 SQL 查询是 Broadcast 的(而不是实际修改的行)。如果这是不可接受的,则中间件或应用程序必须从单个服务器查询这些值,然后在写查询中使用这些值。另一种选择是将该复制选项与传统的主备设置一起使用,即数据修改查询仅发送到主服务器,并通过主备复制而不是复制中间件传播到备用服务器。还必须注意,所有事务都可能在所有服务器上提交或中止,也许使用两阶段提交(PREPARE TRANSACTIONCOMMIT PREPARED)。 Pgpool-II 和连续钨是这种复制的示例。

PostgreSQL 不提供这种复制,尽管可以使用 PostgreSQL 两阶段提交(PREPARE TRANSACTIONCOMMIT PREPARED)在应用程序代码或中间件中实现该复制。

Table 26.1总结了上面列出的各种解决方案的功能。

表 26.1 高可用性,负载平衡和复制功能矩阵

Feature 共享磁盘故障转移 文件系统复制 预写日志传送 Logical Replication 基于触发器的主备复制 基于语句的复制中间件 异步多主复制 同步多主复制
最常见的实现 NAS DRBD 内置流复制 内置逻辑复制,pgologic Londiste, Slony pgpool-II Bucardo
Communication method shared disk disk blocks WAL logical decoding table rows SQL table rows 表行和行锁
无需特殊硬件
允许多个主服务器
无主服务器开销
无需 await 多台服务器 关闭同步 关闭同步
主站故障将永远不会丢失数据 启用同步 启用同步
副本接受只读查询 热备用
Per-table granularity
无需解决冲突

有些解决方案不属于上述类别:

上一章 首页 下一章