暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

基于Linux的pgpool-II制搭建

原创 Digital Observer 2024-11-26
294

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
公众号:Digital Observer;CSDN:施嘉伟;ITPUB:sjw1933;墨天轮:Digital Observer;PGFans:施嘉伟。

第一部分 说明

Pgpool-II管理一个 PostgreSQL服务器池, 以实现一些单个PostgreSQL安装不可用的功能。特点包括:
高可用性
Pgpool-II通过使用多个PostgreSQL服务器提供高可用性 (HA) 功能, 以便它自动从服务器池中删除损坏的服务器以继续执行数据库任务。这称为自动故障转移。Pgpool-II还为Pgpool-II本身 提供了一个 HA 功能 ,称为Watchdog。此外 ,Pgpool-II 采用复杂的 仲裁算法来避免误报错误和脑裂问题,使整个 HA 系统高度可靠。
负载均衡
Pgpool-II将读取查询分布在多个PostgreSQL服务器上以获得更高的性能。此功能称为负载平衡。写查询被发送到主服务器(流复制模式)或所有服务器(本机复制模式和快照隔离模式)。在任何情况下,Pgpool-II 都会自动区分读查询和写查询。
除了这些基本功能之外,Pgpool-II还提供了一些有用的功能,例如:
连接池
Pgpool-II维护与PostgreSQL服务器的已建立连接 ,并在具有相同属性(即用户名、数据库、协议版本和其他连接参数,如果有的话)的新连接进入时重用它们。它减少了连接开销,并提高了系统的整体吞吐量。
在线恢复
pgpool-II可以通过执行一条命令进行数据库节点的在线恢复。当在线恢复与自动故障转移一起使用时,通过故障转移分离的节点可以自动附加为备用节点。也可以同步和附加新的 PostgreSQL服务器。
限制超出的连接
PostgreSQL 的最大并发连接数是有限制的,当达到这个数量时,新的连接会被拒绝。但是,提高此最大连接数会增加资源消耗并对整体系统性能产生负面影响。Pgpool-II对最大连接数也有限制,但是额外的连接会排队而不是立即返回错误。但是,您可以配置为在超出连接限制时返回错误(4.1 或更高版本)。
看门狗
Watchdog 可以协调多个Pgpool-II,创建一个健壮的集群系统,避免单点故障或裂脑。为避免脑裂,您至少需要 3 个Pgpool-II节点。Watchdog 可以对其他pgpool-II节点执行生命检查,以检测 Pgpool-II 的故障。如果活动Pgpool-II宕机,备用 Pgpool-II可以升级为活动,并接管虚拟 IP。
在内存查询缓存中
在内存中查询缓存允许保存一对 SELECT 语句及其结果。如果有相同的 SELECT 进入,Pgpool-II从缓存中返回值。由于不涉及 SQL 解析和对PostgreSQL的访问 ,因此使用内存缓存非常快。另一方面,在某些情况下它可能比正常路径慢,因为它增加了一些存储缓存数据的开销。

第二部分 pgpool-II安装

2.1 下载安装

源码下载网址:https://www.pgpool.net/
解压安装源码包

$ tar -xzvf pgpool-II-4.2.7.tar.gz
复制

2.2 创建安装目录

创建对应的安装目录,并修改属组

# mkdir /SoftWare/pgpool # chown postgres:postgres /SoftWare/pgpool
复制

2.3 编译安装

查找对应PostgreSQL版本pg_config的路径,对应bin所在的目录

$ which pg_config /software/pgsql13/bin/pg_config
复制

编译安装pgpool-II

$ cd pgpool-II-4.2.7/ $ ./configure --prefix=/SoftWare/pgpool --pgsql=/software/pgsql13/ $ make && make install
复制

2.4 安装pgpool_recovery

在线恢复时,Pgpool-II需要pgpool_recovery、pgpool_remote_start和pgpool_switch_xlog函数。另外pgpoolAdmin的管理工具,停止,重启或重新加载一个PostgreSQL在屏幕上使用pgpool_pgctl。这些函数先安装在template1中,不需要安装在生产数据库中。

# 编译安装 $ cd /software/medias/pgpool-II-4.2.7/src/sql/pgpool-recovery $ make $ make install # 进入template1数据库 $ psql -c "create extension pgpool_recovery" template1
复制

2.5 安装pgpool_regclass

PostgreSQL版本是9.4以上,跳过此操作;否则需要生产数据库安装

# 编译安装 $ cd /software/medias/pgpool-II-4.2.7/src/sql/pgpool-regclass $ make $ make install # 进入template1数据库; 其生产数据库也需要执行 $ psql -c "create extension pgpool_regclass" template1
复制

第三部分 复制模式

3.1配置pcp.conf文件

pcp 工具的用户名、密码配置文件,假设配置的用户/密码为pcpadm/pgpool123
进入配置目录

[pgpool@node3 pgpool]$ cd /SoftWare/pgpool/etc [pgpool@node 3 etc]$ cp pcp.conf.sample pcp.conf
复制

在该文件中;用户/密码出现在每一行; # USERID:MD5PASSWD
pg_md5 生成配置的用户名密码是 pgpool123

