本文建立在数据库主从复制(Master-Slave)的基础上。

Master:10.19.100.2 port:5432 数据库版本PostgreSQL-10.3

Slave:10.19.100.3 port:5432 数据库版本PostgreSQL-10.3

pgpool-II使用虚拟IP:10.19.100.4 软件版本 pgpool-II 3.7.2

一 pgpool中间件及HA简介

在没有中间件的情况下,在Master数据库宕机,需要手工提升Standby为Master,还需要应用主动把连接切换到新Master库上才能保证整个系统能继续对外提供服务。为了实现自动切换,增加系统可靠性,这里可以考虑pgpool中间件。pgpool可以检测数据库集群中的Master节点是否存活,在Master节点失效时可以自动提升Standby库,并且pgpool本身可以做高可用部署,搭建多个pgpool,使用vip在多个pgpool上漂移。

pgpool-II 3.7对原来旧版本的几个影响用户使用的问题进行了fix,增加了新的pgpool主从模式和参数设置,通过pgpool主动切换主备后,备库如果没有问题,也可以直接加入集群了(实测pg 9.6.8也可用)。而之前版本的pgpool,脱离集群的节点无法重新加入进去。

注意1:如果需要输出pgpool日志,需要设置服务器的selinux为disable。且做以下修改

# vi /etc/rsyslog.conf
local0.*    /PostgreSQL/pgpool/pgpool.log
# /etc/init.d/rsyslog restart

注意2:通过pgpool登录数据库目前仅支持数据库白名单pg_hba.conf中的password验证方式。

二 pgpool安装

2.1 编译安装软

# tar zxvf pgpool-II-3.7.2.tar.gz
# cd pgpool-II-3.7.2
# ./configure --prefix=/PostgreSQL/pgpool
# make
# make install

2.2 配置pgpool管理用户和密码

Pgpool管理员用户密码位于其配置文件pcp.conf中,手工编辑即可。其中密码需要使用pg_md5加密。

# /PostgreSQL/pgpool/bin/pg_md5 123456
e10adc3949ba59abbe56e057f20f883e# vi /PostgreSQL/pgpool/etc/pcp.conf
postgres:e10adc3949ba59abbe56e057f20f883e

2.3 创建Master/Standby切换脚本

# vi /PostgreSQL/pgpool/failover.sh#! /bin/sh
new_master=$1
pathdir=$2
/usr/bin/ssh -T $new_master /PostgreSQL/10/bin/pg_ctl promote -D $pathdir
exit 0;

切换脚本权限

# chmod 755 /PostgreSQL/pgpool/failover.sh

2.4 软件权限

# chown -r postgres:postgres /PostgreSQL/pgpool

三 配置pgpool

3.1配置master节点的pgpool

pgpool没有必要和数据库部署在同一台服务器上,我这里为了配置方便pgpool master节点和master库放在同一台服务器上。

在Master节点上安装pgpool

安装方法见第一节。

修改配置文件pgpool.conf

Pgpool的etc目录下自带多种配置文件范例,我这里使用最基础的版本pgpool.conf.sample进行修改,仅为数据库高可用考虑,两套pgpool间为主从关系。如果需要负载均衡等其他功能,请详细阅读pgpool.conf.sample内的说明后进行配置。

$ cd /PostgreSQL/pgpool/etc
$ cp pgpool.conf.sample pgpool.conf
$ vi pgpool.conf

这里单独列出要修改的内容:

listen_addresses = '*'
backend_hostname0 = '10.19.100.2'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/PostgreSQL/10/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = '10.19.100.3'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/PostgreSQL/10/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
log_destination = 'syslog'
pid_file_name = '/PostgreSQL/pgpool/pgpool.pid'
logdir = '/PostgreSQL/pgpool'
master_slave_mode = on
sr_check_user = 'postgres'
sr_check_password = '123456'
sr_check_database = 'postgres'
health_check_user = 'postgres'
health_check_password = '123456'
health_check_database = 'postgres'
failover_command = '/PostgreSQL/pgpool/failover.sh %H %R'
use_watchdog = on
wd_hostname = '10.19.100.2'
delegate_IP = '10.19.100.4'
heartbeat_destination0 = '10.19.100.3'
wd_lifecheck_dbname = 'postgres'
wd_lifecheck_user = 'postgres'
wd_lifecheck_password = '123456'
other_pgpool_hostname0 = '10.19.100.3'
other_pgpool_port0 = 9999
other_wd_port0 = 9000

