1.1.8 高可用块设备DRBD
DRBD(Distributed Replicated Block Device)是一种块设备,可以用于高可用(HA)之中。它的功能类似于一个网络RAID-1。当你将数据写入本地文件系统时,数据还将会被发送到网络中的另一台主机上,并以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备用节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还保留着一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替一个共享盘阵。因为数据同时存储于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据就可以继续服务了。
DRBD的工作原理如图1-2所示。
图1-2 DRBD工作原理图
DRBD支持3种不同的复制协议,允许使用3种程度的复制同步。
协议A:异步复制协议。只要主节点完成本地写操作就认为写操作完成,并且需要复制的数据包会被存放到本地TCP发送缓存中。当发生fail-over故障时,在standby节点的数据被认为仍是稳固的,然而,在崩溃发生的时间点上很多最新的更新操作会丢失。
协议B:内存同步(半同步,semi-synchronous)复制协议。如果本地磁盘的写已经完成,并且复制数据包已经到达对应的从节点,此时主节点才会认为磁盘写已经完成。通常情况下,发生fail-over不会导致数据丢失(因为后备系统内存中已经获得了数据更新)。然而,如果所有节点同时出现电源故障,则主节点数据存储会发生不可逆的错误结果,主节点上多数最新写入的数据可能会丢失。
协议C:同步复制协议。只有在本地和远程磁盘都确定写入已完成时,主节点才会认为写入完成。这样可确保发生单点故障时不会导致任何数据丢失。如果发生数据丢失的现象,那也只会在所有节点同时存在存储错误时才会发生。
在DRBD设置中,最常用的复制协议是协议C。选择哪种复制协议受部署的两个因素影响:保护要求和延迟。为了保证数据的一致性和可靠性,建议选择协议C。
另外,我们在线上环境中主要采用DRBD+Heartbeat+NFS组成高可用的文件系统,此项目上线多年没有发生过丢失数据的现象;另外,DRBD已被MySQL官方写入文档手册,作为推荐的高可用方案之一。