heartbeat实现Mysql主主高可用

先声明本文非原创,参照http://blog.chinaunix.net/uid-20639775-id-3337481.html完善与加了一些注解而已。
1.1  方案简介
本方案使用heartbeat+mysql主主同步来实现mysql数据库的高可用, 当服务器或者masterheartbeat宕掉以后会自动切换到backup上,服务器或者masterheartbeat恢复以后可以自动切换回来,master继续提供服务。
1.2  方案优缺点
Ø  优点:

易于配置,架构复杂度低

开源,费用低,无特殊硬件或是网络组件要求

自动虚拟IP管理

数据复制保持基本一致

Ø  缺点:
mysql不可用的情况下不能进行自动切换,需要通过crm模式实现或者额外的脚本实现(比如shell脚本监测到mastermysql不可用就将主上的heartbeat停掉,这样就会切换到backup中去)
不方便扩展。
可能会发生脑裂问题。
1.3  方案架构图

heartbeat实现Mysql主主高可用_heartbeat

1.4  适用场景
该方案适合只有两台数据库的情况,访问量不大,不需要实现读写分离的情况。
1.5  方案实战
1.5.1 实战环境介绍
 
服务器名
IP
VIP
系统
Mysql
MasterA
192.168.1.28
192.168.1.30
Centos 6.3 64bit
5.5.27
MasterB
192.168.1.29
Centos 6.3 64bit
5.5.27
1.5.2 Mysql的安装和配置以及主主同步配置
1.5.4 Heardbeat的安装
A,B服务器都需要安装heardheat软件。下面两种安装方式任选其一。
Ø  Rpm包的安装方式,下载yum
rpm -ivh epel-release-6-8.noarch.rpm
yum -y install heartbeat-*
Ø  源代码编译安装方式
# tar xf 7e3a82377fa8.tar.bz2 
cd Heartbeat-3-0-7e3a82377fa8/cd heartbeat-2.1.3
./configure
 Make
 make install
1.5.5 Heartbeat的配置
Hearbeat的配置主要包括三个配置文件,authkeysha.cfharesources的配置,下面就分别来看!
cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
Ø  Hosts文件的配置
需要在hosts文件中添加masterAmaster B主机,加快节点间的通信
Master Amaster Bhosts节点添加的内容一样,我的配置添加如下内容:
vim /etc/hosts
192.168.1.28    master1
192.168.1.29    master2
Ø  主机名配置
[root@master1 ~]# vim /etc/sysconfig/network
HOSTNAME=master1
[root@master2 ~]# vim /etc/sysconfig/network
HOSTNAME=master2
Ø  禁用selinux
[root@master1 ~]# vim /etc/selinux/config 
SELINUX=disabled
[root@master2 ~]# vim /etc/selinux/config 
SELINUX=disabled
Ø  Authkerys的配置
这个文件用来配置密码认证方式,支持3种认证方式,crcmd5sha1,从左到右安全性越来越高,消耗的资源也越多。因此如果heartbeat运行在安全的网路之上,比如私网,那么可以将验证方式设置成crcABauthkeys配置一样。我的authkeys文件配置如下:
vim /etc/ha.d/authkeys
auth 1
1 crc
Ø  ha.cf的配置
Master Aha.cf的配置
vim /etc/ha.d/ha.cf
logfile/var/log/ha-log
logfacilitylocal0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport694
ucast eth0 192.168.1.28 master AIP
auto_failback on
node    master1
node    master2
ping 10.10.10.254  网关
respawn hacluster /usr/lib64/heartbeat/ipfail 默认是lib修改lib64
compressionbz2 
compression_threshold 2
Master Bha.cf的配置
vim /etc/ha.d/ha.cf
logfile/var/log/ha-log
logfacilitylocal0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport694
ucast eth0 192.168.1.29
auto_failback on
node    master1
node    master2
ping 10.10.10.254
respawn hacluster /usr/lib64/heartbeat/ipfail
compressionbz2
compression_threshold 2
Ø  A,B 服务器haresources的配置一样
haresources用来设置master的主机名、虚拟IP、服务以及磁盘挂载等,masterbackup的配置是一样的,下面的mysqld需要做成服务,放在/etc/rc.d/init.d/目录下,配置配置如下:
vim /etc/ha.d/haresources 添加下面一行
master2 192.168.1.30/24/eth0 mysqld 这表示资源将在启动在master1
1.5.6 Heartbeat的启动
在启动master Amaster B上的mysqld启动以后,启动master Amaster Bheartbeat
[root@master1 ~]# chkconfig heartbeat on
[root@master2 ~]# chkconfig heartbeat on
[root@master1 ~]# ifconfig 查看虚拟IP没有起来
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:48:D0:64  
          inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
1.5.7 方案测试
环境搭建好以后,就需要进行周密的测试,看是否实现了预期的功能:
Ø  停掉master A上的mysqld,看看是否切换
Ø  停掉master Aheartheat看看是否能正常切换。
Ø  停掉master A的网络或者直接将master系统shutdown,看看能否正常切换。
Ø  启动master Aheartbeat看看是否能正常切换回来。
Ø  重新启动master看看能否切换过程是否OK
1.5.8 解决问题
如果重启机器后heartbeat不能启动,则需要查看/var/log/ha-log
ERROR: Current node [test1] not in configuration! 
配置文件有问题,由于我临时用hostname修改的主机名,重启后不生效。需要修改主机名与ha.cf中定义的node后面的一样
ERROR: glib: ucast: error binding socket. Retrying: Permission denied
禁用selinux