ifconfig权限

如果需要非root用户启动Pgpool时能启动虚拟IP,需要配置该权限

$ su -
Password:# chmod u+s /sbin/ip

ssh信任

$ su - postgres
$ ssh-keygen
$ ssh-copy-id postgres@10.19.100.3
$ ssh-copy-id postgres@10.19.100.2

3.2配置Standby节点的pgpool

在Standby节点上安装pgpool

安装方法见第一节。

修改配置文件pgpool.conf

修改内容和Master节点基本相同,这里仅列出不同的部分

wd_hostname = '10.19.100.3'
heartbeat_destination0 = '10.19.100.2'
other_pgpool_hostname0 = '10.19.100.2'

ifconfig权限

如果需要非root用户启动pgpool时能启动虚拟IP,需要配置该权限

$ su -
Password:# chmod u+s /sbin/ip

ssh信任

$ su - postgres
$ ssh-keygen
$ ssh-copy-id postgres@10.19.100.2
$ ssh-copy-id postgres@10.19.100.3

四 启动pgpool

启动Master节点的pgpool

$ /PostgreSQL/pgpool/bin/pgpool -f /PostgreSQL/pgpool/etc/pgpool.conf

启动后可以观察到虚拟IP生效

$ ifconfig eth0:0eth0:0    Link encap:Ethernet  HWaddr 08:00:27:56:B5:91 inet addr:10.19.100.4  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

启动Standby节点的pgpool

$ /PostgreSQL/pgpool/bin/pgpool -f /PostgreSQL/pgpool/etc/pgpool.conf

五 使用pgpool连接数据库

通过pgpool的虚拟IP和端口即可连接数据库,整个过程对用户透明,不需要更改任何连接工具:

$ psql -U postgres -d postgres -h 10.19.100.2 -p 9999
Password for user postgres:psql.bin (10.3)
Type "help" for help.postgres=#

可以通过命令看到数据库各个节点状态

postgres=# show pool_nodes;node_id |  hostname   | port | status | lb_weight |  role   | select_cnt | load_balance_node | replic
ation_delay---------+-------------+------+--------+-----------+---------+------------+-------------------+-------
------------0       | 10.19.100.2 | 5432 | up     | 0.500000  | primary | 0          |false             | 01       | 10.19.100.3 | 5432 | up     | 0.500000  | standby | 0          | true             | 0(2 rows)

六 pgpool切换

这里把10.19.100.2拔电,模拟Master节点宕机,数据库Master节点和pgpool Master节点全部失去的情况。

Master节点下电后在Standby节点服务器上可以看到:

虚拟IP发生漂移

$ ifconfig eth0:0eth0:0    Link encap:Ethernet  HWaddr 08:00:27:56:B5:91 inet addr:10.19.100.4  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Standby库变为Master库

postgres=# show pool_nodes;node_id |  hostname   | port | status | lb_weight |  role   | select_cnt | load_balance_node | replic
ation_delay---------+-------------+------+--------+-----------+---------+------------+-------------------+-------
------------0       | 10.19.100.2 | 5432 | down   | 0.500000  | standby| 0          | true              | 01       | 10.19.100.3 | 5432 | up     | 0.500000  | primary | 0          | false             | 0(2 rows)

我这里因为只是模拟故障,因此重启10.19.100.2,将主库的recovery.done文件重命名为recovery.conf后,重新启动主库即可重新恢复流复制。流复制恢复后使用下面的命令把节点重新加入pgpool集群。

$ /PostgreSQL/pgpool/bin/pcp_attach_node -h 10.19.100.4 -p 9898 -U postgres -n 1
Password:pcp_attach_node -- Command Successful

附: 主从节点上的pgpool详细配置文件

转载于:https://www.cnblogs.com/aegis1019/p/9005478.html

