PgBouncer 连接池
PostgreSQL难度: 中级耗时: 30–45 分钟从 PGDG repo 安装 PgBouncer:transaction 或 session 池模式,通过 auth_query(SECURITY DEFINER 函数)或 userlist.txt 进行 scram-sha-256 认证,按数据库 max_connections 和 CPU 计算的池大小,systemd 以及可选的 so_reuseport 多进程。最后提供管理控制台 (SHOW POOLS/STATS)、应用连接字符串和 transaction 模式兼容性检查清单。
何时启用:应用打开数百/数千个连接,出现 sorry, too many clients already,或建立连接的开销很高。PgBouncer 不是 HA 或备份方案:failover 需要 streaming replication 或 Patroni,备份需要 pgBackRest。
架构: PgBouncer 部署在数据库服务器或独立服务器上;Patroni 时位于 HAProxy/VIP 前面
开始之前
- PostgreSQL 已按 pg-install 指南安装并运行;存在 … 数据库和 … 用户(使用 scram-sha-256 密码)。
- PostgreSQL …Patroni 集群 (pg-patroni) 正在运行;… 当前为 Leader…primary (pg-streaming) 正在运行…已按 pg-install 指南安装并运行…;存在 … 数据库和 … 用户(使用 scram-sha-256 密码)。
- Patroni 集群 … 健康:一个 Leader,replica 为 streaming;HAProxy 的写端口(…:…)只指向 leader。
- 应用用户的密码以 SCRAM-SHA-256 格式存储(使用 md5 摘要的旧用户需在 password_encryption = scram-sha-256 时重新设置密码)。
- 表单中的 max_connections(…)和 CPU(…)与数据库服务器上的实际值一致(池大小据此计算)。
- PgBouncer 服务器可以访问数据库(…HAProxy/VIP ……:…);应用服务器可以访问 PgBouncer(…:…)。
- 端口 … 未被占用。
- 已与应用团队确认池模式:在 transaction 模式下不使用依赖会话状态的功能(见下面的检查清单)。
- 具备 scp(root 或有 sudo 权限的用户)访问权限,可将密码摘要从数据库服务器复制到 PgBouncer 服务器,或者您将通过其他安全方式传输该文件。
指南阶段
- 安装 PgBouncer — 添加 PGDG repo · 添加 PGDG repo · 安装 PgBouncer
- 数据库侧 — 确认角色:此服务器是否为 …Leader…primary…? · 创建管理和认证用户 · 创建管理和认证用户 · 设置密码 · 设置密码 · 将 PgBouncer 服务器添加到 pg_hba.conf …
- PgBouncer 配置 — 添加 auth_user 密码 · 编写 pgbouncer.ini · 设置文件描述符限制 · 启动 PgBouncer
- 多进程 (so_reuseport) — 每个进程的配置文件 · systemd 模板服务 · 停止单进程服务,启动多个进程
- 验证 — 以应用用户连接 · 确认连接到达 leader · 检查管理控制台 · 在防火墙中开放 PgBouncer 端口
- 应用侧与安装后 — 应用连接字符串 · Transaction 模式兼容性检查清单 · 监控连接池 · 修改设置并重新加载