目录

20 高可用性方案设计(二)

20.2 基于共享存储的高可用方案

20.2.1 SAN存储的方案

20.2.2 DRBD的方案

20.3 WAL日志同步或流复制同步的方案

20.3.1 持续复制归档的standby的方法

20.3.2 异步流复制的方案

20.3.3 基于同步流复制方案

20.4 基于触发器的同步方案

20.4.1 方案的特点

20.4.2 基于触发器方案的同步软件介绍


20 高可用性方案设计(二)

20.2 基于共享存储的高可用方案

20.2.1 SAN存储的方案

        SAN是“Storage Area Network”的缩写,即“存储区域网络”。与TCP/IP网络不同,“存储区域网络”是专为存储系统而设计的,它使用FC协议,而TCP/IP网络是通用功能的网络,支持各种各样功能的网络。SAN网络的架构与以太网网络类似,通常的架构图如图20-1所示。
        在图20-1中,存储设备可以是多台,存储设备和需要使用存储的服务器之间通过光纤线和 SANswitch连接,SAN Switch与以太网中的交换机类似。服务器上也插有类似以太网网卡的HBA卡。
        使用SAN共享存储的 PostgreSQL高可用方案的架构图 如图20-2所示。

keepalived高可用方案 pg高可用方案_keepalived高可用方案


        从该架构图看,两台数据库服务器共享一块或多块从存储上划出的磁盘。磁盘上格式化了文件系统,PostgreSQL的数据文件就存在此文件系统上。在主/备库上都可以看到此共享磁盘,在主库上此磁盘上的文件系统是挂起来的,备库上此文件系统没有挂起。当主库发生故障时,由第三方的高可用软件把文件系统在备库上挂起,然后再在备库上启动数据库即完成了切换。

        实际上进行高可用切换时,并不像上面所说的这么简单,当主库发生故障时,可能只是主库与外部的网络断开了,它与存储设备的连接还是好的,同时文件系统还挂着,如果此时把文件系统在另一台机器上挂起来,像Ext3、Ext4、xfs等文件是不能同时在两台机器上挂起来的,同时挂起时,两台机器都会对文件系统进行写操作,这就会导致文件系统的损坏。为了避免这种情况,最常用的方法是主库没有收到心跳时就自动重启(相当于“自杀”),或者备库在挂文件系统之前通过其他办法,如向服务器的IPMI接口(IPMI是智能平台管理接口的简称,是一种开放标准的硬件管理接口)发送重启主机的命令,让主库重启可阻止主库对文件系统的写操作。另一种方法是使用存储提供的“reserve_lock”功能,备机在挂起文件系统之前,通知存储,让存储不允许主库写此磁盘以避免文件系统的损坏。

20.2.2 DRBD的方案

        SAN存储比较昂贵,使用该方案的成本较高。还有一种类似共享存储的廉价方案,即使用DRBD仿真共享存储的方案。
        DRBD是“Distributed Replicated Block Device”的缩写,DRBD是一个开源软件,它的大部分功能都是在Linux内核中实现的,目前大多数Linux发行版本中都已带有DRBD软件。DRBD是通过用软件实现的、无共享的、服务器之间块设备内容的复制软件。
DRBD有以下两种模式。

  • 单主模式:只有主设备可以写,备设备不可以写。
  • 双主模式:两个设备都可以读写。

数据同步的方式有以下三种。

  • 协议A:异步复制协议,本地写成功后立即返回,数据放在发送buffer中,可能丢失。
  • 协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
  • 协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,数据可能丢失。

keepalived高可用方案 pg高可用方案_网络_02

 

20.3 WAL日志同步或流复制同步的方案

20.3.1 持续复制归档的standby的方法

        在PostgreSQL9.X之前的版本中,不支持流复制时只能通过拷贝归档在主备库之间实现同步。不过相对于流复制,手工复制归档文件同步可以做到更灵活,若需要备库落后主库一段时间来防止人工误删除等逻辑错误,可以写一个脚本,使其每过一段时间才把主库上的归档拷贝到备库上,让备库应用这些日志,这样就可以保证备库一定是落后主库一定时间的。在落后的这段时间内,如果主库被误删除了数据,还可以在备库上找回相应的数据。

20.3.2 异步流复制的方案

        当使用异步流复制的方案时,进行高可用切换会丢失部分数据。这个方案可以用于切换时容忍丢失少量数据的场景中。这个方案的架构图如图20-4所示。

20.3.3 基于同步流复制方案

        当使用同步流复制时,如果主库与从库之间的网络中断或从库出现问题,主库也会被hang 住,而此时只有一个主库和一个从库,那么是无法做高可用方案的。PostgreSQL的解决方案是使用两个从库,只要有一个从库是正常的,主库就不会 hang 住。这个方案的架构如图20-5所示。

keepalived高可用方案 pg高可用方案_文件系统_03

20.4 基于触发器的同步方案

20.4.1 方案的特点

        前面讲解了基于共享存储和WAL日志同步的高可用方案,这两种方案都是对整个数据库实例进行同步的,而本节讲解的基于触发器的同步方案,则可以做到只同步一部分数据,它更为灵活,但也有以下几个缺点:

  • 对数据库的性能影响较大。
  • 不能同步DDL。
  • 用户和权限的变更也不能同步。

20.4.2 基于触发器方案的同步软件介绍

基本此方案做的同步软件较多,常见的开源软件有:

  • slony
  • bucardo
  • skype公司开发的 longdist