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, 安全测试工具, 客户端加密, 数据库中间件, 运维工具, 连接池, 预握手