如何使用MySQL与DRBD实现高可用性?

avatar
作者
猴君
阅读量:0
MySQL DRBD(Distributed Replicated Block Device)是一种高可用性解决方案,通过在多台服务器之间复制数据块设备实现数据的实时同步。

MySQL高可用之DRBD

如何使用MySQL与DRBD实现高可用性?

MySQL数据库在现代信息系统中扮演着至关重要的角色,其稳定性和数据安全性直接影响到整个系统的可靠性,为了实现MySQL的高可用性,分布式复制块设备(DRBD)是一种常见的解决方案,DRBD通过在服务器之间镜像块设备内容,确保数据的实时同步和高可用性,本文将详细介绍DRBD的工作原理、配置步骤及其在MySQL中的应用,并提供一些常见问题的解答。

DRBD简介

1. DRBD工作原理

DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案,DRBD是镜像块设备,按数据位镜像成一样的数据块,DRBD是实现活动节点存储数据更动后自动复制到备用节点相应存储位置的软件,以下是DRBD工作栈模型:

左节点为活动节点(Primary Node):接收到数据发往内核的数据通路,DRBD在数据通路中注册钩子检查数据,当发现接收到的数据是发往自己管理的存储位置时,就复制另一份,一份存储到本机的DRBD存储设备,另一份发给TCP/IP协议栈,通过网络传输到另一节点主机的TCP/IP协议栈。

右节点为备用节点(Secondary Node):运行的DRBD模块同样在数据通路上检查数据,当发现传输过来的数据时,就存储到DRBD存储设备对应的位置,如果左节点宕机,右节点可以在高可用集群中成为活动节点,把接收到的数据先存储到本地,当左节点恢复上线时,再把宕机后右节点变动的数据镜像到左节点。

2. DRBD支持的底层设备

DRBD需要构建在底层设备之上,然后构建出一个块设备出来,对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在DRBD设备内创建文件系统,DRBD所支持的底层设备有这些类别:

磁盘,或者是磁盘的某一个分区;

soft raid 设备;

LVM的逻辑卷;

EVMS(Enterprise Volume Management System,企业卷管理系统)的卷;

其他任何的块设备。

3. DRBD资源

DRBD资源为DRBD管理的存储空间及相关信息,主要配置四个选项:

资源名称:可以是除了空白字符外的任意ASCII码字符;

DRBD设备:在双方节点上,此DRBD设备的设备文件;一般为/dev/drbdN,其主设备号147;

磁盘:在双方节点上,各自提供的存储设备;

网络配置:双方数据同步时所使用的网络属性。

4. DRBD配置工具

DRBD主要有以下三个配置工具:

drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令;

drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用;

drbdmeta:管理META数据结构,平时很少直接用。

5. DRBD与RAID1区别

RAID1也是实现不同存储设备间的数据镜像备份的,不同的是RAID1各存储设备是连接一个RAID控制器接入到一台主机上的,而DRBD是通过网络实现不同节点主机存储设备数据的镜像备份。

6. DRBD与集群共享存储

如果各节点访问同一个数据文件都是在同一个存储空间内的,就是说数据共享的就一份,而这个存储空间就共享存储,而DRBD定义上就指出了"无共享"不同节点存储设备空间是镜像,DRBD可以直接应用在主备模型的集群中,也可通过高可用软件如corosycn应用在双主模型集群中,不过这就需要DML/OCFS2/GFS2分布式集群文件系统为双主读写的时候分配锁;还有就是DRBD为NFS共享存储提供高可用镜像备份,等等…

DRBD安装配置

1. 实验环境

IP与主机名:192.168.18.241 node1 192.168.18.242 node2

软件环境:RHEL 5.8 64bit DRBD 8.3.15 MySQL 5.6.14

DRBD:磁盘分区:/dev/sda5 1G DRBD设备:/dev/drbd0 DRBD资源:mydrbd mount点:/drbd

2. 配置前准备

在安装配置DRBD前,需要做一些准备工作,以下步骤需要在两个节点都执行:

设置静态IP:编辑网卡配置文件,将BOOTPROTO设置为static,如node1的内容如下:[root@node1~]# cat /etc/sysconfig/networkscripts/ifcfgens32 # Generated by dracut initrd NAME="ens32" DEVICE="ens32" ONBOOT=yes NETBOOT=yes UUID="adb624662361405eada9b48fe7c09546" IPV6INIT=yes BOOTPROMPT="off" IPADDR=192.168.18.241 PREFIXROUTE="" GATEWAY=192.168.18.1 DNS1=192.168.18.1 IMEI= IPADDR1= IPADDR2= IP路由= IPADDR0= IPADDR3= IPADDR4= IPADDR5= IPADDR6= IPADDR7= IPADDR8= IPADDR9= IPADDR10= IPADDR11= IPADDR12= IPADDR13= IPADDR14= IPADDR15= IPADDR16= IPADDR17= IPADDR18= IPADDR19= IPADDR20= IPADDR21= IPADDR22= IPADDR23= IPADDR24= IPADDR25= IPADDR26= IPADDR27= IPADDR28= IPADDR29= IPADDR30= IPADDR31= IPADDR_START=1 IPADDR_END=32

关闭防火墙:使用以下命令临时关闭防火墙:[root@node1 ~]# service iptables stop [root@node1 ~]# chkconfig iptables off

