DRBD实现的功能:是一个用软件实现的、无共享的、服务器之间镜像块设备内容,的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
本实验部署DRBD + HEARDBEAT + NFS 环境,建立一个高可用(HA)的文件服务器集群。在方案中,通过DRBD保证了服务器数据的完整性和一致性。DRBD类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上,以相同的形式记录在一个另文件系统中。主节点与备节点的数据可以保证实时相互同步。当本地主服务器出现故障时,备份服务器上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主服务器和备份服务器上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续提供主服务器上相同的服务,并且client用户对主服务器的故障无感知。
实验环境
两台服务器:node1.a.com ip 192.168.101.249
node2.1.com ip 192.168.101.250
VIP:192.168.101.200
客户端ip:192.168.101.100
两台服务器将/dev/sdb1互为镜像
两台服务器/etc/export配置相同
拓扑方案:
node1.a.com配置drbd:
一:环境准备:
1:配置静态ip地址:
2:修改主机名:
[root@localhost ~]# vim /etc/sysconfig/network
[root@localhost ~]# init 6 #重启时更改的主机名生效
3:编辑dns缓存文件:
[root@node1 ~]# vim /etc/hosts
4:安装软件包:
[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom/
[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo #编辑本地yum
[root@node1 ~]# ll
-rw-r--r-- 1 root root 221868 Aug 11 18:57 drbd83-8.3.8-1.el5.centos.i386.rpm
-rw-r--r-- 1 root root 1637238Aug 11 18:58 heartbeat-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 293349 Aug 11 18:58 heartbeat-devel-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 230890 Aug 11 18:58 heartbeat-gui-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 92070 Aug 11 18:58 heartbeat-pils-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 179199 Aug 11 18:58 heartbeat-stonith-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 125974 Aug 11 18:58 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
-rw-r--r-- 1 root root 56817 Aug 11 18:58 libnet-1.1.4-3.el5.i386.rpm
-rw-r--r-- 1 root root 92071 Aug 11 18:58 perl-MailTools-1.77-1.el5.noarch.rpm
[root@node1 ~]# yum localinstall *.rpm -y –nogpgcheck #使用yum安装软件包
5:同步时钟
[root@node1 ~]# hwclock –s
6:加载模块:
[root@node1 ~]# modprobe drbd #加载drbd模块
[root@node1 ~]# lsmod |grep drbd #查看模块
7:新建分区:要求两个节点所创建的新分区大小一致
[root@node1 ~]# fdisk –l #查看分区
[root@node1 ~]# fdisk /dev/sdb #新建分区
[root@node1 ~]# partprobe /dev/sdb #重新读取分区信息
[root@node1 ~]# cat /proc/partitions #查看分区
二:配置drbd:
1:修改drbd.conf文件
[root@node1 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/ #拷贝drbd.conf文件到/etc下,将原文件覆盖
[root@node1 ~]# cd /etc/drbd.d/
[root@node1 drbd.d]# cp global_common.conf global_common.conf.bak #备份global_common.conf文件
[root@node1 drbd.d]# vim global_common.conf #编辑该文件如下:
1 global {
2 usage-count no;
3 }
4
5 common {
6 protocol C;
7 startup {
8 wfc-timeout 120;
9 degr-wfc-timeout 120;
10 }
11 disk {
12 on-io-error detach;
13 fencing resource-only;
14 }
15 net {
16 cram-hmac-alg "sha1";
17 shared-secret "mydrbdlab";
18 }
19 syncer {
20 rate 100M;
21 }
22 }
2:修改资源文件:
[root@node1 drbd.d]# vim web.res #编辑资源文件:
1 resource web {
2 on node1.a.com {
3 device /dev/drbd0;
4 disk /dev/sdb1;
5 address 192.168.101.249:7789;
6 meta-disk internal;
7 }
8 on node2.a.com {
9 device /dev/drbd0;
10 disk /dev/sdb1;
11 address 192.168.101.250:7789;
12 meta-disk internal;
13 }
14 }
3:创建资源:
[root@node1 drbd.d]# drbdadm create-md web #资源web
node2.a.com配置drbd:
一:环境准备:
1:配置静态ip地址:
2:修改主机名:
[root@localhost ~]# vim /etc/sysconfig/network
[root@localhost ~]# init 6 #重启系统使主机名生效
[root@node2 ~]# hostname #查看主机名
3:编辑dns缓存文件:
[root@node2 ~]# vim /etc/hosts
4:编辑本地yum:
[root@node2 ~]# mkdir /mnt/cdrom
[root@node2 ~]# mount /dev/cdrom /mnt/cdrom/
[root@node2 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo #编辑本地yum
[root@node2 ~]# ll
-rw-r--r-- 1 root root 221868 Aug 11 18:57 drbd83-8.3.8-1.el5.centos.i386.rpm
-rw-r--r-- 1 root root 1637238Aug 11 18:58 heartbeat-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 293349 Aug 11 18:58 heartbeat-devel-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 230890 Aug 11 18:58 heartbeat-gui-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 92070 Aug 11 18:58 heartbeat-pils-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 179199 Aug 11 18:58 heartbeat-stonith-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 125974 Aug 11 18:58 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
-rw-r--r-- 1 root root 56817 Aug 11 18:58 libnet-1.1.4-3.el5.i386.rpm
-rw-r--r-- 1 root root 92071 Aug 11 18:58 perl-MailTools-1.77-1.el5.noarch.rpm
[root@node2 ~]# yum localinstall *.rpm -y –nogpgcheck #使用yum安装软件包可以解决依赖性问题
5:同步时钟:
[root@node2 ~]# hwclock –s
6:加载模块:
[root@node2 ~]# modprobe drbd
[root@node2 ~]# lsmod |grep drbd #查看drbd模块
7:新建分区:要求两个节点所创建的新分区大小一致
[root@node2 ~]# fdisk –l #查看分区
[root@node2 ~]# fdisk /dev/sdb
[root@node2 ~]# partprobe /dev/sdb #重新加载
[root@node2 ~]# cat /proc/partitions
二:配置drbd:
1:修改drbd.conf文件:
[root@node2 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/drbd.conf #拷贝文件,并将原来的drbd.conf文件覆盖
[root@node2 ~]# cd /etc/drbd.d/
[root@node2 drbd.d]# cp global_common.conf global_common.conf.bak #备份global_common.conf文件
[root@node2 drbd.d]# vim global_common.conf
1 global {
2 usage-count no;
3 }
4
5 common {
6 protocol C;
7 startup {
8 wfc-timeout 120;
9 degr-wfc-timeout 120;
10 }
11 disk {
12 on-io-error detach;
13 fencing resource-only;
14 }
15 net {
16 cram-hmac-alg "sha1";
17 shared-secret "mydrbdlab";
18 }
19 syncer {
20 rate 100M;
21 }
22 }
2:修改资源文件:
1 resource web {
2 on node1.a.com {
3 device /dev/drbd0;
4 disk /dev/sdb1;
5 address 192.168.101.249:7789;
6 meta-disk internal;
7 }
8 on node2.a.com {
9 device /dev/drbd0;
10 disk /dev/sdb1;
11 address 192.168.101.250:7789;
12 meta-disk internal;
13 }
14 }
3:创建资源:
[root@node2 drbd.d]# drbdadm create-md web #创建资源web
在node1.a.com和node2.a.com上执行:
[root@node1 drbd.d]# service drbd start
[root@node2 drbd.d]# service drbd start
[root@node1 drbd.d]# service drbd status #在node1.a.com上查看状态:
[root@node1 drbd.d]# drbd-overview #在node1.a.com上查看状态:
[root@node2 drbd.d]# service drbd start
[root@node2 drbd.d]# service drbd status #在node2.a.com 上查看状态:
[root@node2 drbd.d]# drbd-overview #在node2.a.com上查看状态:
在node1.a.com上指定主节点:
[root@node1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary web #在node1.a.com上指定为主节点
[root@node1 drbd.d]# watch -n 1 'cat /proc/drbd' #使用此命令,可以动态的查看具体的同步过程,每一秒查看一次
[root@node1 drbd.d]# mkfs -t ext3 -L drbdweb /dev/drbd0 #格式化分区,-L设定卷标为drbdweb
[root@node1 drbd.d]# mkdir /web #创建挂载点
[root@node1 drbd.d]# mount /dev/drbd0 /web/ #挂载分区
[root@node1 drbd.d]# service drbd status #查看状态
在node2.a.com上查看状态:
[root@node1 drbd.d]# mkdir /web #创建挂载点
[root@node2 drbd.d]# service drbd status #查看状态
node1.a.com配置NFS:(两台服务器的nfs配置必须要一致)
[root@node1 drbd.d]# vim /etc/exports
[root@node1 drbd.d]# service portmap start
[root@node1 drbd.d]# chkconfig portmap on
[root@node1 drbd.d]# service nfs start
[root@node1 drbd.d]# chkconfig nfs on
[root@node1 drbd.d]# vim /etc/init.d/nfs #编辑开机启动脚本
node1.a.com配置heartbeat:(两个节点的配置一致)
[root@node1 drbd.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp authkeys ha.cf haresources /etc/ha.d/ #复制文件
[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# vim ha.cf
[root@node1 ha.d]# echo "node1.a.com IPaddr::192.168.101.200/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd"
>> /etc/ha.d/haresources #指明主节点,192.168.101.200是VIP
[root@node1 ha.d]# vim authkeys
[root@node1 ha.d]# echo "killall -9 nfsd; /etc/init.d/nfs restart; exit 0" >> ./resource.d/killnfsd
[root@node1 ha.d]# chmod 600 /etc/ha.d/authkeys #修改权限
[root@node1 ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd #修改权限
[root@node1 ha.d]# service heartbeat start #启动heartbeat服务
[root@node1 ha.d]# chkconfig heartbeat on
node2.a.com配置NFS:(两台服务器的nfs配置必须要一致)
[root@node2 drbd.d]# vim /etc/exports
[root@node2 drbd.d]# service portmap start
[root@node2 drbd.d]# chkconfig portmap on
[root@node2 drbd.d]# service nfs start
[root@node2 drbd.d]# chkconfig nfs on
[root@node2 drbd.d]# vim /etc/init.d/nfs #编辑开机启动脚本
node2.a.com配置heartbeat:(两个节点的配置一致)
[root@node2 drbd.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node2 heartbeat-2.1.4]# cp authkeys ha.cf haresources /etc/ha.d/ #复制文件
[root@node2 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node2 ha.d]# vim ha.cf
[root@node2 ha.d]# echo "node1.a.com IPaddr::192.168.101.200/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd"
>> /etc/ha.d/haresources #指明主节点,192.168.101.200是VIP
[root@node2 ha.d]# vim authkeys
[root@node2 ha.d]# echo "killall -9 nfsd; /etc/init.d/nfs restart; exit 0" >> ./resource.d/killnfsd
[root@node2 ha.d]# chmod 600 /etc/ha.d/authkeys #修改权限
[root@node2 ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd #修改权限
[root@node2 ha.d]# service heartbeat start #启动heartbeat服务
[root@node2 ha.d]# chkconfig heartbeat on
客户端配置:
[root@localhost ~]# mkdir /mnt/nfs
[root@localhost ~]# mount 192.168.101.200:/web /mnt/nfs/
[root@localhost ~]# vim /mnt/test.sh #此配置脚本文件的主要作用是为了反复的读写操作
1 while true
2 do
3 echo ---\> trying touch x : `date`
4 touch x
5 echo \<----- done touch x : `date`
6 echo
7 sleep 2
8 done
[root@localhost ~]# cd /mnt/nfs/
[root@localhost ~]# bash test.sh #执行该脚本
在主节点node1.a.com上关闭heartbeat
[root@node1 ha.d]# service heartbeat stop
在客户端上查看:可以看到发生切换