中关村村草 发表于 2011-12-10 22:11

Heartbeat+MySQL+DRBD构建高可用MySQL

Heartbeat+MySQL+DRBD构建高可用MySQL






   



一、DRBD原理及架构


1、原理简述


DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.


2、架构图










mysql2:
   

192.168.3.12
   


   




mysql3:
   

192.168.3.13
   


   




VIP:
   

192.168.3.7
   


   




DRBD资源目录:
   

/data
   


   



优点:安全性、稳定性高,出现故障系统将自动切换,从而保证服务的连续性,相对mysql+heartbeat+存储来说对大优点是节约了存储这个硬件设备。



缺点:mysql主机宕机,切换到备机,备机接管服务,待主机修复完配置failback机制的话会发生脑裂情况,需要手工执行命令进行主机接管。




二、Heartbeat+DRBD+MySQL安装


1、定义主机名
# vi /etc/hosts



192.168.3.12 mysql2

192.168.3.13 mysql32、利用yum安装drbd、heartbeat
(基于CentOSx86_64平台)yum install -y drbd83kmod-drbd83

yum install -y heartbeatheartbeat-ldirectord heartbeat-pils heartbeat-stonith3、配置DRBDMaster Node:

# vi /etc/drbd.conf



# please have a a look at theexample configuration file in

#/usr/share/doc/drbd83/drbd.conf

#

global { usage-count yes; }

common { syncer { rate 100M;} }

resource r0 {


protocol C;


startup {



}


disk {


on-io-error
detach;


#size 1G;


}


net {


}


on mysql12 {


device
/dev/drbd0;


disk
/dev/sda5;


address
192.168.3.12:7898;


meta-disk internal;


}


on mysql13 {


device
/dev/drbd0;


disk
/dev/sda5;


address
192.168.3.13:7898;


meta-disk internal;


}

}



Slave Node:

# vi /etc/drbd.conf



#

# please have a a look at theexample configuration file in

#/usr/share/doc/drbd83/drbd.conf

#

global { usage-count yes; }

common { syncer { rate 100M;} }

resource r0 {


protocol C;


startup {



}


disk {


on-io-error
detach;


#size 1G;


}


net {


}


on mysql12 {


device
/dev/drbd0;


disk
/dev/sda5;


address
192.168.3.12:7898;


meta-disk internal;


}


on mysql13 {


device
/dev/drbd0;


disk
/dev/sda5;


address
192.168.3.13:7898;


meta-disk internal;


}

}在两台主机上执行:
# mkfs.ext3 /dev/sda5

# dd if=/dev/zero of=/dev/sda5 bs=1M count=1;sync在两台主机上同时执行:


# /etc/init.d/drbd restart



查看是状态:


# watch -n 1 cat /proc/drbd



在主节点主机上执行:


设置当前节点为主节点并进行格式化:# drbdadm -- --overwrite-data-of-peer primary all

# mkfs.ext3 /dev/drbd0

# mount /dev/drbd0 /data继续查看状态:


# watch -n 1 cat /proc/drbd





4、节点切换


1)主节点切换:切换主从节点前,要注意umount

主从切换: drbdadm primary all;drbdadm secondary all


2)从节点切换:


drbdadmprimary all

再mount /dev/drbd0 /data

即可以切换过数据过来



5、配置heartbeat ldirectord

1)配置authkeys
# vi /etc/ha.d/authkeys



auth 3

#1 crc

#2 sha1 HI!

3 md5 Hellomysql



# chmod 600 vi/etc/ha.d/authkeys2)配置ha.cf
# vi /etc/ha.d/ha.cf



debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility
local0

keepalive 2

deadtime 20

warntime 10

initdead 60

udpport 693

ucast eth1 192.168.3.13
#slave节点配置ucasteth1 192.168.3.12

ping_group group1192.168.3.12 192.168.3.13

auto_failback off

node
mysql12

node
mysql13

#respawn hacluster/usr/lib/heartbeat/ipfail

#apiauth ipfail gid=haclientuid=hacluster

hopfudge 13)配置haresources

# vi /etc/ha.d/haresources



mysql12IPaddr::192.168.3.7/24/eth1:0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3mysql



4)Slave节点配置基本类似以上.


5)安装迁移MySQL

编译安装MySQL只将数据库目录存放在DRBD目录,我们要镜像的是MySQL数据库目录



6)设置自动启动服务


# chkconfigmysqld off
# chkconfig --add heartbeat
# chkconfig heartbeat on



三、常见问题处理


设置一个节点为主节点


通过cat /prod/drbd查看是否开始复制,以及两节点的状态。此时开始同步两个节点的磁盘,需要一定时间,在同步完成前,请不要重启,否则会重新同步。


同步完成后,如果两个节点都是Secondary/Secondary,并且已经UpToDate了,可以挑一个节点设置为主节点:


# drbdadm primary all



DRDB的一些常规操作:


切换主从节点前,要注意umount

主从切换: drbdadm primary all,drbdadm secondary all

节点间连接:drbdadmconnect|disconnect all






DRBD脑裂后的处理:


脑裂后,两个节点间数据不同步,主从关系失效,需要按下面的步骤修复:


a.在从节点如下操作:


# drbdadm secondary r0

# drbdadm ----discard-my-data connect r0


b.在主节点上,通过watch-n 1 cat /proc/drbd查看状态,如果不是WFConnection状态,需要再手动连接:


# drbdadm connect r0



1).DRBD协议(A B C)

协议说明


A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作.

B 收到接收确认就认为完成了写入操作.

C 收到写入确认就认为完成了写入操作.


2).drbd设备的三个进程


每个drbd设备会有三个进程:


drbd0_worker是drbd0的主要进城,


drbd0_asender是primary上drbd0的数据发送进程,


drbd0_receiver是secondary上drbd0的数据接收进程



3).几点注意的地方:


1.mount drbd设备以前必须把设备切换到primary状态。


2. 两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。


3. 处于secondary状态的服务器上不能加载drbd设备。


4. 主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd磁盘镜像相当于网络raid 1


4).使用DRBD方案的时候建议用使用INNODB存储引擎


据说MyISAM在DRBD上容易造成数据丢失,或表文件损坏,所以此模式下最好用InnoDB,打开Binlog,同时,innodb_flush_log_at_trx_commit=1可以保证数据完整,但会严重影响性能。设置为2的话性能约有10倍提升,不过故障时可能会丢失1秒的数据。

xiaogui_vip 发表于 2011-12-20 14:04

楼主 ,有没有试试CRM管理模式开启??

我开启后遇到一些问题了,希望找了解的CUer讨论下.

king_819 发表于 2011-12-20 17:48

最近也正在测试这个方案
页: [1]
查看完整版本: Heartbeat+MySQL+DRBD构建高可用MySQL