PG轻量化连接池pgbouncer使用教程

简介

PgBouncer 是一个流行的开源连接池软件,用于管理和缓解 PostgreSQL 数据库的连接压力。它的作用是在应用程序和数据库服务器之间创建一个连接池,以便有效管理和复用数据库连接。PgBouncer 的主要优势如下:

  1. 连接池管理:PgBouncer 可以管理大量客户端连接,并将它们重用,避免了频繁创建和销毁连接的开销。
  2. 资源节省:PgBouncer 将连接请求分配给事先建立的数据库连接,减少了数据库服务器的负载,提高了系统资源的利用率。
  3. 高可用性:PgBouncer 允许配置与多个 PostgreSQL 实例的连接,当一个数据库服务器出现故障时,可以自动切换到备用服务器,提供高可用性服务。
  4. 安全性增强:PgBouncer 支持 SSL/TLS 加密连接和身份验证,增加数据库连接的安全性。

PgBouncer 可以解决以下问题:

  1. 连接瓶颈:通过连接池管理和复用,PgBouncer 可以缓解大量并发连接对数据库服务器的压力。
  2. 性能优化:通过减少连接的创建和销毁,PgBouncer 可以改善数据库的响应时间和吞吐量。
  3. 高可用性:通过配置多个数据库服务器和自动故障转移,PgBouncer 可以提供高可用性服务。

在使用 PgBouncer 时,需要注意以下事项:

  1. 配置调整:需要根据实际需求和负载情况调整 PgBouncer 的配置参数,以确保连接池的大小和性能适合应用程序。
  2. 监控和故障排除:监控 PgBouncer 的连接池活动和性能指标,及时发现和解决连接问题或性能瓶颈。
  3. 限制功能使用:了解 PgBouncer 的限制,并避免在应用程序中使用与这些限制相关的功能。
  4. 安全性配置:正确配置和管理 PgBouncer 的安全性功能,包括 SSL/TLS 加密和身份验证设置。

总之,PgBouncer 是一个强大的连接池工具,可以提供连接管理、资源优化和高可用性,但需要注意它的一些功能限制和正确的配置。

安装环境说明

ip@hostname depend remarke
10.0.0.199@vm02 postgresql-15.3+pgbouncer1.20.1 standby
10.0.0.198@vm03 postgresql-15.3 master
10.0.0.197@vm04 postgresql-15.3 standby

        这里本文已经安装好了postgresql  并配置了级联复制关系 ,vm03➡vm02➡vm04。

由于pgbouncer的运行遵循psql协议,所以这里在部署的pgbouncer的节点必须有可运行的psql

PG轻量化连接池pgbouncer使用教程_第1张图片

安装依赖

官网对于pgboucer 的安装依赖有做说明

- GNU Make 3.81+
- Libevent 2.0+
- pkg-config
- OpenSSL 1.0.1+(用于TLS支持)
- c-ares(可选,作为Libevent的evdns的替代)
- PAM库(可选)

yum install make libevent pkgconfig openssl openssl-devel libevent-devel

PG轻量化连接池pgbouncer使用教程_第2张图片

 通过pgbouncer官网下载源码包,上传到虚拟机中。

解压压缩包

tar -zxvf pgbouncer-1.20.1.tar.gz 

 创建安装目录

mkdir /home/postgres/pgbouncer

 进入到解压包中进行编译

./configure --prefix=/home/postgres/pgbouncer

--prefix=/home/postgres/pgbouncer  指定安装的路径。 

PG轻量化连接池pgbouncer使用教程_第3张图片

make  && make  install

进行构建项目

PG轻量化连接池pgbouncer使用教程_第4张图片

        将pgbouncer 的所属权限给postgres

chown -R postgres:postgres /home/postgres/pgbouncer
chmod u+w /home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt
chmod u+w /home/postgres/pgbouncer/share/doc/pgbouncer/pgbouncer.ini

        注:

        在安装完成后,会在/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt  生成userlist.txt文件使用以上copy  对这个文件内容进行覆盖。这里最重要的两个配置文件pgbouncer.ini,userlist.txt需要进行编辑配置进行启动,所以需要对这两个文件拥有编辑权限

        userlist.txt文件处理

切换操作用户到postgres ,进入数据库导出数据库的用户和密码到

copy (select '"' || usename || '"  "' || passwd ||'"'  from pg_shadow ) to '/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt';

        在安装完成后,会在/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt  生成userlist.txt文件使用以上copy  对这个文件内容进行覆盖。这里最重要的两个配置文件pgbouncer.ini,userlist.txt需要进行编辑配置进行启动,所以需要对这两个文件拥有编辑权限

此时在文件中仍然还会保留有 \N 的非法字符,需要进入文件中将其删掉

PG轻量化连接池pgbouncer使用教程_第5张图片

 pgbouncer.ini文件处理

        按照以上步骤安装完成后会在/home/postgres/pgbouncer/share/doc/pgbouncer下生成userlist.txt,pgbouncer.ini文件

PG轻量化连接池pgbouncer使用教程_第6张图片

        配置pgbouncer.ini文件内容

[databases]
a1 = host=127.0.0.1 port=35432 dbname=postgres
readyonly =  host=10.0.0.197 port=45432 dbname=postgres
readywrite =  host=10.0.0.198 port=35432 dbname=postgres
[pgbouncer]
listen_addr=*
auth_type=md5
auth_file=/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt
logfile=/home/postgres/pgbouncer/pgbouncer1.log
pidfile=/home/postgres/pgbouncer/pgbouncer1.pid
unix_socket_dir = /tmp
max_client_conn=1000
default_pool_size=50

 PG轻量化连接池pgbouncer使用教程_第7张图片

PG轻量化连接池pgbouncer使用教程_第8张图片

在编辑的注意文件会打开一些参数  不注意的话  会在启动时候报错  ,需要注释掉

PG轻量化连接池pgbouncer使用教程_第9张图片

默认pool_mode = session

        启动pgbouncer 

/home/postgres/pgbouncer/bin/pgbouncer -d /home/postgres/pgbouncer/share/doc/pgbouncer/pgbouncer.ini

         查看是否正常启动

pgrep -alf |grep pgbouncer

        出现一下内容,表示启动正常 

PG轻量化连接池pgbouncer使用教程_第10张图片

         使用pbouncer访问数据库,其默认端口是默认6432,

psql -p 6432 -U postgres readyonly

        读写分离,主库是可读可写,从库是只读模式,可以通过pgbouncer实现变相的读写分离

本文

设置了两个name

readywrite :是主库,可读可写
readyonly:是从库,只读。

PG轻量化连接池pgbouncer使用教程_第11张图片

         数据池监控

        在pgbouncer中有一个伪数据库pgbouncer,用于对连接池的监控。

psql -p 6432 -U pgbouncer pgbouncer

这个是安装中默认存在的一个伪数据库,使用show help  可以查看一监控表数据。

PG轻量化连接池pgbouncer使用教程_第12张图片

下文继续讲关于pgbouncer中伪装数据库 ,

你可能感兴趣的:(postgresql,数据库,sql,database,1024程序员节)