PG 14 + Pgpool-II + Watchdog 实现高可用(自动故障转移+读写分离+负载均衡)
Tags: PGPG 14Pgpool-IIpgpoolAdminWatchdog单点故障自动转移读写分离负载均衡高可用
简介
Pgpool-II是一个在PostgreSQL服务器和PostgreSQL数据库客户端之间工作的中间件。它是根据BSD许可证授权的。它提供以下功能。
连接池
Pgpool-II保存与PostgreSQL服务器的连接,并在具有相同属性(即用户名,数据库,协议版本)的新连接进入时重用它们。它减少了连接开销,并提高了系统的整体吞吐量。
复制
Pgpool-II可以管理多个PostgreSQL服务器。使用复制功能可以在2个或更多物理磁盘上创建实时备份,以便在磁盘发生故障时服务可以继续运行而不会停止服务器。
负载均衡
如果复制了数据库,则在任何服务器上执行SELECT查询都将返回相同的结果。Pgpool-II利用复制功能,通过在多个服务器之间分配SELECT查询来减少每个PostgreSQL服务器的负载,从而提高系统的整体吞吐量。充其量,性能与PostgreSQL服务器的数量成比例地提高。在许多用户同时执行许多查询的情况下,负载平衡最有效。
限制超出连接
PostgreSQL的最大并发连接数有限制,连接在这么多连接后被拒绝。但是,设置最大连接数会增加资源消耗并影响系统性能。pgpool-II对最大连接数也有限制,但额外连接将排队,而不是立即返回错误。
看家狗
Watchdog可以协调多个Pgpool-II,创建一个强大的集群系统,避免单点故障或脑裂。看门狗可以对其他pgpool-II节点执行生命检查,以检测Pgpoll-II的故障。如果活动Pgpool-II发生故障,则可以将备用Pgpool-II提升为活动状态,并接管虚拟IP。
在内存查询缓存中
在内存中查询缓存允许保存一对SELECT语句及其结果。如果有相同的SELECT,Pgpool-II将从缓存中返回值。由于不涉及SQL解析或访问PostgreSQL,因此在内存缓存中使用速度非常快。另一方面,在某些情况下,它可能比正常路径慢,因为它增加了存储缓存数据的一些开销。
Pgpool-II讲PostgreSQL的后端和前端协议,并在后端和前端之间传递消息。因此,数据库应用程序(前端)认为Pgpool-II是实际的PostgreSQL服务器,服务器(后端)将Pgpool-II视为其客户端之一。因为Pgpool-II对服务器和客户端都是透明的,所以现有的数据库应用程序可以与Pgpool-II一起使用。Pgpool-II讲述PostgreSQL的后端和前端协议,并在它们之间传递连接。因此,数据库应用程序(前端)认为Pgpool-II是实际的PostgreSQL服务器,服务器(后端)将Pgpool-II视为其客户端之一。因为Pgpool-II对服务器和客户端都是透明的,所以现有的数据库应用程序可以与Pgpool-II一起使用,几乎不需要更改其源码。
watchdog是pgpool的核心组件,watchdog在 pgpool方案中扮演非常重要的角色,当启动pgpool时会启动watchdog子进程,主要作用为:
- 和pgpool后端PostgreSQL数据库节点以及远程pgpool节点进行通信。
- 对远程pgpool节点是否存活进行检查。
- 当watchdog子进程启动时,对本地pgpool的配置和远程pgpool的配置参数进行检查,并且输出本地和远程pgpool不一致的参数。
- 当pgpool主节点宕机时,watchdog集群将选举出新的 watchdog主节点。
- 当pgpool备节点激活成主节点时,watchdog负责将VIP飘移到新的pgpool节点。
相关文章
之前发布过几篇有关pgpool的文章:
- 【DB宝60】PG12高可用之1主2从流复制环境搭建及切换测试
- 【DB宝61】PostgreSQL使用Pgpool-II实现读写分离+负载均衡
- PostgreSQL高可用之repmgr(1主2从+1witness)+Pgpool-II实现主从切换+读写分离+负载均衡
- 【DB宝72】pgpool-II和pgpoolAdmin的使用
- PG高可用之主从流复制+keepalived 的高可用
有关pgpool-II的相关文档:
架构
本节显示了使用Pgpool-II的流式复制配置示例。在本例中,我们使用3台Pgpool-II服务器来管理PostgreSQL服务器,以创建一个健壮的集群系统,并避免单点故障或脑裂。
本配置示例中使用了PostgreSQL 14。所有脚本都经过PostgreSQL 10及更高版本的测试。
我们使用3台安装了CentOS 7.6的服务器,server1、server2、server3。我们在每台服务器上安装PostgreSQL 14和Pgpool II。
你好,请问这个方案没有部署witness,能够防止因网络波动导致的脑裂现象么?
不好意思,现在注意到watchdog可以防止脑裂了。
你好,在步骤“配置PostgreSQL主备库”中输入pcp_recovery_node -h172.72.6.30 -p 9898 -U postgres -n 提示输入密码,我输如 lhr 无法登录,
报“ERROR: connection to host "172.72.6.30" failed with error "Connection refused"”,请问正确密码是多少呢?如何解决?
谢谢!
[postgres@lhrpg30 ~]$ pcp_recovery_node -h localhost -p 9898 -U pgpool -n 1
Password:
172.72.6.30改为localhost输入密码lhr后报错
ERROR: executing recovery, execution of command failed at "1st stage"
DETAIL: command:"recovery_1st_stage"
执行命令也失败了
查询日志报
password authentication failed for user "repl"
2023-02-10 08:10:04.845 CST [864981 DETAIL: Password does not match for user "repl"。
底层pg_basebackup 密码错误
密码是lhr
你好,博主。密码文件我已经存储过了。
-- 配置psql的密码
cat > /var/lib/pgsql/.pgpass <<"EOF"
172.72.6.30:5432:replication:repl:lhr
172.72.6.31:5432:replication:repl:lhr
172.72.6.32:5432:replication:repl:lhr
172.72.6.35:9999:postgres:pgpool:lhr
172.72.6.35:9999:postgres:postgres:lhr
lhrpg30:5432:replication:repl:lhr
lhrpg31:5432:replication:repl:lhr
lhrpg32:5432:replication:repl:lhr :
lhrpg30:5432:postgres:postgres:lhr
lhrpg31:5432:postgres:postgres:lhr
lhrpg32:5432:postgres:postgres:lhr
EOF
现在的问题就是两个standy一直为down,我根据你的步骤pcp_recovery_node 想将两个从节点启动,就报错,看日志底层发现是pg_basebackup提示用户"repl"密码错误。请问有排查的方向么?
谢谢哈!
能否加微信咨询一下,有偿。
请问这个sshUserSetup.sh脚本是从哪里获取呢?
Oracle rac中有,或者我的资料里也有
具体在哪呀?
用这个吧:https://share.weiyun.com/Fnu88Gxe
看了非常多的PG+pgpool的帖子,
就这个验证成功。
谢谢你,辛苦了
您客气了