我在四个PostgreSQL工作者之间设置bi-direction replication,我想让我的Go数据库连接池处理所有这四个的连接。它应该能够为它们创建多个连接,为任何给定的查询随机选择一个,并在连接断开时进行故障转移。这在Go数据库库中是否可行?或者我应该使用pgBouncer而不是试图让database/sql或pgx来处理这种平衡?
答案 0 :(得分:3)
只要您调用sql.Open(driverName, dataSourceName)
,就会创建golang中的连接池,其中dataSourceName
是特定于驱动程序的configuration
,用于连接数据库。每当我们更改configuration
(即更改主机地址,架构,用户名等)时,我们需要打开新连接,因此将创建新的连接池。如果驱动程序可以处理负载平衡,则应该可以在dataSourceName
中配置,例如与MariaDB Connector/J高可用性配置中一样。
AFAIK,lib/pq和pgx尚不支持负载均衡。在您的情况下,要连接到群集中的数据库服务器,您需要为每个服务器打开不同的连接池,然后手动管理连接(并执行负载平衡)。这种方法需要做很多工作。我认为最好使用pgBouncer。