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配置相同

拓扑方案:

p_w_picpath

node1.a.com配置drbd:

一:环境准备:

1:配置静态ip地址:

p_w_picpath

2:修改主机名:

[root@localhost ~]# vim /etc/sysconfig/network

p_w_picpath

[root@localhost ~]# init 6       #重启时更改的主机名生效

p_w_picpath

3:编辑dns缓存文件:

[root@node1 ~]# vim /etc/hosts

p_w_picpath

4:安装软件包:

[root@node1 ~]# mkdir /mnt/cdrom

[root@node1 ~]# mount /dev/cdrom /mnt/cdrom/

[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo #编辑本地yum

p_w_picpath

[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      #查看模块

p_w_picpath

7:新建分区:要求两个节点所创建的新分区大小一致

[root@node1 ~]# fdisk –l      #查看分区

p_w_picpath

[root@node1 ~]# fdisk /dev/sdb     #新建分区

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

[root@node1 ~]# partprobe /dev/sdb      #重新读取分区信息

[root@node1 ~]# cat /proc/partitions     #查看分区

p_w_picpath

二:配置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

p_w_picpath 

node2.a.com配置drbd:

一:环境准备:

1:配置静态ip地址:

p_w_picpath 

2:修改主机名:

[root@localhost ~]# vim /etc/sysconfig/network

p_w_picpath

[root@localhost ~]# init 6      #重启系统使主机名生效

[root@node2 ~]# hostname      #查看主机名

p_w_picpath

3:编辑dns缓存文件:

[root@node2 ~]# vim /etc/hosts

p_w_picpath

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

p_w_picpath

[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模块

p_w_picpath

7:新建分区:要求两个节点所创建的新分区大小一致

[root@node2 ~]# fdisk –l       #查看分区

wps_clip_p_w_picpath-16693

[root@node2 ~]# fdisk /dev/sdb

wps_clip_p_w_picpath-17023

wps_clip_p_w_picpath-13063

wps_clip_p_w_picpath-23109

wps_clip_p_w_picpath-21688

[root@node2 ~]# partprobe /dev/sdb       #重新加载

[root@node2 ~]# cat /proc/partitions

p_w_picpath

二:配置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

p_w_picpath

在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上查看状态:

p_w_picpath 

[root@node1 drbd.d]# drbd-overview        #在node1.a.com上查看状态:

p_w_picpath

[root@node2 drbd.d]# service drbd start       

[root@node2 drbd.d]# service drbd status       #在node2.a.com 上查看状态:

p_w_picpath

[root@node2 drbd.d]#  drbd-overview       #在node2.a.com上查看状态:

p_w_picpath 

在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'      #使用此命令,可以动态的查看具体的同步过程,每一秒查看一次

p_w_picpath

[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        #查看状态

p_w_picpath

在node2.a.com上查看状态:

[root@node1 drbd.d]# mkdir /web #创建挂载点

[root@node2 drbd.d]# service drbd status        #查看状态

p_w_picpath

node1.a.com配置NFS:(两台服务器的nfs配置必须要一致)

[root@node1 drbd.d]# vim /etc/exports

p_w_picpath

[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       #编辑开机启动脚本

p_w_picpath

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

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

[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

p_w_picpath

[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

p_w_picpath

[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 #编辑开机启动脚本

p_w_picpath

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

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

[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

p_w_picpath

[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

客户端配置:

p_w_picpath

[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       #执行该脚本

p_w_picpath

在主节点node1.a.com上关闭heartbeat

[root@node1 ha.d]# service heartbeat stop

在客户端上查看:可以看到发生切换

p_w_picpath