如何轻松搭建PostgreSQL高可用

 

在金融、电信等领域,数据库通常要做高可用部署。本文讨论了postgresql的双机热备部署方案,通过部署脚本轻松完成pg的高可用搭建。...

需求
大家好,我是360服务端基础架构组的覃冠日。今天的topic和数据库高可用有关。

在金融、电信等领域,用户交易数据不能因为电缆被挖了一铲而丢失,服务不能因此中断。在这类系统中,数据库的高可用通常要达到99.9%以上。99.9%的高可用性是有多高的要求呢?换算下来,也就是一年内发生故障不能提供服务的时间要小于(1-99.9%)*365*24=8.76小时。这要求我们在部署系统时,要提供一套高可用方案,在系统出现故障时,能保证持续提供服务或者尽快恢复服务,同时每年的故障时间要低于8个多小时。什么样的高可用方案才能达到这类标准呢?对于数据库,采用双机热备是其中一个常见的、有效的高可用方案。本文主要讨论PostgreSQL的双机热备高可用解决方案。
双机热备
双机热备,简单来说,指的是采用两台服务器实现的一种高可用方案,其中一台为主(Ative),对外提供业务服务,另一台为备(Standby),处于备用状态。这两台服务器只有其中一台对外提供服务,通常需要虚IP(virtual IP,VIP)来对外提供服务地址。双机热备方案中,需要定时检测主、备服务器是否正常。当检测到主服务器异常时,将虚IP漂移到备机,让备机对外提供服务。实现异常检测和IP漂移技术,通常可以使用keepalived、heartbeat或pacemaker等组件。由于本文中讨论的PostgreSQL还涉及到主-备之间的数据同步问题,本文采用Pacemaker来实现PostgreSQL的双机热备。
Pacemaker
Pacemaker是一个开源的集群资源管理组件,提供成熟的高可用解决方案(http://clusterlabs.org/wiki/Pacemaker)。Pacemakerk可以监测并恢复节点和服务级别的故障,支持大型或小型的集群,自动同步节点的配置文件,当发生脑裂时,支持使用stonith来保证一致性。Pacemaker 对你的环境没有特定的要求,这使得它支持任何的冗余配置,包括 Active/Active, Active/Passive,N+1, N+M, N-to-1 and N-to-N 。

1
Active-Passive模式。

使用 Pacemaker和DRBD 的双节点主备方案作为一种经济的解决方案被很多高可用环境所采用。如下图:
2


共享失效备援模式

Pacemaker可以让多个主备模式的集群集成起来并共享一个备用节点,从而大幅度的减少硬件成本。如下图:
3


N to N模式

当有共享存储设备是,每个节点都成为潜在的备援节点。 Pacemaker甚至可以在不同的节点上跑相同的服务来负载均衡。
在了解了Pacemaker的基础概念后,让我们回头看看我们的需求:需要对PostgreSQL实现双机热备,两台服务器之间通过VIP对外提供服务。开始时,VIP落在master主机上,master主机对外提供读写服务,slave主机定时完成数据同步。当master主机故障时,VIP自动漂移到slave主机上,这时slave主机的身份切换成为master。当我们修复故障后,需要恢复原来的双机热备状态。
搭建PG高可用
可能有很多朋友已经在使用pacemaker了,配置pacemaker需要大量手工操作, 是一个非常容易出错的过程。我在实践postgresql高可用部署时,遇到了不少坑,走了很多弯路,为了让后来者避免这些问路,我在github上,提供了一个postgresql高可用的部署脚本(https://github.com/qinguanri/pg-ha),可以简单实现基于pacemaker的pg高可用部署。下面我们来看如何利用这些脚本快速搭建postgresql双机热备:

环境准备
  • 两台CentOS 7 主机,分别为Master和Slave。
  • 防火墙使用firewalld,打开如下端口:  tcp端口:22 5432 55284 2224 21 25 60403 udp端口: 48294 5405 53055 323 60801 27103 39458 68 35525 61447 5859 38150 36135 54705 43639 34979 42772
  • 两个未被占用的虚拟IP,要求虚IP和主机在同一子网段。
  • PostgreSQL使用5432端口,IP使用VIP_PG_MASTER对外提供服务
  • 将所有安装脚本及压缩包上传到master/slave主机的/root目录下解压缩 tar xvf pg_ha_install.tar,最后目录结构如下:


[root@localhost pg_ha_install]# pwd
/root/pg_ha_install
[root@localhost pg_ha_install]# tree
.
├── auto_change.sh
├── check_pg.sh
├── come_over.sh
├── config.sh
├── create_repo.sh
├── ha.conf
├── install_pacemaker.sh
├── install_pg_master.sh
├── install_pg_slave.sh
├── open_port.sh
├── readme.md
├── yum_pacemaker.tar
└── yum.tar

0 directories, 13 files



安装步骤

(1) 在master和slave主机上都要执行。检查安装环境、配置master、salve的IP

cp -r pg_ha_install /root

cd /root/pg_ha_install

./config.sh MASTER_IP=1.2.3.4 SLAVE_IP=1.2.3.5 VIP_PG_MASTER=1.2.3.6 VIP_PG_SLAVE=1.2.3.7 NET=1.2.0.0/16 PG_DIR=/data/postgresql



说明:MASTER_IP/SLAVE_IP分别为pg_master/pg_slave主机的真实IP. VIP_PG_MASTER/VIP_PG_SLAVE分别为pg_master/pg_slave的虚拟IP,这些虚拟IP需要确保是同一网段,未被占用的IP。NET为MSATER_IP/SLAVE_IP所在的子网。PG_DIR为数据库的启动路径。

(2) 在master和slave主机上都要执行。打开所需端口

./open_port.sh



(3) 在master和slave主机上都要执行。创建repo离线安装包

./create_repo.sh



(4) 在master和slave主机上都要执行。安装pacemaker和pg

./install_pacemaker.sh



(5) 在master主机上执行。初始化pg master。注意,必须先在master主机上执行pg初始化,再到slave主机上执行pg初始化。

./install_pg_master.sh



(6) 在salve主机上执行。初始化pg salve。需要输入postgres密码:postgres

./install_pg_slave.sh



(7) 在master主机上执行。配置主备自动切换

./auto_change.sh



二、检验安装结果

(1) 在master或slave主机上执行。大约需要等待30秒后,数据库启动完成,执行以下脚本检查安装是否正确。

./check_pg.sh



三、模拟master故障、检验切换效果

(1) 查看数据库主从同步状态

pcs status

crm_mon -Afr -1



(2) 杀掉master主机上的postgres进程,然后查看数据库主从同步状态

killall postgres

pcs status

crm_mon -Afr -1



四、修复故障,恢复双机热备

./come_over.sh



通过运行以上脚本,可以轻松快捷完成高可用的搭建、结果检测、故障恢复。更加详细的信息,可以访问

http://blog.csdn.net/qguanri/article/details/51151974


    关注 OpenRestyFans


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册