如何获取Golang数据库连接池来管理群集中多个主机的连接?

时间:2017-04-24 23:23:13

标签: postgresql go replication connection-pooling postgresql-bdr

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

1 个答案:

答案 0 :(得分:3)

只要您调用sql.Open(driverName, dataSourceName),就会创建golang中的连接池,其中dataSourceName是特定于驱动程序的configuration,用于连接数据库。每当我们更改configuration(即更改主机地址,架构,用户名等)时,我们需要打开新连接,因此将创建新的连接池。如果驱动程序可以处理负载平衡,则应该可以在dataSourceName中配置,例如与MariaDB Connector/J高可用性配置中一样。

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