pgbouncer/pgbouncer
GitHub: pgbouncer/pgbouncer
PostgreSQL 的轻量级连接池中间件,通过复用数据库连接解决高并发场景下连接数过多导致的性能瓶颈。
Stars: 4257 | Forks: 579
# PgBouncer
PostgreSQL 的轻量级连接池。
主页:
源码与 Bug 跟踪:
## 构建说明
PgBouncer 可以使用 [Meson](推荐)或较旧的
基于 Autoconf 的构建系统进行构建。
目前两者均受支持;Autoconf 构建
最终将被移除。编译过程依赖于以下几点:
* [Libevent] 2.0+
* [pkg-config]
* 用于支持 TLS 的 [OpenSSL] 1.0.1+
* 支持 C11 标准的 C 编译器
* (可选)[c-ares] 作为 Libevent evdns 的替代方案
* (可选)LDAP 库
* (可选)PAM 库
Meson 构建还需要 [Meson] 0.58+ 和 [Ninja];Autoconf
构建需要 [GNU Make] 3.81+。
安装好依赖项后,使用 Meson 构建:
```
$ meson setup build --prefix=/usr/local
$ meson compile -C build
$ meson install -C build
```
或使用 Autoconf 构建:
```
$ ./configure --prefix=/usr/local
$ make
$ make install
```
如果您是从 Git 构建的,或者正在为 Windows 构建,请参阅
下文单独的构建说明。
## DNS 查找支持
PgBouncer 在连接时进行主机名查找,而不是仅在
配置加载时查找一次。这需要异步 DNS
实现。下表显示了支持的后端及其
探测顺序:
| 后端 | 并行 | EDNS0 (1) | /etc/hosts | SOA 查找 (2) | 备注 |
|----------------------------|----------|-----------|------------|----------------|---------------------------------------|
| c-ares | 是 | 是 | 是 | 是 | 在 <=1.10 版本中 IPv6+CNAME 存在缺陷 |
| evdns, libevent 2.x | 是 | 否 | 是 | 否 | 不检查 /etc/hosts 的更新 |
| getaddrinfo_a, glibc 2.9+ | 是 | 是 (3) | 是 | 否 | 在非 glibc 系统上不可用 |
| getaddrinfo, libc | 否 | 是 (3) | 是 | 否 | 需要 pthreads |
1. 需要使用 EDNS0 才能在一个主机名后拥有超过 8 个地址。
2. 需要 SOA 查找,以便在区域序列号更改时重新检查主机名。
3. 要启用 EDNS0,请将 `options edns0` 添加到 `/etc/resolv.conf` 中。
c-ares 是功能最全的实现,推荐
用于大多数场景和二进制打包(如果有
足够新的版本可用)。Libevent 内置的 evdns 在列出的限制条件下也适用于
许多场景。其他的后端目前主要作为遗留
选项,不再进行太多测试。
默认情况下,如果能找到 c-ares,就会使用它。可以通过
`-Dcares=enabled`(configure: `--with-cares`)强制使用它,或者通过
`-Dcares=disabled`(configure: `--without-cares`)禁用它。如果不使用 c-ares
(未找到或被禁用),则使用 Libevent。指定 `-Devdns=false`
(configure: `--disable-evdns`)以禁用 Libevent 的 evdns 并
回退到基于 libc 的实现。
## 可选功能
PAM、LDAP 和 systemd 功能由 meson 自动检测:它们的 `-Dpam`、
`-Dldap` 和 `-Dsystemd` 选项默认为 `auto`,因此只要存在
相应的库,就会进行构建。通过 `-D=enabled` 强制开启某项功能,或通过
`-D=disabled` 关闭。Autoconf 构建不会自动检测它们;请
使用 `--with-pam`、`--with-ldap` 或 `--with-systemd` 显式开启。
## PAM 认证
编译时如果加入了 PAM 支持,将提供一种新的全局认证类型 `pam`,用于通过 PAM 验证用户。
## LDAP 认证
编译时如果加入了 LDAP 支持,将提供一种新的全局认证类型 `ldap`,用于通过 LDAP 验证用户。
## systemd 集成
systemd 支持允许使用 `Type=notify`(或者如果您使用的是
systemd 253 或更高版本,则可以使用 `Type=notify-reload`)以及 socket 激活。请参阅
`etc/pgbouncer.service` 和 `etc/pgbouncer.socket` 获取示例。
## 从 Git 构建
使用 Meson,您可以直接从检出的代码库进行构建;构建手册页需要 pandoc:
```
$ git clone https://github.com/pgbouncer/pgbouncer.git
$ cd pgbouncer
$ meson setup build
$ meson compile -C build
$ meson install -C build
```
运行 `meson configure build` 以列出可用的 `-D` 选项。
而 Autoconf 构建则要求您在运行 `configure` 之前生成头文件和
配置文件:
```
$ ./autogen.sh
$ ./configure
$ make
$ make install
```
默认情况下,所有文件都将安装在 `/usr/local` 下。您可以
为 `configure` 提供一个或多个命令行选项。运行
`./configure --help` 以列出可用的选项以及用于自定义配置的
环境变量。
从 Git 进行 Autoconf 构建所需的额外软件包:autoconf、
automake、libtool、pandoc
## 测试
请参阅[测试目录下的 `README.md` 文件][1]了解如何运行测试。
## 在 Windows 上构建
Windows 上唯一受支持的构建环境是 MinGW。不支持 Cygwin 和
Visual $ANYTHING。
要在 MinGW 上构建,请执行常规的 Meson 构建:
```
$ meson setup build
$ meson compile -C build
```
或 Autoconf 构建:
```
$ ./configure
$ make
```
如果使用 Autoconf 从 Unix 交叉编译:
```
$ ./configure --host=i586-mingw32msvc
```
LDAP 构建选项目前在 Windows 上不受支持。
## 在 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
```
标签:Checkov, Gophish, Libevent, PostgreSQL, 安全测试工具, 客户端加密, 数据库中间件, 运维工具, 连接池, 预握手