MySQL+Heartbeat+DRBD构建高可用MySQL环境

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)

DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。 

DBRD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

                                                           ------《百度百科》

实验环境:

主 192.168.43.128 drbd-M   CentOS 5.4 64bit

从 192.168.43.129 drbd-S    CentOS5.4 64bit

准备工作:

Vim /etc/hosts

192.168.43.129 drbd-M

192.168.43.130 drbd-S

修改hostname名,

主:hostname drbd-M

从:hostname drbd-S

确保与uname -n输出一致。PS:很重要,后面的drbd和heartbeat都要依赖于主机名来通信。

搭建环境,采用yum安装:

  
  
  
  
  1. # yum install -y drbd83 kmod-drbd83 

  2. # yum search heartbeat* 

  3. heartbeat所需的安装包主要有以下几个: 

  4. heartbeat-devel-2.1.3-3.el5.centos 

  5. heartbeat-stonith-2.1.3-3.el5.centos 

  6. heartbeat-gui-2.1.3-3.el5.centos 

  7. heartbeat-ldirectord-2.1.3-3.el5.centos 

  8. heartbeat-pils-2.1.3-3.el5.centos 

  9. heartbeat-2.1.3-3.el5.centos 

一 DRBD的安装使用

加载安装drbd模块:

  
  
  
  
  1. # modprobe drbd 

检查是否加载成功:

  
  
  
  
  1. # modprobe drbd 

  2. drbd                  277272  2 

PS:一般使用yum安装的话系统会自动加载的,此步可以跳过,如果使用源码包编译就一定要记得这一步。

添加一块硬盘,存放数据,主从服务器的硬盘大小可以不一致,但是如果数据超过小的硬盘,后果自己考虑吧!这里添加的是一块2G的硬盘,设备名称为/dev/sdb2,注意先别急着格式化。

开始drbd的配置:

