PgBouncer:一个轻量级的用于PostgreSQL的连接池软件
目录索引
PgBouncer
PgBouncer 是一个轻量级的用于 PostgreSQL 的连接池软件。
主页: https://www.pgbouncer.org/
源码和 bug 追踪: https://github.com/pgbouncer/pgbouncer
构建
PgBouncer 在编译时依赖以下几个组件:
- GNU Make 3.81+
- Libevent 2.0+
- pkg-config
- OpenSSL 1.0.1+(用于支持 TLS)
- (可选)c-ares(用作 Libevent 的 evdns 的替代)
- (可选)PAM 库
安装好依赖后,执行以下命令构建:
$ ./configure --prefix=/usr/local
$ make
$ make install
如果你是从 Git 构建,或者在 Windows 上构建,请参考下面的单独构建说明。
DNS 查询支持
PgBouncer 在连接时进行主机名查询,而不仅仅在配置加载时进行一次。这需要使用异步 DNS 实现。下表显示了支持的后端及其探测顺序:
后端 | 并行查询 | EDNS0 (1) | /etc/hosts | SOA 查询 (2) | 备注 |
---|---|---|---|---|---|
c-ares | 是 | 是 | 是 | 是 | IPv6+CNAME 在 <=1.10 中有问题 |
evdns, libevent 2.x | 是 | 否 | 是 | 否 | 不检查 /etc/hosts 更新 |
getaddrinfo_a, glibc 2.9+ | 是 | 是 (3) | 是 | 否 | 非 glibc 系统不适用 |
getaddrinfo, libc | 否 | 是 (3) | 是 | 否 | 需要 pthreads |
- EDNS0 要求一个主机名后面有超过 8 个地址。
- SOA 查询用于在区域序列更改时重新检查主机名。
- 要启用 EDNS0,请在
/etc/resolv.conf
中加入options edns0
。
c-ares 是最全面的实现,推荐在大多数情况下使用和二进制打包(如果有足够新的版本)。Libevent 的内置 evdns 也适用于许多情况,但受到列出的限制。其他后端在这一点上都是遗留选项,并且不再接受太多测试。
默认情况下,如果能找到 c-ares,则使用它。可以使用 configure --with-cares
强制使用它,或使用 --without-cares
禁用它。如果不使用 c-ares(未找到或禁用),则使用 Libevent。指定 --disable-evdns
禁用使用 Libevent 的 evdns,并回退到基于 libc 的实现。
PAM 认证
要启用 PAM 认证,./configure
提供了一个 --with-pam
标志(默认值为 no)。当编译时启用 PAM 支持后,将可用一个新的全局认证类型 pam
来通过 PAM 验证用户。
systemd 集成
要启用 systemd 集成,请使用 configure
选项 --with-systemd
。这样可以使用 Type=notify
服务单元以及套接字激活。请参考 etc/pgbouncer.service
和 etc/pgbouncer.socket
中的示例。
从 Git 构建
从 Git 构建 PgBouncer 需要在运行 configure
之前获取 libusual 子模块并生成头文件和配置文件:
$git clone https://github.com/pgbouncer/pgbouncer.git
$ cd pgbouncer
$ git submodule init
$ git submodule update
$ ./autogen.sh
$ ./configure ...
$ make
$ make install
需要额外的软件包:autoconf、automake、libtool、pandoc
测试
有关如何运行测试的详细信息,请参阅测试目录中的 README.md
文件。
构建 Windows 版本
Windows 上唯一支持的构建环境是 MinGW。不支持 Cygwin 和 Visual $ANYTHING。
在 MinGW 上构建的步骤如下:
$ ./configure ...
$ make
如果从 Unix 进行交叉编译:
$ ./configure --host=i586-mingw32msvc ...
在 Windows 上运行
从命令行运行与平常一样,只是 -d
(后台运行)、-R
(重启)和 -u
(切换用户)选项不起作用。
要将 PgBouncer 作为 Windows 服务运行,需要配置 service_name
参数以设置服务的名称。然后执行以下命令:
$ pgbouncer -regservice config.ini
要卸载服务:
$ pgbouncer -unregservice config.ini
要使用 Windows 事件日志,在配置文件中设置 syslog = 1
。但在此之前,需要注册 pgbevent.dll
:
$ regsvr32 pgbevent.dll
要取消注册,执行:
$ regsvr32 /u pgbevent.dll