Heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd+nfs在Linux下创建一个高可用(HA)的集群服务器。
DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数
拓扑图:
一. 安装前准备
实现高可用性群集,两个节点配置文件需要保持一致
1.修改hosts文件
[root@node1 ~]# vim /etc/hosts
添加 192.168.2.10 node1.a.com node1
192.168.2.20 node2.a.com node2
2.修改network文件
[root@node1 ~]# hostname node1.a.com
[root@node1 ~]# vim /etc/sysconfig/network
更改 HOSTNAME=node1.a.com
3.配置yum源
[root@node1 ~]# hwclock -s //同步时间
[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom
[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-server]
name=Red Hat Enterprise Linux server
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
[rhel-cluster]
name=Red Hat Enterprise Linux cluster
baseurl=file:///mnt/cdrom/Cluster
enabled=1
gpgcheck=0
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
node1与node2 的配置同样。
[root@node1 ~]# scp /etc/yum.repos.d/rhel-debuginfo.repo node2.a.com:/etc/yum.repos.d/
二.安装drbd主文件
软件:
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
drbd83-8.3.8-1.el5.centos.i386.rp
1.安装DRBD软件
[root@drbd1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安装
[root@drbd1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装
2.加载内核
[root@drbd1 ~]# modprobe drbd
3.配置主文件
root@drbd1 ~]# vim /etc/drbd.conf 在末行模式下输入如下命令
:r /usr/share/doc/drbd83-8.3.8/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#
4.创建一个共享空间
[root@node1 ha.d]# fdisk /dev/sda
n------->p-------->4--->+1G------>w
[root@node1 ha.d]# partprobe /dev/sda
5.配置全局文件
[root@drbd1 ~]# cd /etc/drbd.d
[root@drbd1 drbd.d]# cp global_common.conf global_common.conf.bak //备份文件
[root@drbd1 drbd.d]# vim global_common.conf 修改如下
global {
usage-count no; //取消DRBD使用者统计
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; //使用协议C
startup {
wfc-timeout 120; //启动延迟
degr-wfc-timeout 120;
}
disk { //fence防脑裂
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1"; //主备节点使用的通信算法
shared-secret "mydrbdlab";
}
syncer {
rate 100M; //主备节点同步速率
}
}
6.定义资源
[root@drbd1 ~]# vim web.res
resource web { (资源名称)
on node1.a.com { (节点名)
device /dev/drbd0; (虚拟设备名称)
disk /dev/sda4; (真实设备名)
address 192.168.2.10:7789; (监听自身的IP的地址端口)
meta-disk internal;
}
on node2.a.com {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.2.20:7789;
meta-disk internal;
}
}
7.node2也需要进行同样的配置,配置与node1配置是一样的
在node1 与node2上初始化资源web
[root@drbd1 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@drbd2 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
8.启动drbd服务
注意两个节点要一起启动,否则在启动时会处于一直等待状态
[root@drbd1 ~]# service drbd start
[root@drbd2 ~]# service drbd start
9.查看节点状态
在节点一上查看
[root@drbd1 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
在节点二上查看
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
web:资源名
Secondary/Secondary:自身状态/另外节点状态
由上面的两个节点的状态可看到,两个节点都是备用节点,我们需要手动调整
10.将drbd1.a.com调整为主节点
[root@drbd1 ~]# drbdadm -- --overwrite-data-of-peer primary web
11.再次查看状态
节点一
[root@drbd1 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
节点二
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Primary UpToDate/UpToDate C r----
可以看出drbd1.a.com已经成为主节点了
12.在主节点上创建文件系统
[root@drbd1 ~]# mkfs.ext3 -L drbdweb /dev/drbd0 L:卷名
13.测试
1> 在主节点上创建挂载点,挂载后,写入一个文件
[root@drbd1 ~]# mkdir /mnt/drbd
[root@drbd1 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd1 ~]# cd /mnt/drbd
[root@drbd1 drbd]# touch index.html
[root@drbd1 drbd]# ll
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html
drwx------ 2 root root 16384 Jan 20 18:07 lost+found
[root@drbd1 drbd]#
2> 将drbd1.a.com配置成从节点,将drbd2.a.com配置成主节点
节点一
[root@drbd1 drbd]# cd
[root@drbd1 ~]#
[root@drbd1 ~]# umount /mnt/drbd
[root@drbd1 ~]# drbdadm secondary web
[root@drbd1 ~]# drbdadm role web
Secondary/Primary
[root@drbd1 ~]#
节点二
[root@drbd2 ~]# drbdadm primary web
[root@drbd2 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
3> 在节点二挂载,查看是否有内容
[root@drbd2 ~]# mkdir /mnt/drbd
[root@drbd2 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd2 ~]# ll /mnt/drbd/
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html //可以看到已经写入成功
drwx------ 2 root root 16384 Jan 20 18:07 lost+found
三.安装heartbeat文件
软件环境
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
1.安装heartbeat主文件
[root@node1 ~]# cd heartbeat/
[root@node1 heartbeat]# yum localinstall * --nogpgcheck
[root@node1 ~]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp authkeys haresources ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# vim ha.cf
# 日志
#logfile /var/log/ha-log
#logfacility local0
# 心跳监测时间
#keepalive 2
# 死亡时间
#deadtime 5
# 服务器正常后由主服务器接管资源,另一台服务器放弃该资源
auto_failback off
94 bcast eth1 //产生广播监听eth1
213 node node1.a.com //定义节点
214 node node2.a.com
2.验证使用md5 认证密文
[root@node1 ~]# echo "123" | openssl md5
ba1f2511fc30423bdbb183fe33f3dd0f
[root@node1 heartbeat-2.1.4]# vim authkeys
auth 3
3 md5 ba1f2511fc30423bdbb183fe33f3dd0f
[root@node1 ha.d]# chmod 600 authkeys //修改权限
修改资源文件/etc/ha.d/haresources,定义HA群集的资源
[root@node1 ha.d]# vim haresources
45 node1.a.com IPaddr::192.168.2.100/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/mnt/drbd::ext3 killnfsd
注:该文件内IPaddr,Filesystem等脚本存放路径在/etc/ha.d/resource.d/下,也可在该目录下存放服务启动脚本(例如:mysql,www),将相同脚本名称添加到/etc/ha.d/haresources内容中,从而跟随heartbeat启动而启动该脚本。
IPaddr::192.168.2.100/24/eth0:用IPaddr脚本配置浮动VIP
drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载
Filesystem::/dev/drbd0::/mnt/drbd::ext3:用Filesystem脚本实现磁盘挂载和卸载
3.手工创建文件killnfsd
编辑脚本文件killnfsd,用来重启NFS服务:
注:因为NFS服务切换后,必须重新mount NFS共享出来的目录,否则会报错(待验证)
[root@node2 ha.d]# vim resource.d/killnfsd
添加:killall -9 nfsd;
/ etc/init.d/nfs restart;
exit 0
[root@drbd1 ha.d]# chmod 755 resource.d/killnfsd
四.配置NFS服务共享
1.编写共享
[root@node1 ~]# vim /etc/exports
/mnt/drbd 192.168.2.0/24(rw,sync)
2. 导出共享清单
[root@drbd1 ha.d]# exportfs -rv
exporting 192.168.2.10/24:/mnt/drbd
3. 修改nfs启动脚本
[root@drbd1 ha.d]# vim /etc/init.d/nfs //修改如下
122 killproc nfsd -9
Node2节点于node1配置基本一样需要做同node1一样的操作
4.启动node1.a.com节点的heartbeat的服务:
# service heartbeat start
启动node2.a.com节点的heartbeat的服务:
# service heartbeat start
5.查看heartbeat两节点的状态:
[root@node1 ~]# drbd-overview
五.测试:
1. 开启一个客户端:
配置一个临时地址: # ifconfig eth0 192.168.2.16
创建一个挂载点:
# mkdir /mnt/nfs # mount 192.168.2.100:/mnt/drbd /mnt/nfs
查看状态
mount
2 当heartbeat正常运行时: 查看NFS网络文件系统:
[root@clent ~]# cd /mnt/nfs
[root@clent nfs]# ll
总计 16
-rw-r--r-- 1 root root 0 10-27 16:14 index.html
drwx------ 2 root root 16384 10-27 16:12 lost+found
3.在node1.a.com中将heartbeat服务关闭:
[root@node1 ~]# service heartbeat stop
[root@node2 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r---- /mnt/drbd ext3 950M 18M 885M 2%
通过上述案例可以实现高可用性,以及通过heartbeart控制DRDB的自动切换,而且保证文件系统的高可用性。