如何在AWS RDS PostgreSQL实例中安装配置PgBouncer?
能否在AWS RDS PostgreSQL实例中安装PgBouncer?
不能直接在RDS PostgreSQL实例内部安装PgBouncer。AWS RDS是托管型数据库服务,用户无法获取实例的操作系统级访问权限(如SSH登录),因此无法自行在实例上安装第三方软件。
不过有两种可行的替代方案来实现PgBouncer的连接池功能:
方案一:在EC2实例上独立部署PgBouncer
这是适用于所有RDS PostgreSQL实例的通用方案。
安装与配置步骤
准备EC2实例
- 选择与RDS实例同VPC、同子网的EC2实例,确保网络连通(通过安全组配置允许EC2访问RDS的5432端口)
- 选用Amazon Linux 2、Ubuntu等主流Linux发行版
安装PgBouncer
- 针对Amazon Linux 2:
sudo amazon-linux-extras install postgresql13 sudo yum install pgbouncer - 针对Ubuntu:
sudo apt update sudo apt install pgbouncer
- 针对Amazon Linux 2:
配置PgBouncer核心参数
- 编辑主配置文件
/etc/pgbouncer/pgbouncer.ini:[databases] # 格式:<客户端连接别名> = host=<RDS端点> port=5432 dbname=<目标数据库名> prod_db_pool = host=my-rds-prod.xxxxxx.us-east-1.rds.amazonaws.com port=5432 dbname=prod_db [pgbouncer] listen_addr = 0.0.0.0 # 允许所有IP访问,也可指定EC2私有IP listen_port = 6432 auth_type = md5 auth_file = /etc/pgbouncer/userlist.txt pool_mode = transaction # 根据业务选:session/transaction/statement max_client_conn = 1000 # 最大客户端连接数 default_pool_size = 20 # 单数据库默认连接池大小 - 编辑用户认证文件
/etc/pgbouncer/userlist.txt,添加RDS数据库的账号密码:"prod_user" "prod_password"
- 编辑主配置文件
启动并设置开机自启
sudo systemctl start pgbouncer sudo systemctl enable pgbouncer配置安全组规则
- 允许应用服务器所在安全组访问EC2实例的6432端口
- 确保EC2安全组能访问RDS实例的5432端口
应用连接方式
应用将连接地址改为EC2实例的IP/域名,端口改为6432,使用原RDS数据库的账号密码即可。
方案二:使用Aurora PostgreSQL内置PgBouncer(可选)
若业务可迁移到Amazon Aurora PostgreSQL,可直接使用其内置的PgBouncer,无需自行部署(要求Aurora PostgreSQL 13.4及以上版本)。
配置步骤
进入Aurora集群控制台
- 在集群详情页切换到「连接池」标签
创建并配置连接池
- 点击「创建连接池」,依次配置:
- 连接池名称
- 关联的Aurora数据库实例
- 连接池模式(session/transaction/statement)
- 最大连接数、池大小等参数
- 点击「创建连接池」,依次配置:
应用连接
- 使用Aurora提供的连接池端点(格式:
<集群名>-pgbouncer.xxxxxx.us-east-1.rds.amazonaws.com),端口6432,用原数据库账号密码连接即可。
- 使用Aurora提供的连接池端点(格式:
关键注意事项
- 监控:通过CloudWatch监控EC2上PgBouncer的连接数、等待队列等指标,或Aurora内置连接池的监控数据
- 高可用:EC2部署PgBouncer时,建议配置Auto Scaling组或ELB实现高可用
- 密码安全:避免明文存储密码,可使用AWS Secrets Manager动态加载账号密码
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

