作者:瀚高PG实验室 (Highgo PG Lab)
Pgpool-II简介
1.相当于中间件,位于应用程序和PG服务端之间;
2.提供连接池、负载均衡、自动故障切换等功能,负载均衡只针对读操作,写操作只发生在主节点上;
3.Pgpool-II自身也可以配置为主从结构,避免单点故障,对外提供虚拟IP地址,当主节点故障后,从节点提升为新的主节点并接管虚拟IP;
Pgpool-II体系结构

Pgpool的下载地址
Pgpool-II四种模式(O 意味着“可用”, X 意味着“不可用)

Pgpool-II主要配置文件
| 配置文件 | 用途 |
| pcp.conf | 用于管理、查看节点信息,如加入新节点。该文件主要是存储用户名及md5形式的密码 |
| pgpool.conf | 用于设置pgpool的模式,主次数据库的相关信息等 |
| pool_hba.conf | 用于认证用户登录方式,如客户端IP限制等,类似于postgresql的pg_hba.conf文件 |
| pool_passwd | 用于保存相应客户端登录帐号名及md5密码 |
Pgpool-II主要的脚本文件
以下脚本文件都会在pgpool.conf配置文件中指定路径
1)failover脚本 -->failover.sh #完成主备库角色的切换 ,主要有两种方式,推荐使用方式 pg_ctl promote命令。
2)Online Recovery脚本-->basebackup.sh 和 pgpool_remote_start
basebackup.sh 主要是以在线备份恢复的方式重新构建备库
pgpool_remote_start 执行数据库启动命令
Pgpool的安装参考
启动和关闭pgpool
1)启动命令
pgpool ##直接启动,不输出调试信息
pgpool启动在后台,开启debug模式,debug日志输出到/tmp/pgpool.log。
pgpool -n -d > /tmp/pgpool.log 2>&1 &
2) 关闭命令
pgpool [-m {s[mart]|f[ast]|i[mmediate]}] stop
stop有三个模式:"smart", "fast", "immediate"
smart 等待客户端断开后关闭
fast 不等待客户端断开,立刻关闭
immediate 等同于fast模式
注意:
pgpool的启动和关闭顺序,启动时先主后备,关闭时先备后主。
如果pgpool没有正常关闭,下次启动可能会异常。
通过Pgpool访问数据库示例
启动pgpool后,使用端口9999和VIP地址连接数据库
psql -h 192.168.137.200 -p 9999 -d testdb
psql (9.5.7)
Type "help" for help.
psql -p 9999 d testdb -c “show pool_nodes;”
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+----------+------+--------+-----------+---------+------------+-------------------+-------------------
0 | db1 | 1921 | up | 0.500000 | primary | 0 | false | 0
1 | db2 | 1921 | up | 0.500000 | standby | 0 | true | 0
Pgpool-II的其他管理命令
1)show命令
show pool_nodes; #显示所有已配置节点的列表,以pgpool链接数据库后执行
show pool_status; #显示Pgpool-II配置参数的当前值
show pool_version; #显示Pgpool-II版本信息
show pool_processes; #显示所有Pgpool-II进程的列表
show pool_pools; #显示Pgpool-II连接池列表
2)pcp管理命令列表
| 命令名称 | 作用 |
| pcp_attach_node | 为pgpool-II关联一个节点 |
| pcp_detach_node | 从pgpool-II脱离一个节点 |
| pcp_node_count | 显示数据库节点的总数 |
| pcp_node_info | 显示指定的节点信息 |
| pcp_pool_status | 显示pgpool.conf中定义的参数值 |
| pcp_proc_count | 显示Pgpool-II子进程ID的列表 |
| pcp_proc_info | 显示Pgpool-II子进程ID的信息。 |
| pcp_promote_node | 指定新节点作为Pgpool-II的主节点 |
| pcp_recovery_node | 在线恢复一个节点 |
| pcp_stop_pgpool | 停止pgpool-II |
| pcp_watchdog_info | 显示Pgpool-II的watchdog状态 |
pcp命令示例:
pcp_node_count #显示数据库节点的总数
pcp_node_info [-h db1 -U postgres] 0 #显示指定的节点信息
pcp_watchdog_info -h db1 -U postgres #显示Pgpool-II的watchdog状态
pcp_pool_status -h db1 -U postgres |more #显示pgpool.conf中定义的参数值
pcp_detach_node -n 1 #将指定的节点1从Pgpool-II中分离出来
pcp_attach_node -n 1 #将指定节点附加到Pgpool-II
测试数据库failover故障转移(目标是业务访问的连续性不受影响!)
1)模拟备机故障
a.手动关掉备节点数据库
b.手动关闭备节点服务器
2)模拟主机故障
a.手动关掉主节点数据库
b.手动关闭主节点服务器
3)使用pcp_recovery_node恢复节点1
pcp_recovery_node -n 0 -d > /tmp/reco.log #在正常主节点执行恢复备节点
Pgpool-II作为PostgreSQL的中间件,提供了连接池、负载均衡和故障切换等功能。它支持主从结构,能实现虚拟IP的自动接管。本文介绍Pgpool-II的安装、配置和管理命令,并演示了如何通过Pgpool访问数据库。
1443

被折叠的 条评论
为什么被折叠?



