1. heartbeat
用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
下载地址http://www.linux-ha.org/
2. drbd
通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
下载地址http://www.drbd.org/
heartbeat可以独立完成双机热备功能
drbd用于镜像主备机之间的数据,不需要可不安装
Heartbeat安装
本文中使用yum服务自动安装heartbeat全部程序
版本为heartbeat-2.1.3-3.x86_64
注:所有节点都要安装,并且配置一样
一.安装heartbeat
1.首先,我安装这个软件的时候用的搜狐的yum源;只需要执行以下两步,就会自动给你安
装一个可用的yum源
# wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-7.noarch.rpm
# rpm -ivh epel-release-6-7.noarch.rpm
这时,在我们的/etc/yum.repos.d里面就会多出两个yum源
2.安装好yum源,之后,我们就可以用yum安装heartbeat了,一键搞定的
# yum install heartbeat* -y
3.下面,我们就要找到heartbeat的配置文件,但是,我们的配置目录中是找不到它的配
置文件的,这时候,我们可以先进入配置文件目录
# cd /etc/ha.d/
这样进去之后,会发现README.config这个配置文件,我们进去看一下
# vim README.config
有一段内容如下:
If you installed heartbeat using rpm packages then
this command will show you where they are on your system:
rpm -q heartbeat -d
这段是告诉我们要rpm -q heartbeat -d这个命令来找到配置文件
# rpm -qd heartbeat
执行完这个命令之后,我们可以看到如下内容:
/usr/share/doc/heartbeat-3.0.4/AUTHORS
/usr/share/doc/heartbeat-3.0.4/COPYING
/usr/share/doc/heartbeat-3.0.4/COPYING.LGPL
/usr/share/doc/heartbeat-3.0.4/ChangeLog
/usr/share/doc/heartbeat-3.0.4/README
/usr/share/doc/heartbeat-3.0.4/apphbd.cf
/usr/share/doc/heartbeat-3.0.4/authkeys
/usr/share/doc/heartbeat-3.0.4/ha.cf
/usr/share/doc/heartbeat-3.0.4/haresources
/usr/share/man/man1/cl_status.1.gz
/usr/share/man/man1/hb_addnode.1.gz
/usr/share/man/man1/hb_delnode.1.gz
/usr/share/man/man1/hb_standby.1.gz
/usr/share/man/man1/hb_takeover.1.gz
/usr/share/man/man5/authkeys.5.gz
/usr/share/man/man5/ha.cf.5.gz
/usr/share/man/man8/apphbd.8.gz
/usr/share/man/man8/heartbeat.8.gz
这时候,我们只需要将 ha.cf, haresources,authkeys这三个配置文件cp到/etc/ha.d/
目录下就好了
# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
# cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
到此,所有的配置文件都全了,开始修改配置吧!
authkeys 双机互联验证配置文件
haresources 集群资源配置文件
ha.cf 主配置文件
#vi /etc/ha.d/ha.cf
logfile /var/log/ha-log #File to write other messages to
logfacility local0 #这个是设置heartbeat的日志,这里是用的系统日志
##设定心跳(监测)时间时间为2秒
keepalive 2 #多长时间检测一次
warntime 5 #连续多长时间联系不上后开始警告提示
deadtime 20 #连续多长时间联系不上后认为对方宕机(单位是妙)
initdead 120 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)
#采用eth1的udp广播用来发送心跳信息(eth1为网卡名,可以在ifconfig看到)
#bcast eth1
#采用网卡eth1的udp单播来通知心跳,IP为对方IP,建议采用单播。当一个网段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的节点,从而报错。(eth1为网卡名,可以在ifconfig看到)
ucast eth1 192.168.1.231
##使用udp端口694 进行心跳监测
udpport 694
auto_failback off #恢复正常后是否需要再自动切换回来,一般都设为off。
##节点1,必须要与 uname -n 指令得到的结果一致。(填写机器名,可能需要在/etc/hosts中设置)
node alsme_probe3
##节点2(填写机器名,可能需要在/etc/hosts中设置)
node alssme_probe4
# #默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
# #所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
# #可以通过ipfail插件,设置'ping nodes'来解决这一问题。详细说明参考hearbeat文档。
##通过ping 网关来监测心跳是否正常
ping 192.168.1.1
hopfudge 1
deadping 5
#指定和heartbeat一起启动、关闭的进程
respawn hacluster /usr/local/lib64/heartbeat/ipfail
#系统权限设置(可以不改)
#apiauth ipfail gid=haclient uid=hacluster
authkeys 双机互联验证配置文件
#可以根据实际需要更改,配置文件中有详细说明
#vi / etc/ha.d/authkeys
auth 1
1 crc
#注意authkeys的权限一定要是600.
#chmod 600 / etc/ha.d/authkeys
haresources集群资源配置文件
#vi /etc/ha.d/haresources
server1 IPaddr::192.168.10.3/24/eth1 #这里的ip是我们再ha.cf里定义的主节点ip
在这里,我这里写的比较简单,下面会讲的比较详细的
server1:是我的主服务器上的hostname显示的主机名字
IPaddr::192.168.10.3/24/eth1 #设置虚拟IP
启动和关闭heartbeat的方法
#将heartbeat配置成系统服务
#chkconfig --add heartbeat
#启动
#service heartbeat start
#关闭
#service heartbeat stop
查看heartbeat状态
#service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
二.drbd安装
本文中使用yum服务自动安装drbd全部程序
版本为drbd83-8.3.8-1.x86_64
注:所有节点都要安装,并且配置一样
1.安装yum源
# wget http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
# rpm -ivh elrepo-release-6-4.el6.elrepo.noarch.rpm
修改yum源的配置文件
# vi /etc/yum.repos.d/elrepo.repo
将第8行的enable=1改成enable=0
[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo.el6
enabled=0 --->就是修改这个地方
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
到这里,安装drbd的yum源已经安装好了,可以一键安装了
2.开始安装drbd及依赖的软件
# yum --enablerepo=elrepo install drbd83-utils kmod-drbd83 -y
到这里drbd就安装完了
3.drbd.conf主配置文件
#vi /etc/drbd.conf
global {
usage-count yes; #参加DRBD使用者统计,默认为yes
}
common {
syncer { rate 100M; } #设备主备节点同步时的网络速度最大值,我这里是100M网
startup {
degr-wfc-timeout 120; #同步超时时间
wfc-timeout 120;
}
}
#资源配置
resource db {
protocol C; #使用协议c,表示收到远程主机的写入确认后,则认为写入完成
disk {
on-io-error detach;
#size 1G; #两台服务器硬盘大小不同,才需要设置drbd的大小
}
net {
cram-hmac-alg sha1; #设置主备机之间通信使用的信息算法。
shared-secret "FooFunFactory";
}
#节点1
on server1 {
device /dev/drbd0; #将使用的分区,该分区映射到 /dev/sdb5
#块文件
disk /dev/sda5;
address 192.168.5.200:7791; #指定IP地址和端口号
meta-disk internal; #网络通信属性
}
#节点2
on server2 {
device /dev/drbd0;
#块文件
disk /dev/sda5;
address 192.168.5.199:7791;
meta-disk internal;
}
}
注:配置中同一资源在各个节点块文件(例如disk /dev/sda5)大小需要完全一样。
# mkfs.ext4 /dev/sdb5 #使用ext4格式分区格式化/dev/sdb5
# dd if=/dev/zero of=/dev/sdb5 bs=1M count=1;sync
# drbdadm create-md db #初始化drbd的metadata,db是前面定义的resource。
# /etc/init.d/drbd start #启动Master上的drbd时,就去启动backup的drbd,否则Master无法启动。
# ps -aux|grep drbd
注:drbd设备有三个进程:drbd0_worker是drbd0的主进程,drbd0_asender是primary上drbd0的数据发送进程,drbd0_receiver是secondary上drbd0的数据接收进程。
# cat /proc/drbd #查看drbd状态,此时结果应为st:Secondary/Secondary,ds:Inconsistent/Inconsistent。
======================仅主机执行=============================================
# drbdsetup /dev/drbd0 primary -o #设置主节点,仅第一次使用drbdsetup,以后则用drbdadm。
# cat /proc/drbd #查看drbd状态,此时结果应为st:Primary/Secondary ds:UpToDate/Inconsistent。
# mkfs.ext3 /dev/drbd0
# mount /dev/drbd0 /data
# watch -n 1 cat /proc/drbd
=============================================================================
注:/proc/drbd中显示了drbd当前的状态,第一行的st表示两台主机的状态,主机表示为Primary,备机表示为Secondary。
ds是磁盘状态,实时表示为UpToDate,不一致表示为Inconsistent状态。
启动和关闭drbd的方法
#将drbd配置成系统服务
#chkconfig --add drbd
#启动服务
#service drbd start
#关闭服务
#service drbd stop
#节点设置为primary
#drbdadm primary all #这个命令每次重启drbd的时候,都要执行的
#节点设置为secondary
#drbdadm secondary all
启动之后可以挂载drbd分区(例如device /dev/drbd0)
第一次启动需要格式化drbd分区,使用命令
mkfs.ext3 /dev/drbd0
使用mount命令挂载
该分区可以用于存放数据库的数据文件或其他需要同步文件。
split brain的处理
split brain实际上是指在某种情况下,造成drbd的两个节点断开了连接,都以primary的身份来运行。当drbd某primary节点连接对方节点准备发送信息的时候如果发现对方也是primary状态,那么会会立刻自行断开连接,并认定当前已经发生split brain了,这时候他会在系统日志中记录以下信息:“Split-Brain detected,dropping connection!”当发生split brain之后,如果查看连接状态,其中至少会有一个是StandAlone状态,另外一个可能也是StandAlone(如果是同时发现split brain状态),也有可能是WFConnection的状态。这种情况会造成各个节点中的数据不一致,恢复正常状态需要节点中选出主机,其他节点从主机重新更新数据。
在从机上执行
drbdadm secondary resource db
drbdadm -- --discard-my-data connect resource db
在主机执行
drbdadm connect resource db
注:这里的主机是要保留数据的节点,从机是不需要保留数据的节点。
三.整合heartbeat和drbd
1.为了让heartbeat启动mysql,需要如下的做法:
# ln -s /etc/init.d/mysql /etc/ha.d/resource.d/mysqld
这一步就是让mysql的启动脚本放到heartbeat调用的脚本目录中
2.整合,其实就是修改haresources集群资源配置文件,主要修改我上面加的那句
server1 IPaddr::192.168.10.3/24/eth1 drbddisk::db Filesystem::/dev/drbd0::/data::ext4 mysqld
解释:
server1:是我的主服务器上的hostname显示的主机名字
IPaddr::192.168.10.3/24/eth1 #设置虚拟IP
drbddisk::db #告诉heartbeat要管理DRBD的资源db。
Filesystem::/dev/drbd0::/data::ext3 #设定需要挂载的drbd设备采用的文件系统,即执行mount与unmout操作。
mysqld #设定要随heartbeat启动的服务。
本文出自 “linux小窝” 博客,谢绝转载!