我已经建立了一个测试Postgres-XL集群,其架构如下:
我创建了一个新数据库,其中包含一个通过复制分发的表。这意味着我应该在每个单独的datanode中拥有该表的精确副本。
对表进行操作很有效,我可以看到连接到所有协调节点时复制的更改。
然而,当我模拟其中一个数据节点发生故障时,我仍然可以正常读取表中的数据,我无法添加或修改任何内容,并且收到以下错误:
ERROR: Failed to get pooled connections
我正在考虑将Postgres-XL部署为适用于相当数量的应用程序的高可用数据库后端,我无法控制这些应用程序如何与数据库交互(如果这些应用程序无法写入,则可能会出现问题。当一个datanode关闭时到数据库。)
据我了解,Postgres-XL应该以非常透明的方式实现复制表的高可用性,并且应该能够支持丢失一个或多个datanode(只要至少有一个仍然可用 - 再次,这只是为了复制表),但似乎并非如此。
这是预期的行为吗?为了能够承受一个或多个数据节点的下降,可以做些什么?
答案 0 :(得分:0)
因此事实证明它根本不透明。令我惊讶的是,Postgres-XL没有高效的支持或恢复。意味着如果丢失一个节点,数据库将失败。如果您使用round robbin或hash DISTRIBUTED BY选项,如果丢失了节点中的磁盘,则会丢失整个数据库。我简直不敢相信,但事实就是这样。
他们有一个“待机”服务器选项,它只是您拥有的每个节点的镜像节点,但即使这样也需要手动设置它以恢复并使您需要的节点数量翻倍。对于数据保护,您必须使用REPLICATION DISTRIBUTED BY选项,该选项速度较慢并且没有故障转移支持,因此您必须手动重新启动它并重新配置它以不使用故障节点。
https://sourceforge.net/p/postgres-xl/mailman/message/32776225/
https://sourceforge.net/p/postgres-xl/mailman/message/35456205/