标签: pgbouncer

使用 HAProxy 和 PGBouncer 的 PostgreSQL 高可用性/可扩展性

我有多个用于 Web 应用程序的 PostgreSQL 服务器。通常在热备模式(异步流复制)下一个主多从。

我使用 PGBouncer 进行连接池:安装在每个 PG 服务器(端口 6432)上的一个实例连接到本地主机上的数据库。我使用事务池模式。

为了在从站上平衡我的只读连接,我使用 HAProxy (v1.5) 和 conf 或多或少像这样:

listen pgsql_pool 0.0.0.0:10001
        mode tcp
        option pgsql-check user ha
        balance roundrobin
        server master 10.0.0.1:6432 check backup
        server slave1 10.0.0.2:6432 check
        server slave2 10.0.0.3:6432 check
        server slave3 10.0.0.4:6432 check
Run Code Online (Sandbox Code Playgroud)

因此,我的 Web 应用程序连接到 haproxy(端口 10001),即在每个 PG 从站上配置的多个 pgbouncer 上的负载平衡连接。

这是我当前架构的表示图:

haproxy > pgbouncer > postgresql

这很有效,但我意识到有些人的实现方式完全不同:Web 应用程序连接到单个 PGBouncer 实例,该实例连接到 HAproxy,它在多个 PG 服务器上进行负载平衡:

pgbouncer > haproxy > postgresql

最好的方法是什么?第一个(我现在的)还是第二个?一种解决方案相对于另一种解决方案有什么优势吗?

谢谢

postgresql scalability high-availability pgbouncer load-balancing

19
推荐指数
2
解决办法
3万
查看次数

pgBouncer 运行良好,但有时不可用

我在繁忙的 postgres 9 数据库前运行 pgBouncer。在大多数情况下,它运行良好。但是每隔几个小时我就会收到一封来自我的应用程序的错误电子邮件,但 psycopg2 除外:

OperationalError('无法连接到服务器:无法分配请求的地址服务器是否在主机“neo-hulk”上运行并接受端口 6432 上的 TCP/IP 连接?')

这是一个 python 应用程序,其中有一堆 celery 工人正在运行任务。当这些错误到达时,我检查 pgbouncer db 并且池大小在限制范围内。经过一些实验,我将池最大大小设置为 400,池大小设置为 200。池模式是“会话”(请求主要是自动提交,几乎没有事务)。

是什么让 pgBouncer 像那样“消失”?它只是在很短的时间内(总的来说,与它处理的大量请求相比,我们谈论的是极少量的请求),但那些失败的请求很重要。

谢谢!

postgresql python pgbouncer

11
推荐指数
1
解决办法
8504
查看次数

pgbouncer 中 session pool_mode 的目的是什么?

由于在这种模式下 pgbouncer 为每个入站连接创建出站连接,因此在我看来 pgbouncer 不能作为池化器工作。这只是1对1的映射。

我哪里错了?

postgresql pgbouncer connection-pooling

10
推荐指数
1
解决办法
7267
查看次数

尝试使用 psql 连接时 Pgbouncer 身份验证失败

我正在尝试配置最新的 pgbouncer 以与 postgres 9 一起使用。我可以使用psql正确的密码连接到我的数据库,但是当我使用时,psql -p 6432我无法连接,错误消息为psql: ERROR: auth failed

这似乎可能是由我的 userlist.txt 文件引起的,但我不确定。我检查过,所有必需的文件均由 Postgres 系统用户完全拥有

pgbouncer.ini

[databases]
postgres = host=localhost port=5433 auth_user=postgres dbname=postgres

[pgbouncer]
pidfile = /usr/local/pgbouncer-1.9.0/pgbouncer.pid
logfile = /usr/local/pgbouncer-1.9.0/log/pgbouncer.log

user = postgres

listen_addr = *
listen_port = 6432

auth_type = md5
auth_file = /usr/local/pgbouncer-1.9.0/etc/userlist.txt
Run Code Online (Sandbox Code Playgroud)