通过pgpool-II实现PostgreSQL数据库服务高可用相关推荐

  1. PGPool-II 4.2.1+PostgreSQL 13高可用

    PGPool-II 4.2.1+PostgreSQL 13高可用 说明 按照示例文档过程一步步操作,要注意一些权限配置和用户密码.官方加密用了scram-sha-256,此文档全用md5.在ECS上部 ...

  2. 阿里云推PostgreSQL 10 高可用版

    2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL.SQL Server 和PostgreSQL关系型数据库的云计算服务商. 用户在云上 ...

  3. 重磅发布!阿里云推PostgreSQL 10 高可用版

    2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL.SQL Server 和PostgreSQL关系型数据库的云计算服务商. 用户在云上 ...

  4. PostgreSQL 10 高可用 本地SSD盘 版本发布

    信息摘要: 相比原 9.4 版本有多项功能更新,但由于架构限制当前不支持 PostgreSQL 9.4 高可用版 及 10 基础版 直接升级 适用客户: 所有 PostgreSQL 数据库用户 版本/ ...

  5. PostgreSQL的高可用与数据复制方案

    2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL是开源的,有多种高可用与数据复制方案,这里做个简单的比较. 一.高可用性.负载均衡.复制方案 共享磁盘失效 ...

  6. postgresql高可用_Postgresql高可用实现方案

    本文主要讲解一种Postgresql高可用实现方案.由于项目需要,我们需要在短时间实现底层Postgresql DB的高可用,而网络上大多数的解决方案比较复杂,需要深入了解Postgresql. 背景 ...

  7. 使用pgpool-ii 搭建postgresql 高可用、负载均衡架构

    pgpool有很多功能,其中最重要的我觉得是如下几个:提供连接池(负载均衡模式),复制模式(能通过pgpool分发sql,因此是基于sql语句的分发复制),主备模式(依赖其他的复制,如snoly和流复 ...

  8. postgresql 集群_谁说postgresql 没有靠谱的高可用(2)

    接上期说,(没看上期的,还是先看上期,要不从这看是看不懂的) 那到底这个手动转换的过程是如何的,这个要搞一搞清楚 repmgr -f /etc/repmgr.conf standby switchov ...

  9. pg高可用之repmgr(一)

    文章目录 一.repmgr初识 1.1 repmgr基本概念 1.2 PostgreSQL + repmgr 基本架构 1.3 repmgr常用命令 二 PostgreSQL + repmgr高可用集 ...

最新文章

  1. 每年节省170万美元的文档预览费用,借助机器学习的DropBox有多强​?
  2. 展望:模型驱动的深度学习
  3. php如果能编译就完美了,centos7 完美编译PHP7 php-7.2.10.tar.gz
  4. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识
  5. 分区操作后索引的状态
  6. 你真的懂语音特征吗?
  7. stl非变易算法(一)
  8. AIS 2021顶级论文报告会论文征集与听众报名通知
  9. 阻止滑动事件_重温DOM事件流,捕获、冒泡、useCapture、passive
  10. 实验二十三——RPL协议仿真实验
  11. 新南威尔士 计算机硕士,澳洲新南威尔士大学计算机专业硕士课程介绍
  12. 如何通过反向代理实现伪装IP?
  13. Android网易云信无脑接入(IM+音视频)【网易云信】
  14. 2021 年 15 款适用于 PC 和 Mac 的最佳 Android 模拟器
  15. Ctf新生赛misc“easy_osint”
  16. 小波变换 完美通俗解读【转载
  17. 在linux中安装gdb遇到的问题
  18. 全国计算机等级考试python教材.pdf_全国计算机等级考试二级教程Python语言程序设计(2018年版).PDF...
  19. HTTPS网站优化问题
  20. Vue过滤器的介绍和使用

热门文章

  1. ubuntu16.04安装FastDFS-5.08
  2. Django 模板标签 换行导致异常的处理 linebreaksbr
  3. python ModuleNotFoundError: No module named ‘requests‘ 的 解决方案
  4. 让读者快速了解RocketMQ消息中间件需要解决哪些问题
  5. Google 已将“xxxx”标记为恶意扩展程序并阻止安装,解决方案
  6. 没有UITableViewController的UIRefreshControl
  7. Markdown:继续编号列表
  8. win11u盘安装报错怎么办 windows11u盘安装报错的解决方法
  9. bloom-generate 打包 ros 版本 noetic 的包及报 /usr/bin/ld: 找不到 -lpthreads与undefined reference pthread_create
  10. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商