多个端口上的 pgBouncer?

Posted

技术标签:

【中文标题】多个端口上的 pgBouncer?【英文标题】:pgBouncer on Multiple Ports? 【发布时间】:2018-09-07 14:05:48 【问题描述】:

我在 5432 上运行 Postgres 数据库,在 6432 上运行 pgBouncer。

我所有的脚本都指向 6432,但我们有一个指向 5432 的大型遗留代码库,我们也希望拥有用户 pgBouncer。

我们想出的最佳方法是在 4432 上运行 Postgres,在 5432 和 6432 上运行 pgBouncer。不幸的是,我们只能找到一种方法让 pbBouncer 在一个端口上侦听。

是否可以让 pgBouncer 监听两个端口?

我们也尝试过使用 IPTables 将 6432 透明转发到 5432,但没有成功:

sudo iptables -t nat -I PREROUTING -p tcp --dport 6432 -j REDIRECT --to-ports 5432
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 6432 -j REDIRECT --to-ports 5432

还是报这个错:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.6432"?

任何建议(除了“更新遗留代码库”,这是作为最后的手段保留)?

【问题讨论】:

【参考方案1】:

您不能让 pgbouncer 监听多个端口。因此,使用操作系统工具转发端口是正确的方法。我不是iptables 的专家,因此我无法评论您的尝试。

另一种方法是在一个主机上运行多个 pgbouncer 实例。

【讨论】:

【参考方案2】:

您的 iptables 在我看来还不错,但不要忘记启用 ip 转发:

sysctl net.ipv4.ip_forward=1

【讨论】:

【参考方案3】:

这篇文章很老了,但值得一提的是,在我们的商店中,我们通过为重定向端口创建软链接解决了这个问题。所以在你的情况下:

/tmp/.s.PGSQL.6432 --> /tmp/.s.PGSQL.5432

【讨论】:

以上是关于多个端口上的 pgBouncer?的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 速率函数和区间选择

greenplum 连接池pgbouncer的使用

使用PgBouncer连接池

PgBouncer 和 PostgreSQL 的身份验证

linux ---pgbouncer的安装和配置

安装配置PGBouncer连接池