用户列表.txt

"postgres" "md5<MD5 SUM>"

用于启动 pgbouncer 的命令

./bin/pgbouncer -d etc/pgbouncer.ini

日志输出显示失败

2019-08-20 13:46:01.080 16446 LOG C-0x1028ce0: postgres/postgres@127.0.0.1:43286 login attempt: db=postgres user=postgres tls=no
2019-08-20 13:46:01.080 16446 LOG C-0x1028ce0: postgres/postgres@127.0.0.1:43286 closing …
Run Code Online (Sandbox Code Playgroud)

postgresql pgbouncer postgresql-9.3

7
推荐指数
2
解决办法
2万
查看次数

与 pgBouncer 斗争

我有 Postgres 9.2 和 PgBouncer('stack builder' 附带的版本)。我有一个通过 Npgsql 2.0.12 版在 win7 机器上连接的 .net 应用程序。

我的应用程序可以直接连接到 postgres 服务器,但总是无法通过 pgbouncer 连接。

我到 npgsql 的连接字符串(经过一些替换)

Sslmode=Prefer;Timeout=40;Server={0};Port={3};User Id={4};Password={1};Database={2};Pooling=False;
Run Code Online (Sandbox Code Playgroud)

(我也尝试过使用 Protocol=3 显式连接到 PgBounce,但没有奏效。)

pgBounce ini 的数据库行是:

[databases]
something = host=localhost port=5433 dbname=somethingelse user=someone password=aaa
Run Code Online (Sandbox Code Playgroud)

在 userlist.txt 中,我根据需要有“某人”“aaa”。

当我的应用程序运行时,npgsql 显示“连接被强制关闭”并且 pgbouncer 错误日志显示:

2013-02-06 20:16:57.594 2444 LOG File descriptor limit: -1 (H:-1), max_client_conn: 1000, max fds possible: 1030
2013-02-06 20:16:57.649 2444 LOG listening on ::/6433
2013-02-06 20:16:57.657 2444 LOG listening on 0.0.0.0:6433
2013-02-06 20:16:57.659 2444 LOG process …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.2 pgbouncer

6
推荐指数
2
解决办法
6924
查看次数

PgBouncer 是否为每个数据库配置条目创建一个单独的池?

如果我设置了一个包含多个数据库条目的 pgbouncer.ini 配置文件,pgBouncer 是否会为每个条目创建一个单独的池?我会这么认为,但无法证实这一点。

例如,有这样的事情:

[数据库]
db1 = ...
db2 = ...

[pgbouncer]

.
.
.
max_client_conn = 480

default_pool_size = 250

每个数据库的默认池为 250 个最大为 480 个,还是总共250 个默认和最大 480 个连接在两者之间共享?

非常感谢!

postgresql database-design max-connections pgbouncer

6
推荐指数
1
解决办法
5705
查看次数

使用 pgbouncer 限制连接数

所以我有这个 pgbouncer 配置:

[databases]
my_db = host=10.10.10.10
my_db_with_conn_limit = host=10.10.10.10 dbname=my_db pool_size=55

max_client_conn = 300
default_pool_size = 65
reserve_pool_size = 5
reserve_pool_timeout = 1 
Run Code Online (Sandbox Code Playgroud)

目标是限制来自特定应用程序的连接数 - 当数据库名称为 database_with_conn_limit 时,只允许 55 个连接。

基本上,这些应用程序是相同的,但我希望其中一个限制连接,另一个获取任意数量的连接。

  • 这是正确的设置吗?
  • 或者我也应该为 my_db 指定 pool_size,给它所有 Postgres 的负 55?

postgresql pgbouncer

6
推荐指数
1
解决办法
868
查看次数

pgbouncer 和 ssl 连接

我有三台服务器,其中两台运行 postgres 9.5.3,第三台运行 pgbouncer 1.7.2。

