文章插图
作者 | wzy0623
责编 | 屠敏
出品 | CSDN 博客
大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术 。本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数据复制 。当生产实例出现问题无法提供服务时,应用连接切换到其它实例,实现数据库服务持续可用 。从这个角度看,使用DRBD实现MySQL高可用的方式则完全不同,它与MySQL复制毫无关系,可以说是另辟蹊径 。
DRBD简介
DRBD的全称是Distributed Replicated Block Device,即分布式复制块设备,是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案 。DRBD是镜像块设备,是按数据位镜像成一样的数据块 。简单说DRBD是实现活动节点存储数据更动后自动复制到备用节点相应存储位置的软件,是一种数据块级别的物理复制 。
1. 工作原理
图1是官方文档里给出的DRBD工作栈模型,可以看到DRBD需要运行在各个节点上,且是运行在节点主机的内核中,所以DRBD是内核模块,在linux 2.6.33版本起开始整合进内核 。
文章插图
图1 DRBD 架构
图1中假设左节点为活动节点(primary),右节点为备用节点(secondary) 。左节点接收到数据发往内核的数据通路,DRBD在数据通路中注册钩子检查数据,当发现接收到的数据是发往到自己管理的存储位置,就复制另一份,一份存储到本机的DRBD存储设备,另一份就发给TCP/IP协议栈,通过网卡网络传输到另一节点主机的网上TCP/IP协议栈 。而另一节点运行的DRBD模块同样在数据通路上检查数据,当发现传输过来的数据时,就存储到DRBD存储设备对应的位置 。
如果左节点宕机,右节点可以在高可用集群中成为活动节点,把接收到的数据先存储到本地,当左节点恢复上线时,再把宕机后右节点变动的数据镜像到左节点 。镜像过程完成后还需要返回成功/失败的回应消息,这个回应消息可以在传输过程中的不同位置返回,如图上的A/B/C标识位置,可以分为三种复制模式:
- A:Async,异步:本地写成功后立即返回,数据放在发送buffer中,可能丢失,但传输性能好 。
- B:Semi sync,半同步:对方接收到数据后,但还没有落盘前返回 。
- C:Sync,同步:本地和对方写成功落盘确认后返回,数据可靠性高,生产系统一般都采用这种方式 。
DRBD需要在底层设备上构建出一个块设备 。对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在DRBD设备内创建文件系统 。DRBD所支持的底层设备类别包括:磁盘或者是磁盘的一个分区;soft raid 设备;LVM的逻辑卷;EVMS(Enterprise Volume Management System,企业卷管理系统)卷;或其它任何块设备 。
3. DRBD资源
DRBD资源定义DRBD管理的存储空间及相关信息,主要配置以下四个选项:
- 资源名称:可以是除了空白字符外的任意ACSII码字符 。
- DRBD设备:在双方节点上,此DRBD设备的设备文件,一般为/dev/drbdN,其主设备号147 。
- 磁盘:在双方节点上,各自提供的存储设备 。
- 网络配置:双方数据同步时所使用的网络属性 。
DRBD主要有以下三个配置工具:
- drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令 。
- drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用 。
- drbdmeta:管理META数据结构,平时很少直接用 。
RAID1也是实现不同存储设备间的数据镜像备份,不同的是RAID1各存储设备是连接一个RAID控制器接入到一台主机上的,而DRBD是通过网络实现不同节点主机存储设备数据的镜像备份 。
6. DRBD与共享存储
如果各节点访问同一个数据文件都是在同一个存储空间内的,就是说数据共享的就一份,则这个存储空间就共享存储 。而DRBD定义上就指出了“无共享”——不同节点存储设备空间是镜像,DRBD可以直接应用在主备模型的集群中,也可通过高可用软件如corosycn应用在双主模型集群中,不过这就需要DML/OCFS2/GFS2等分布式集群文件系统为双主读写的时候分配锁 。还有就是DRBD为NFS共享存储提供高可用镜像备份 。
DRBD安装配置
1. 实验环境
推荐阅读
- mysql入门级,20分钟搞定
- like,%,_ Mysql 使用通配符进行模糊查询
- 允许远程连接MySQL数据库教程
- VPC是什么,VPC能做什么,VPC详解
- 音频压缩编码的基本原理详解
- PING命令详解,端到端的延时测试工具
- MySQL 导出数据 导入数据
- 如何提高思维逻辑深度?深度详解提高个人的能力,提高职场竞争力
- 航线、航班号、航空公司 一文读懂航空
- 每秒570000的写入,MySQL如何实现?