目录
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所示。
从该架构图看,两台数据库服务器共享一块或多块从存储上划出的磁盘。磁盘上格式化了文件系统,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:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,数据可能丢失。
20.3 WAL日志同步或流复制同步的方案
20.3.1 持续复制归档的standby的方法
在PostgreSQL9.X之前的版本中,不支持流复制时只能通过拷贝归档在主备库之间实现同步。不过相对于流复制,手工复制归档文件同步可以做到更灵活,若需要备库落后主库一段时间来防止人工误删除等逻辑错误,可以写一个脚本,使其每过一段时间才把主库上的归档拷贝到备库上,让备库应用这些日志,这样就可以保证备库一定是落后主库一定时间的。在落后的这段时间内,如果主库被误删除了数据,还可以在备库上找回相应的数据。
20.3.2 异步流复制的方案
当使用异步流复制的方案时,进行高可用切换会丢失部分数据。这个方案可以用于切换时容忍丢失少量数据的场景中。这个方案的架构图如图20-4所示。
20.3.3 基于同步流复制方案
当使用同步流复制时,如果主库与从库之间的网络中断或从库出现问题,主库也会被hang 住,而此时只有一个主库和一个从库,那么是无法做高可用方案的。PostgreSQL的解决方案是使用两个从库,只要有一个从库是正常的,主库就不会 hang 住。这个方案的架构如图20-5所示。
20.4 基于触发器的同步方案
20.4.1 方案的特点
前面讲解了基于共享存储和WAL日志同步的高可用方案,这两种方案都是对整个数据库实例进行同步的,而本节讲解的基于触发器的同步方案,则可以做到只同步一部分数据,它更为灵活,但也有以下几个缺点:
- 对数据库的性能影响较大。
- 不能同步DDL。
- 用户和权限的变更也不能同步。
20.4.2 基于触发器方案的同步软件介绍
基本此方案做的同步软件较多,常见的开源软件有:
- slony
- bucardo
- skype公司开发的 longdist