【问题标题】:How do I get a Golang Database connection pool to manage connections to multiple hosts in a cluster?如何获取 Golang 数据库连接池来管理与集群中多个主机的连接?
【发布时间】:2017-04-24 23:23:13
【问题描述】:

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

【问题讨论】:

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

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多