drbd主配置文件,很重要:

  
  
  
  
  1. global { 

  2. common { 

  3. syncer { rate 100M; }    //设置两个节点间的同步速率; 

  4. resource db { 

  5. protocol C;     //定义当数据被写入块设备时候的一致性级别(数据同步协议),A、B、C三个级别,C为数据被确认写到本地磁盘和远程磁盘后返回,确认成功 

  6. startup { wfc-timeout 0; degr-wfc-timeout 120; } 

  7. disk { on-io-error detach; } 

  8. syncer { rate 100M; } 

  9. on drbd-M {  //节点名称一定要与hostname保持一致; 

  10.   device /dev/drbd0;     //创建的虚拟磁盘 

  11.   disk   /dev/sdb2;      //物理分区 

  12.   address 192.168.43.129:7788;    //监听端口 

  13.   meta-disk internal;         //局域网类型 

  14. on drbd-S { 

  15.    device /dev/drbd0; 

  16.    disk   /dev/sdb2; 

  17.    address 192.168.43.130:7788; 

  18.    meta-disk internal; 

检测配置文件:

  
  
  
  
  1. #drbdadm ajust db 

至此drbd已经配置完毕,以上步骤在主从服务器上都要做,而且drbd的配置文件要保持一致。

主服务器和从服务器上创建matadata:

  
  
  
  
  1. # drbdadm create-md all 

主从服务器启动drbd:

  
  
  
  
  1. # /etc/init.d/drbd start 

此时主从服务器之间开始同步数据,第一次的话时间会稍微长一些。

将drbd-M 设为主节点

第一次的话要使用:

  
  
  
  
  1. # drbdsetup /dev/drbd0 primary -o 

以后可以使用drbdadm  primary all命令。

将新创建的设备格式化并且挂载:

  
  
  
  
  1. # mkfs.ext3 /dev/drbd0  //破坏文件系统:dd if=/dev/zero bs=1Mof=/dev/sdb2;sync 

  2. # mount /dev/drbd0 /data/ 

  3. # df �CH 

wps_clip_image-17319

在/data目录下创建文件进行测试:

  
  
  
  
  1. # cd /data/ 

  2. # mkdir linna 

  3. # touch database 

  4. # ls 

  5. database  linna  lost+found 

下面进行测试:

drbd-M:

将主服务器降为从:

先卸载设备:

  
  
  
  
  1. # umount /data/ 

  2. # drbdadm secondary all 

PS:临时切断节点之间的连接可以使用:#drbdadm connect all

查看系统日志/var/log/message:

wps_clip_image-27705

Drbd-S:

我们再将从服务器提升为主服务器看下数据能否同步过来:

  
  
  
  
  1. # drbdadm primary all 

wps_clip_image-11042

  
  
  
  
  1. # mount /dev/drbd0 /data 

  2. # cd /data/ 

wps_clip_image-5498

看,数据已经同步过来了!

我们可以通过查看/proc/drbd来监控主从节点间之间数据同步的过程:

  
  
  
  
  1. #Watch  -n 10 ‘cat /proc/drbd’ 

二 MySQL+Heartbeat+DRBD构建高可用环境

wps_clip_image-11886

                  图 MySQL+Heartbeat+DRBD构建高可用MySQL

1 Heartbeat主配置文件/etc/ha.d/ha.cf:

  
  
  
  
  1. # cat /etc/ha.d/ha.cf 

  2. logfacility local0       //定义日志,使用syslog; 

  3. keepalive 2           //定义心跳频率; 

  4. deadtime 15          //如果其他节点15S内没有回应,则确认其死     亡;       

  5. warntime 5           //确认一个节点连接不上5S之后将警告信息写入日志;   

  6. initdead 120          //在其他节点死掉之后,系统启动前需要等待的时间,一般为deadtime的两倍; 

  7. udpport 694          // 用来通信的端口; 

  8. bcast eth0            // 在eth0上进行心跳测试 

  9. watchdog /dev/watchdog  //可选项 

  10. auto_failback off        // 设置当死亡节点恢复正常之后是否重新启用;容易发生数据不一致的情况,必须项,不然后面hb_standby命令无法使用; 

  11. node drbd-M 

  12. node drbd-S 

  13. respawn hacluster /usr/lib64/heartbeat/ipfail 

2 设置两个节点之间的通信密钥:

  
  
  
  
  1. #cat authkeys 

  2. auth 3 

  3. 3 md5 Hello! 

3 定义资源:

  
  
  
  
  1. # cat haresources 

  2. drbd-M drbddisk Filesystem::/dev/drbd0::/data::ext3 mysqld 192.168.43.20  

drbd-M    //主节点;

drbddisk  Filesystem::/dev/drbd0::/data::ext3 mysqld   //定义Heartbeat需要管理的资源,并且每一部分在/etc/ha.d/haresources.d下有对应的脚本;如果主节点失效,备节点将通过执行这些脚本来启用资源;如果脚本有参数可以使用“::”来进行分割;

drbddisk  管理drbd资源的脚本;

filesystem 管理文件系统资源的脚本,后面参数定义drbd设备,挂载点,文件系统类型

mysqld  管理mysql的脚本,需要从/etc/init.d/mysqld 拷贝

192.168.43.20  //VIP,用来连接MySQL的IP,当Heartbeat启用之后会自动分配;

wps_clip_image-13327

                     图 Resource.d 下的内容

在主从节点上启动Heartbeat

  
  
  
  
  1. # /etc/init.d/heartbeat start 

查看下资源启动情况:

先看下主节点drbd-M的日志:

wps_clip_image-26722

再看下drbd-S的日志,已经处在监听等待状态:

wps_clip_image-6070

虚拟IP已经启动:

wps_clip_image-4355

Drbd和MySQL的端口已经在监听:

wps_clip_image-2739

主节点/data目录下:

wps_clip_image-17322

我们切换到drbd-S来试一下,看资源能不能切换过来:

使用/usr/lib64/heartbeat/hb_standby命令可以来模拟主节点死掉的情况。

  
  
  
  
  1. 2011/07/18_20:49:53 Going standby [all]. 

wps_clip_image-5686

从服务器drbd-S日志:

wps_clip_image-28906

再看下资源是否已经抢占过来:

wps_clip_image-29561

/data目录下的文件:

wps_clip_image-22200

PS:Heartbeat启动之前必须保证drbd服务已经启动,并且主服务器已经设置为primary并成功挂载/dev/drbd0.不然主服务器Heartbeat在启动的时候会提示找不到/dev/drbd0设备,并造成其他的资源也无法启动的情况。

wps_clip_image-17254

PS:心跳探测和数据复制不建议在同一个网卡上进行,本实验只是为了方便采取了这样的方式。

dopd进程:当主从节点之间的失去连接,那么主从节点之间的数据就无法同步,就会发生从节点的数据过期的情况(数据不一致的情况)。如果此时主服务器发生宕机的情况,那么dopd进程会阻止从服务器提升为主服务器。具体实现:

1 修改/etc/ha.d/ha.cf 文件:

  
  
  
  
  1. respawn  hacluster /usr/lib64/heartbeat/dopd 

  2. apiauth  dopd gid=haclientuid=hacluster

2 修改/etc/drbd.conf 文件:

  
  
  
  
  1. common { 

  2. handlers { 

  3.          outdate-peer “/usr/lib64/heartbeat/drbd-peer-outdater”; 

  4.       } 

  5. resource db { 

  6. disk { 

  7. Fencing resource-only; 

  8.      } 

  9.    } 

3 重新加载配置文件:

  
  
  
  
  1. # /etc/init.d/heartbeat reload 

  2. #/drbdadm adjust all 

     MySQL+Heartbeat+DRBD方案可以单独使用,也可以在构建MySQL主从架构时实现主服务器的高可用,在此不再详细实现,有兴趣的朋友可以尝试一下(完)!

参考文章:MySQL and DRBD Guide

 

你可能感兴趣的:(mysql,heartbeat,drbd,构建高可用MySQL环境)