我可以通过 pgbouncer 访问两个 postgresql 实例之一,一切都很完美。其他 postgresql 服务器,我们称之为 P1 不在我的控制之下,我必须使用 ssl 连接,因此它得到了,因此以下行被添加到该服务器 pga_hba.conf

hostssl    all       all             ###.###.###.###/32               md5
Run Code Online (Sandbox Code Playgroud)

我可以使用 psql 从 pgbouncer 服务器连接到 P1,没有任何问题。但是当我通过 pgbouncer 连接到 P1 时,我收到此错误消息

psql: ERROR:  no pg_hba.conf entry for host "XXX.XXX.XXX.XXX", user "myuser", database "mydb", SSL off
Run Code Online (Sandbox Code Playgroud)

这是我的 pgbouncer.ini

[databases]
my_database = host=xxx.xxx.xxx.xxxx port=5432 dbname=mydb user=myuser password=mypassword client_encoding='UTF8'

[pgbouncer]
listen_addr = *
listen_port = 5432
auth_type = md5 

auth_file = /etc/pgbouncer/userlist.txt
logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid

admin_users = rms_admin 

pool_mode …
Run Code Online (Sandbox Code Playgroud)

postgresql ssl pgbouncer

6
推荐指数
1
解决办法
7714
查看次数

PgBouncer 无法连接到服务器

我已经在 Windows 7 机器上使用 PostgreSQL 9.6 配置了 PgBouncer。以下是 pgbouncer 配置设置;

[数据库]

测试=主机=127.0.0.1 端口=5432 dbname=master_db 用户=postgres 密码=test123

[保镖]

日志文件 = C:\Program Files (x86)\PgBouncer\log\pgbouncer.log
pidfile = C:\Program Files (x86)\PgBouncer\log\pgbouncer.pid
监听地址 = *
监听端口 = 6432
验证类型 = md5
auth_file = C:\Program Files (x86)\PgBouncer\etc\userlist.txt
admin_users = postgres
stats_users = postgres
最大客户端连接数 = 100
默认池大小 = 20

用户列表文件

“测试用户”“巴查”

当我尝试使用 pgbouncer 连接到数据库时,通过此命令;

psql -h 127.0.0.1 -p 6432 -U test_user master_db

我收到这个错误

psql:错误:client_login_timeout(服务器关闭)
psql:错误:pgbouncer 无法连接到服务器

我怎么解决这个问题

windows errors pgbouncer postgresql-9.6

5
推荐指数
0
解决办法
4782
查看次数

PgBouncer 不确定性

我第一次使用简单的 Python Web 应用程序(Flask + psycopg2)尝试 PgBouncer,我很难通过简单的谷歌搜索来解释其日志消息的含义。我基本上看到了一堆:

2014-06-09 09:25:07.867 20980 LOG C-0x1b1b240: vinum/vinum@unix:6432 login attempt: db=vinum user=vinum
2014-06-09 09:25:07.867 20980 LOG S-0x1b38bf0: vinum/vinum@127.0.0.1:5432 new connection to server
2014-06-09 09:25:07.875 20980 LOG C-0x1b1b240: vinum/vinum@unix:6432 closing because: client close request (age=0)
2014-06-09 09:25:15.626 20980 LOG C-0x1b1b240: vinum/vinum@unix:6432 login attempt: db=vinum user=vinum
2014-06-09 09:25:16.058 20980 LOG C-0x1b1b240: vinum/vinum@unix:6432 closing because: client close request (age=0)
2014-06-09 09:25:16.762 20980 LOG C-0x1b1b240: vinum/vinum@unix:6432 login attempt: db=vinum user=vinum
2014-06-09 09:25:16.796 20980 LOG C-0x1b1b3a8: vinum/vinum@unix:6432 login attempt: db=vinum …
Run Code Online (Sandbox Code Playgroud)

postgresql python pgbouncer

3
推荐指数
1
解决办法
2789
查看次数