1.相当于中间件,位于应用程序和PG服务端之间;
2.提供连接池、负载均衡、自动故障切换等功能,负载均衡只针对读操作,写操作只发生在主节点上;
3.Pgpool-II自身也可以配置为主从结构,避免单点故障,对外提供虚拟IP地址,当主节点故障后,从节点提升为新的主节点并接管虚拟IP;
Pgpool-II体系结构
Pgpool的下载地址
http://www.pgpool.net/mediawiki/index.php/Downloads
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的安装参考
http://www.pgpool.net/docs/latest/en/html/installation.html
启动和关闭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 #在正常主节点执行恢复备节点