2017-04-24 385 views
1

我在四个PostgreSQL工作人员之间设置bi-direction replication,我想让我的Go数据库连接池处理四个连接。它应该能够为它们创建多个连接,为任何给定查询随机选择一个连接,并在连接断开时进行故障切换。这在Go数据库库中是可行的吗?或者我应该只使用pgBouncer而不是试图让database/sqlpgx来处理这种平衡?如何获取Golang数据库连接池来管理群集中多个主机的连接?

+2

golang中的连接池是根据'配置'(对于每个模式的PostgreSQL,对于MySQL,您可以使用“相同”连接访问同一服务器中的多个数据库/模式)。如果您需要连接到多个服务器,则需要为每个服务器创建不同的连接池,然后手动管理它。恕我直言,在你的情况下,你应该使用pgBouncer。 – putu

+0

似乎是对的,@putu。想把这个答案放在我能接受的答案中吗? – theory

回答

2

golang中的连接池在您拨打sql.Open(driverName, dataSourceName)时创建,其中dataSourceName是驱动程序专用的configuration用于连接到数据库。无论何时我们更改configuration(即更改主机地址,模式,用户名等),我们都需要打开新的连接,因此将创建新的连接池。如果驱动程序可以处理负载平衡,则应该在dataSourceName中配置,例如,如MariaDB Connector/J高可用性配置。

AFAIK,lib/pqpgx尚未支持负载平衡。就你而言,要连接到集群中的数据库服务器,需要为每个服务器打开不同的连接池,然后手动管理连接(并执行负载平衡)。这种方法需要做很多工作。我认为最好使用pgBouncer。

+0

很好的答案,谢谢! – theory