[pgpool@node3 etc]$ pg_md5 pgpool123 fa039bd52c3b2090d86b0904021a5e33
复制

编辑pcp.conf;这里配置用户是 pcpadm,

[pgpool@node3 etc]$ vi pcp.conf # USERID:MD5PASSWD pcpadm:fa039bd52c3b2090d86b0904021a5e33
复制

3.2配置pool_hba.conf文件
现客户端连接数据库;要经过连接池 pgpool 中转。对客户端来说,pgpool 就是数据库服务端,所以 pool_hba.conf 接管 pg_hba.conf 的作用。与PostgreSQL实例上的pg_hba.conf文件保持一致的配置。

[pgpool@node3 etc]$ cp pool_hba.conf.sample pool_hba.conf [pgpool@node3 etc]$ vi pool_hba.conf # 增加 host all all 0.0.0.0/0 md5
复制

3.3配置pgpool.conf文件

拷贝一份配置文件的模板,并修改以下参数

$ cp /SoftWare/pgpool/etc/pgpool.conf.sample-replication /SoftWare/pgpool/etc/pgpool.conf $ vi /SoftWare/pgpool/etc/pgpool.conf backend_clustering_mode = 'native_replication' #复制模式 listen_addresses = '*' backend_hostname0 = '10.0.4.13' #填写需要复制的实例信息 backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/SoftWare/pgpooltestpgdata/db1' backend_flag0 = 'ALLOW_TO_FAILOVER' backend_application_name0 = 'server0' backend_hostname1 = '10.0.4.13' backend_port1 = 5433 backend_weight1 = 1 backend_data_directory1 = '/SoftWare/pgpooltestpgdata/db2' backend_flag1 = 'ALLOW_TO_FAILOVER' backend_application_name1 = 'server1' enable_pool_hba = on #启用pool_hba.conf中的用户认证 pool_passwd = 'pool_passwd' #配置账户密码文件路径 logging_collector = on log_directory = '/tmp/pgpool_logs' #pgpool运行错误日志路径 pid_file_name = '/SoftWare/pgpool/etc/pgpool.pid' #pgpool进程pid文件位置 replicate_select = off #是否复制select语句 insert_lock = on load_balance_mode = on #设置为 on,pgpool-II 将在数据库节点之间分发 SELECT 查询 failover_when_quorum_exists = off #内置复制模式不支持该参数,置为off
复制

3.4配置pool_passwd文件

pgpool 密钥文件;通过 pgpool 访问需要用户验证;这里暂用数据库用户 pgpool,密码为pgpool,与下一步创建数据库用户对应。

[pgpool@node3 etc]$ pg_md5 --md5auth -u pgpool -p password:
复制

3.5为PostgreSQL实例安装insert_lock表

我们在各节点创建一个测试用户和业务库

postgres=# create user pgpool password 'pgpool'; postgres=# create database pgpool01 owner pgpool; $ psql -p 5432 -f /software/medias/pgpool-II-4.2.7/src/sql/insert_lock.sql -d pgpool01 -U pgpool
复制

3.6启动pgpool

使用pgpool命令启动,并查看是否成功启动

$ pgpool $ ps -ef | grep pgpool postgres 7706 1 0 15:18 ? 00:00:00 pgpool
复制

另外地也可以用如下几种方式启动pgpool

$ pgpool 然而,以上的命令不打印日志信息,因为 pgpool 脱离终端了。如果你想显示 pgpool 日志信息,你需要传递 -n 到 pgpool 命令。此时 pgpool-II 作为非守护进程模式运行,也就不会脱离终端了。 $ pgpool -n & 日志消息会打印到终端,所以推荐使用如下的选项。-d 选项启用调试信息生成。 $ pgpool -n -d > /tmp/pgpool.log 2>&1 &
复制

3.7测试复制模式

使用pgpool端口连接服务(pgpool作为连接池),创建测试表并插入数据

$ psql -p9999 -U pgpool -d pgpool01 pgpool01=> create table lottu01(id int, info text, regtime timestamp); pgpool01=> insert into lottu01 values (1, 'pgpool native replication', now());
复制

连接到后台PostgreSQL实例查看是否成功插入

db1: $ psql -p5432 -U pgpool -d pgpool01 pgpool01=> \dt List of relations Schema | Name | Type | Owner --------+---------+-------+-------- public | lottu01 | table | pgpool (1 row) pgpool01=> select * from lottu01 ; id | info | regtime ----+---------------------------+---------------------------- 1 | pgpool native replication | 2022-03-16 15:22:11.405787 (1 row) db2: $ psql -p5433 -U pgpool -d pgpool01 pgpool01=> \dt List of relations Schema | Name | Type | Owner --------+---------+-------+-------- public | lottu01 | table | pgpool (1 row) pgpool01=> select * from lottu01 ; id | info | regtime ----+---------------------------+---------------------------- 1 | pgpool native replication | 2022-03-16 15:22:11.405787 (1 row)
复制

hhh6.jpg

最后修改时间:2024-11-27 10:46:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论