架构图
基础信息
PostgreSQL
版本:10.4
主库db:192.168.1.15 监听端口5432
备库db:192.168.1.16 监听端口5432
vip:192.168.1.88
PGPool-II
版本:3.7.3
机器信息
1 | # cat /etc/redhat-release |
安装PGPool-II(RPM方式)
安装依赖
1 | yum -y install libmemcached-devel |
准备RPM包
1 | pgpool-II-pg10-3.7.3-1pgdg.rhel7.x86_64.rpm |
安装
1 | rpm -ivh *.rpm |
配置
默认配置文件目录:/etc/pgpool-II
配置ssh秘钥
配置秘钥使master和slave的postgres用户能免密连接
先修改postgres的密码,在root用户下
1 | passwd postgres |
在master,slave机器上都生成ssh
1 | [root@localhost ~]# su - postgres |
分别将master的公钥复制到slave,slave的公钥复制到master
配置系统命令权限
配置 ifconfig, arping 执行权限 ,执行failover_stream.sh需要用到,可以让其他普通用户执行
1 | chmod u+s /sbin/ifconfig |
配置pcp.conf
pcp.conf是配置pgpool-II自己的用户名和密码,pgpool提供pcp接口,可以查看,管理pgpool的状态,并且可以远程操作pgpool
1 | # 使用pg_md5生成密码 |
配置pool_hba.conf
和PostgreSQL的pg_hba.conf文件一样, Pgpool-II使用名为pool_hba.conf的配置文件支持类似的客户端认证功能,要和pg的pg_hba.conf保持一致,要么都是trust,要么都是md5验证方式
1 | # TYPE DATABASE USER CIDR-ADDRESS METHOD |
在pgpool中添加pg数据库的用户名和密码
由于Pgpool-II是一个在PostgreSQL服务器和PostgreSQL数据库客户端之间工作的中间件 ,所以当客户端应用程序连接到Pgpool-II时,Pgpool-II inturn会使用相同的凭据连接到PostgreSQL服务器,以便为客户端连接提供服务。
执行如下命令,会在配置目录生成pool_passwd文件
1 | pg_md5 -p -m -u postgres pool_passwd |
配置pgpool.conf
pgpool.conf是Pgpool-II的主要配置文件
创建健康检查用户
1 | create user pgpool_healthchk with password 'xxxx'; |
master配置
1 | # CONNECTIONS |
slave配置
仅列出与master不同的配置项
1 | heartbeat_destination0 = 'master' |
创建failover_stream脚本
在master\slave分别操作
1 | mkdir /opt/pgpool |
1 | #! /bin/sh |
1 | chown postgres:postgres failover_stream.sh &&chmod 777 failover_stream.sh |
启动
创建相关文件夹
1 | mkdir /var/log/pgpool |
启动
1 | # 启动 |
查看集群状态
1 | [root@172-16-200-15 ~]# psql -h vip -p 9999 -U postgres |
HA测试
模拟pgpool宕机
在master节点操作
1 | # 停止pgpool |
模拟PG主库宕机
在master操作
1 | # 停止postgresql |
恢复master节点
配置recovery.conf
1 | find / -name "recovery.conf.sample" |
然后在recovery.done中添加如下内容
1 | recovery_target_timeline = 'latest' |
启动
1 | systemctl start postgresql-10.service |
加入节点
1 | pcp_attach_node -d -U postgres -h vip -p 9898 -n 0 |
参考
1. http://www.pgpool.net/docs/latest/en/html/example-configs.html
2. http://www.pgpool.net/pgpool-web/contrib_docs/watchdog/en.html#more_switch
3. https://www.jianshu.com/p/ef183d0a9213
4. https://www.jianshu.com/p/41d857a5d743