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秒的数据。 楼主 ,有没有试试CRM管理模式开启??
我开启后遇到一些问题了,希望找了解的CUer讨论下. 最近也正在测试这个方案
页:
[1]