3. 创建磁盘分区

分别在两节点主机上创建/dev/sda5的磁盘分区,注意这并不需要格式化,下面配置好DRBD并启动后,再格式化,因为文件系统的挂载只能在Primary节点进行,也只有在设置了主节点后才能对drbd设备进行格式化,这样就会连格式化后的全部信息都镜像到另一个节点,创建过程如下:[root@node1 ~]# fdisk /dev/sda [root@node1 ~]# partprobe /dev/sda [root@node1 ~]# fdisk –l

4. 下载安装DRBD

由于这里用到的是RHEL 5.8 64bit系统,使用的内核为2.6.18308.el5,上面说到2.6.33版本起才开始整合进内核,所以系统中没有DRBD,但可以通过RPM包安装整合到内核中,注意内核版本与DRBD版本的兼容,可以到网址:http://vault.centos.org/5.8/extras/x86_64/RPMS/,下载能完全兼容centos5的比较新rpm包,下载drbd838.3.152.el5.centos.x86_64.rpm和kmoddrbd838.3.153.el5.centos.x86_64.rpm,前者是用户空间的管理配置工具,后者是DRBD内核核心模块(类似ipvsadm与ipvs),分别放到两节点主机上执行安装,过程如下:[root@node1 ~]# yum nogpgcheck localinstall *drbd*.rpm

5. 配置DRBD

执行rpm ql drbd83可以看DRBD安装的文件信息,etc/drbd.conf是主配置文件,主要用来把全局配置文件和各资源配置文件包含进来的;而其它模块配置文件在/etc/drbd.d/下,包括/etc/drbd.d/global_common.conf全局配置文件,下面将会配置的资源配置文件也会放到这里。

配置/etc/drbd.conf文件:/etc/drbd.conf是主配置文件,主要用来把全局配置文件和各资源配置文件包含进来的,但安装后文件中没有配置任何东西,不过提示了一样例文件,直接复制样例文件使用,即可,里面配置了包含关系,如下:[root@node1 ~]# cp /usr/share/doc/drbd83/*.res /etc/drbd.d/ [root@node1 ~]# cat > /etc/drbd.conf << EOF include "/etc/drbd.d/global_common.conf"; include "/etc/drbd.d/*.res"; EOF

配置资源文件:编辑刚复制的样例文件,如mydrbd.res,修改如下:resource mydrbd { protocol C; startup { wfctimeout 15; degrwfctimeout 60; } net { cramhmacalg sha1; sharedsecret "mysecret"; } on node1 { disk /dev/sda5; address 192.168.18.241:7788; metadisk internal; } on node2 { disk /dev/sda5; address 192.168.18.242:7788; metadisk internal; } }

初始化同步:在两个节点上执行如下命令进行初始化同步:[root@node1 ~]# drbdadm createmd mydrbd [root@node1 ~]# drbdadm up mydrbd primary force [root@node2 ~]# drbdadm up mydrbd secondary force [root@node1 ~]# drbdadm overwritedataofpeer primary 此时会看到两个节点开始同步数据,可以使用如下命令查看同步状态:[root@node1 ~]# cat /proc/drbd | grep mydrbd

6. 测试MySQL数据同步

在Primary节点上安装MySQL,并将数据目录指向DRBD mount的分区,启动MySQL服务后,在Primary节点上创建一些数据库和表,然后插入一些数据,同步完成后,到Secondary节点上查看是否也同步了这些数据,如果一切正常,说明DRBD配置成功。

三、Heartbeat+DRBD+MySQL高可用方案

1. 方案简介

本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证,默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回原来主mysql提供服务。

2. 配置步骤

编辑配置文件ha.cf:编辑Heartbeat的主配置文件ha.cf,配置心跳网络和节点信息。

编辑认证文件authkeys:生成SSH密钥对,并将公钥添加到各个节点的~/.ssh/authorized_keys文件中。

编辑资源配置文件haresources:配置资源组,包括IP地址、虚拟IP等。

建立插件软连接:在/usr/lib/heartbeat目录下建立软连接。

创建脚本文件:编写脚本文件,用于启动和停止Heartbeat服务。

启动Heartbeat:使用脚本文件启动Heartbeat服务。

3. 测试

停掉node1上的mysqld:查看服务是否切换到node2。

停掉node2的heartbeat:查看服务是否切换回node1。

重启node1:查看服务是否切换到node2。

测试脑裂:模拟网络异常,观察系统是否能正确处理脑裂情况。

FAQs(相关问题FAQ)

问题1:DRBD的主要优缺点是什么?

答:优点

没有单点故障的风险暴露;

通过Infiniband进行高效传输,能够有效处理高并发;

常用于NFS服务器,并结合LinuxHA项目如Pacemaker、Heartbeat等使用。

缺点

备机无法提供读服务;

不能替代备份;

故障转移不即时;

对MyISAM表支持不佳;

增加写操作负担。

问题2:如何避免DRBD脑裂问题?

答:为了避免脑裂问题,可以采取以下措施:

确保DRBD与LinuxHA版本匹配;

使用专用网卡;

网络隔离;

监控报警;

注意不设置自动启动、重启时候手动启动,工作中基本不重启DRBD、更不会重启服务器。


    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!