云计算百科
云计算领域专业知识百科平台

如何在香港服务器 Ubuntu 20.04 上实现 Postgres 14 + PgBouncer 连接池部署指南

本文针对使用 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 初始性能结果(示例)

连接方式TPS 平均平均延迟 (ms)最大后端连接数
直连 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 连接池大小细调

根据应用池化后的并发连接数与事务平均时间调整:

业务类型建议 default_pool_size说明
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,结合合理硬件配置与系统内核优化,可以显著提升数据库并发处理能力与连接效率。本文从基础安装、深入参数配置到性能评估,为建设高可用、高性能的数据库服务提供了详尽指南。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 如何在香港服务器 Ubuntu 20.04 上实现 Postgres 14 + PgBouncer 连接池部署指南
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!