本文针对使用 Ubuntu 20.04 LTS 在香港服务器环境下部署 PostgreSQL 14 与 PgBouncer 的生产级连接池解决方案做深入技术讲解。内容涵盖硬件配置建议、系统与网络优化、安装部署步骤、关键配置说明、调优建议与性能对比评估。A5数据重点关注实际可落地的配置细节、代码示例以及性能测试结果,适用于跨境电商、SaaS、实时分析等业务场景。
一、环境与硬件配置建议
在开始部署之前,推荐的香港服务器www.a5idc.com硬件配置如下(适用于中到大型生产数据库负载):
| CPU | 8 核 AMD EPYC / Intel Xeon | 支持多并发查询与后台维护 |
| 内存 | 32 GB DDR4 | 足够缓存热点数据与连接池缓冲 |
| 磁盘 | 1 × 1TB NVMe SSD | 高 IOPS 读写性能 |
| 网络 | 1 Gbps 公网带宽 | 跨境访问延迟敏感业务推荐 CN2/直连 |
| 操作系统 | Ubuntu 20.04 LTS x64 UEFI | 长期支持稳定版本 |
| 时区 | UTC 或 Asia/Hong_Kong | 日志时间一致性 |
在香港数据中心,公网访问延迟对于海外用户体验至关重要,建议同时测试 CN2/直连网络延迟并依据业务,结合 Anycast / 多 BGP 提供更稳定路由。
二、基础系统准备与优化
2.1 系统更新
sudo apt update
sudo apt upgrade -y
sudo reboot
2.2 用户与基本工具
# 创建 PostgreSQL 管理用户
sudo adduser dbadmin
sudo usermod -aG sudo dbadmin
# 安装必要工具
sudo apt install -y wget curl htop iotop unzip git
2.3 内核参数优化(生产推荐)
编辑 /etc/sysctl.conf 添加:
# 增加文件句柄数
fs.file-max = 1000000
# 内核共享内存
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
# 网络连接追踪
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535
应用:
sudo sysctl -p
2.4 时钟同步
sudo apt install -y chrony
sudo systemctl enable –now chrony
三、安装 PostgreSQL 14
Ubuntu 20.04 默认源不包含最新 PostgreSQL 14,因此需要添加官方源:
# 添加官方仓库
wget -qO – https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add –
echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install -y postgresql-14 postgresql-server-dev-14
验证安装:
psql –version
# 输出示例: psql (PostgreSQL) 14.x
四、PostgreSQL 14 生产级参数配置
编辑 PostgreSQL 主配置 /etc/postgresql/14/main/postgresql.conf:
# 监听所有地址
listen_addresses = '*'
# 内存设置示例(32GB 系统)
shared_buffers = 8GB
effective_cache_size = 24GB
work_mem = 64MB
maintenance_work_mem = 2GB
# WAL 日志
wal_level = replica
max_wal_size = 4GB
min_wal_size = 1GB
# 连接数
max_connections = 200
# 提升透明大页与锁
tcp_keepalives_idle = 60
tcp_keepalives_interval = 30
tcp_keepalives_count = 10
# 时区
timezone = 'Asia/Hong_Kong'
编辑访问控制 /etc/postgresql/14/main/pg_hba.conf,增加信任或密码认证:
# 本地
local all all md5
# 内网连接
host all all 0.0.0.0/0 md5
重启 PostgreSQL:
sudo systemctl restart postgresql
五、安装与配置 PgBouncer
5.1 安装 PgBouncer
sudo apt install -y pgbouncer
5.2 创建池化用户
在 PostgreSQL 内:
CREATE USER pgbouncer WITH PASSWORD '强密码示例';
GRANT CONNECT ON DATABASE your_db TO pgbouncer;
5.3 PgBouncer 主配置
编辑 /etc/pgbouncer/pgbouncer.ini:
[databases]
your_db = host=127.0.0.1 port=5432 dbname=your_db
[pgbouncer]
# 监听
listen_addr = *
listen_port = 6432
# 授权
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
# 池化模式
pool_mode = transaction
# 最大连接与超时
max_client_conn = 1000
default_pool_size = 100
reserve_pool_size = 20
reserve_pool_timeout = 5
# 日志与监控
logfile = /var/log/pgbouncer/pgbouncer.log
admin_users = pgbouncer
5.4 用户列表
编辑 /etc/pgbouncer/userlist.txt:
"pgbouncer" "md5$(echo -n pgbouncer强密码示例pgbouncer | md5sum | awk '{print $1}')"
5.5 启动 PgBouncer
sudo systemctl enable –now pgbouncer
六、PgBouncer 池化模式解释与选择
| session | 每个客户端保持一个后端连接 | 维持会话状态应用 |
| transaction | 每次事务重新获取后端连接 | 对大多数 Web 应用最优 |
| statement | 每条 SQL 都重新获取连接 | 高并发但需谨慎 |
生产建议使用 transaction,在高并发短事务场景下可显著减少 PostgreSQL 后端连接开销。
七、监控与性能测试
7.1 基准测试工具
安装 pgbench:
sudo apt install -y postgresql-client-14
初始化测试库:
pgbench -i -s 50 -h localhost -p 6432 -U pgbouncer your_db
执行压力测试:
pgbench -c 200 -j 4 -T 60 -h localhost -p 6432 -U pgbouncer your_db
7.2 初始性能结果(示例)
| 直连 PostgreSQL (无池) | 3500 | 12.5 | 200 |
| PgBouncer transaction | 8200 | 5.8 | 120 |
| PgBouncer session | 6800 | 7.2 | 200 |
从数据可以看出,在典型 OLTP 场景下,PgBouncer transaction 模式能有效提升 TPS 并降低延迟,同时减少后端数据库连接数。
八、关键性能优化建议
8.1 Linux 网络与文件句柄
# 提升 ulimit
sudo bash -c "echo 'dbadmin soft nofile 1000000' >> /etc/security/limits.conf"
sudo bash -c "echo 'dbadmin hard nofile 1000000' >> /etc/security/limits.conf"
8.2 PostgreSQL WAL 与 checkpoint 调整
适合写密集场景:
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
8.3 连接池大小细调
根据应用池化后的并发连接数与事务平均时间调整:
| Web API 请求 | 100 ~ 150 | 高并发短事务 |
| 分析 ETL 任务 | 20 ~ 50 | 长事务减少抢占 |
| 混合场景 | 80 ~ 120 | 需观察实际负载 |
九、常见问题与解决
9.1 “FATAL: too many clients” 错误
检查 PgBouncer 与 PostgreSQL 的 max_connections 是否合理:
# PostgreSQL
SHOW max_connections;
# PgBouncer
SHOW CONFIG;
建议 PostgreSQL 设置为较小值,由 PgBouncer 控制总连接。
9.2 长事务导致池耗尽
PgBouncer transaction 模式避免在事务外长时间占用后端连接;若仍出现需排查应用事务边界。
十、总结
A5数据通过在香港服务器 Ubuntu 20.04 上部署 PostgreSQL 14 + PgBouncer,结合合理硬件配置与系统内核优化,可以显著提升数据库并发处理能力与连接效率。本文从基础安装、深入参数配置到性能评估,为建设高可用、高性能的数据库服务提供了详尽指南。
网硕互联帮助中心




评论前必须登录!
注册