如何验证pg-bouncer与PostgreSQL的联动是否正常工作?
确认pgBouncer与PostgreSQL联动的验证方法
要验证你的pgBouncer是否正常代理PostgreSQL的读写请求,可以通过以下几个实操步骤确认:
1. 读写操作交叉验证
- 先通过pgBouncer连接数据库:
psql -p 6432 -U user db1 - 在这个会话里执行写操作(比如先创建测试表,再插入数据):
CREATE TABLE IF NOT EXISTS test_pgbouncer (id SERIAL, content TEXT); INSERT INTO test_pgbouncer (content) VALUES ('request via pgbouncer'); - 直接连接PostgreSQL的5432端口,查询刚才插入的数据:
psql -p 5432 -U user db1
如果能查到插入的记录,说明写请求已经通过pgBouncer转发到PostgreSQL;反之,修改5432端口会话里的数据,再回到6432端口的会话查询,能看到更新结果则说明读请求也正常代理。SELECT * FROM test_pgbouncer;
2. 查看pgBouncer的连接状态
pgBouncer自带管理数据库,通过它可以直接查看代理连接情况:
- 连接到pgBouncer管理库:
psql -p 6432 -U user -d pgbouncer - 执行以下命令查看连接池状态:
你会看到SHOW POOLS;db1对应的条目,其中active(活跃连接数)、waiting(等待队列数)会随你的操作变化; - 查看客户端和后端服务器连接:
SHOW CLIENTS; SHOW SERVERS;CLIENTS列表里是连到6432端口的客户端连接,SERVERS列表里是pgBouncer主动连到5432端口的后端连接,两者对应上就说明代理链路正常。
3. 检查PostgreSQL的连接来源
直接连接PostgreSQL,查看当前连接的来源信息:
psql -p 5432 -U user db1
SELECT client_addr, application_name, usename FROM pg_stat_activity WHERE datname = 'db1';
如果看到有来自服务器本地IP(或127.0.0.1)的连接,且application_name为pgBouncer(取决于你是否在pgBouncer配置里设置了application_name_add_host = 1),这些就是pgBouncer转发请求时建立的后端连接,证明所有通过6432的请求都经过了代理。
4. 阻断pgBouncer验证可用性
临时停止pgBouncer服务(以systemd为例):
sudo systemctl stop pgbouncer
此时尝试用psql -p 6432 -U user db1连接,应该会直接失败;而用5432端口仍能正常访问,这反过来证明之前通过6432的请求确实是由pgBouncer代理处理的。
内容的提问来源于stack exchange,提问作者Shahariar Ashik
相关产品推荐
相关产品推荐

