一、DRBD简介
分布式复制块设备(DRBD 技术)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像
DRBD 镜像数据的特点:
实时性:当应用对磁盘的数据进行修改时,复制立即发生。
透明性:应用程序的数据存储在镜像设备上是独立和透明的,数据可存储在不同的服务器
上。
同步镜像和异步镜像:同步镜像,当本地发申请进行写操作进行时,同步写到两台服务器
上。异步镜像,当本地写申请已经完成对本地的写操作时,开始对对应的服务器进行写操作
二、要求及拓扑
本实验部署drbd+heartbeat+nfs环境,建立一个高可用(HA)的文件系统服务器集群,通过DRBD保证了服务器数据的完整性和一致性。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主服务器和备份服务器上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续提供主服务器上相同的服务,并且client用户对主服务器的故障无感知。
三、实验环境
系统:VMware redhat-5.4
master node1.abc.com 192.168.2.1 eth1 192.168.3.1
slave node2.abc.com 192.168.2.2 eth1 192.168.3.2
虚拟ip:192.168.2.100
两台服务器新加一块硬盘/dev/sdb,创建/dev/sdb1分区互为镜像
注意创建分区时,大小要一致,若不一致,以小的为准
//时间相同,读取主板时间作为当前时间
# hwclock -s
//两个服务器的hosts文件修改,可以正常解析ip与主机名
# echo "192.168.2.1 node1.abc.com" >> /etc/hosts
# echo "192.168.2.2 node1.abc.com" >> /etc/hosts
四、DRBD配置
在node1和node2做以下操作:(在node1在操作,然后可通过scp命令实现相关文件拷贝到node2上)
1、安装drbd
#rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm
# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
# modprobe drbd//加载drbd模块
# lsmod |grep drbd//查看模块加载情况
2、主要目录及命令
/etc/drbd.conf 配置文件
/etc/rc.d/init.d/drbd 配置脚本
/etc/drbd.d/ 主目录
/sbin/drbdadm 高级别管理工具
/sbin/drbdmeta 低级别管理工具
/sbin/drbdsetup 低级别管理工具
/usr/sbin/drbd-overview 查看工具
注: rpm -ql drbd83 查看
3、修改配置文件
#vim /etc/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";
~
~
:r /usr/share/doc/drbd83-8.3.8/drbd.conf //末行模式下执行读命令来加载
#cp /etc/drbd.d/global_common.conf/etc/drbd.d/global_common.conf.bak
# vim /etc/drbd.d/global_common.conf (替换掉原来的内容)
global {
usage-count yes;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
startup { //启动延时配置
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
syncer {
rate 100M;
}
}
# vim /etc/drbd.d/web.res //定义资源
resource web { //资源名称
on node1.abc.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.2.1:7789;
meta-disk internal;
}
on node2.abc.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.2.2:7789;
meta-disk internal;
}
}
4、初始化,启动服务
#drbdadm create-md web
# service drbd start &&chkconfig drbd on //并设为开机启动
5、指定主节点
#drbdadm -- --overwrite-data-of-peer primary web (在自定义主节点上执行)
不加 “-- --overwrite-data-of-peer”
错误:
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup 0 primary' terminated with exit code 17
日志信息:block drbd0: State change failed: Need access to UpToDate data
6、创建目录,实现挂载(在主节点上执行)
#mkdir /data
#mkfs -t ext3 /dev/drbd0 //格式化
#mount /dev/drbd0 /data
7、查看drbd状态
#drbd-overview (#service drbd status)
主节点node1
备份节点nod2
五、nfs配置
两台服务器配置相同,可通过scp拷贝
1、修改nfs的共享菜单
# echo "/data 192.168.2.0/24(rw,sync,no_root_squash)" > /etc/exports
2、启动服务
# service nfs start && chkconfig nfs on
3、修改nfs启动脚本。
/etc/init.d/nfs中的stop部分killproc
脚本nfsd -2 修改为 -9
116 stop)
117 # Stop daemons.
118 echo -n $"Shutting down NFS mountd: "
119 killproc rpc.mountd
120 echo
121 echo -n $"Shutting down NFS daemon: "
122 killproc nfsd -9
六、heartbeat配置
在node1和node2做如下操作
1、安装
heartbeat-2.1.4-11.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-11.el5.i386.rpm
依赖包:
libnet-1.1.4-3.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
注:下载地址http://vault.centos.org/5.4/extras
2、拷贝配置文档
# cd /usr/share/doc/heartbeat-2.1.4/
# cp authkeys ha.cf haresources /etc/ha.d/
3、修改配置文档
1)、ha.cf配置(做如下添加)
bcast eth1
node node1.abc.com
node node2.abc.com
2)、haresources资源文件
#echo “node1.abc.com 192.168.2.100/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/d
ata::ext3 killnfsd” >> /etc/ha.d/haresoures
3)、验证authkeys
#vim authkeys
auth 3
3 md5 hello
#chmod 600 authkeys 设置权限值为600
4)、killnfsd服务控制脚本配置
#echo “killall -9 nfsd; /etc/init.d/nfs restart; exit 0” >>/etc/ha.d/resource.d/killnfsd
#chmod 755 /etc/ha.d/resource.d/killnfsd //添加可执行权限
4、开启Heartbeat服务
#service heartbeat start && chkconfig heartbeat on
七、测试
1、创建挂载
#mkdir /mnt/data
#mount 192.168.2.100:/data /mnt/data
2、编写shell,间隔1s创建一次空文件xxx
# vim /mnt/data/test.sh
while true
do echo ----\> trying touch xxx:$(date)
touch xxx
echo \<---- done touch xxx: $(date)
echo
sleep 1
done
3、将主节点node1的heartbeat服务停止,则备份节点node2接管服务
#service heartbeat stop //node1接点
注:以上实现的drbd的单主模式, 任何资源在任何特定的时间,集群中只存在一个主节点。 正是因为这样在集群中只能有一个节点可以随时操作数据,这种模式可用在任何的文件系统上(EXT3、EXT4、XFS等等)。