构建Heartbeat+DRBD+NFS高可用文件共享存储

DRBD的介绍:

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 

数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)

工具:   drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetupdrbdmeta发送指令,   drbdsetup:配置装载进kernelDRBD模块,平时很少直接用   drbdmeta:管理META数据结构,平时很少直接用。   在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)   每个资源有个角色,是PrimarySecondary,下面简称”   主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备raw或直接IO访问。   备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。   角色可以改变。 

DRBD功能

  单主模式:典型的高可靠性集群方案。   复主模式:需要采用共享cluster文件系统,如GFSOCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。   复制模式:3种模式:   协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。   协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。   协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。   一般用协议C。选择协议将影响流量,从而影响网络时延。   有效的同步:按线性而不是当初写的顺序同步块。同步损坏时间内的不一致数据。   在线的设备检验:一端顺序计算底层存储,得到一个数字,传给另一端,另一端也计算,如果不一致,则稍后进行同步。建议一周或一月一次。   复制过程的一致性检验:加密后,对*不一致则要求重传。防止网卡、缓冲等问题导致位丢失、覆盖等错误。   Split brain:当网络出现暂时性故障,导致两端都自己提升为Primary。两端再次连通时,可以选择email通知,建议手工处理这种情况。   当数据写在缓冲区里,没有真正写到磁盘上时,系统崩溃会导致数据丢失。而disk flush是指将数据真正写到磁盘上后才返回。   有些带电池的硬盘控制器,如带电池的带点出Dell PERC Raid卡,不但自带缓存而且自带电池,会在系统意外断电或者崩溃后将最后的数据写入磁盘,对这类控制器,可以使用disk flush,从而在保证性能的前提下提高了数据的安全性。   磁盘错误处理策略:   传递给上层:可能造成文件系统remounting成只读,不推荐。   对上层屏蔽:用另一端的相应块进行读写,应用不中断。可以在任何方便的时候再切换。   不一致的(inconsistent)数据:不能以任何方式访问和使用的数据。如正在同步时的目标节点数据,这些数据不能识别,不能mount,甚至不能通过磁盘的自动检测。   过期的(outdated)数据:在备机上的数据,与主机一致,但不需要同步。如主备机网络中断后,备机上的数据就是过期的。   DRBD有接口允许应用程序在网络中断时将备机数据标识为过期的。DRBD拒绝将这个节点提升为主角色。这些管理接口在Heartbeat框架上得到完整实现。   一旦过期资源的复制链接恢复,他的过期标志自动清除,接着进行后台同步。 

工作原理

在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘.因为数据同时存在于本地主机和远程主机上  切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了

构建Heartbeat+DRBD+NFS高可用文件共享存储

注意: 主机名一定要设置,hostshostname 分区要单独的分区,而且是没有格式化的 文件系统只能同时挂载一个,而且是在主节点进行,格式化也只能是在主节点

配置步骤:

一、DRBD的实现

1.配置主机名和host文件
[[email protected] ~]# vim /etc/sysconfig/network

hostname masternfs
hostname slavenfs   (主机名立即生效)
[[email protected] resource.d]# vim /etc/hosts

192.168.1.100 masternfs

192.168.1.200 slavenfs

[[email protected] ~]# scp /etc/hosts 192.168.1.200:/etc/

2.新建磁盘分区
fdisk -l (查看一下)
fdisk /dev/sdb (分区)(分区步骤简略)
partprobe /dev/sdb (使分区生效)
cat /proc/partitions (查看分区)
3.安装drbd的软件包(需要在网上下载软件包,http://mirrors.163.com

[[email protected] ~]# rpm -ivh drbd83-8.3.12-1.el5.centos.i386.rpm (主的软件包)

[[email protected] ~]# rpm -ivh kmod-drbd83-8.3.12-1.el5.centos.i686.rpm --force --nodeps (模块的支持,安装时需要解决依赖关系)

[[email protected] ~]# rpm -e drbd83-8.3.8-1.el5.centos (如何卸载软件包)

[[email protected] ~]# scp masternfs:*.rpm ./ (拷贝到另一个设备上安装)

4.编辑配置参数,可以查看安装后的文件包

[[email protected] ~]# vim /etc/drbd.conf (编辑这个主配置参数)

:r /usr/share/doc/drbd83-8.3.12/drbd.conf (读取这个文件夹)

[[email protected] ~]# cp -f /usr/share/doc/drbd83*/drbd.conf /etc/ (不然同步的时候会出错)

cp -f /usr/share/doc/drbd83*/drbd.conf /etc/(把配置文件复制到/etc

构建Heartbeat+DRBD+NFS高可用文件共享存储

[[email protected] ~]# cd /etc/drbd.d/ (主配置目录)

[[email protected] drbd.d]# ll

总计 4

-rwxr-xr-x 1 root root 1418 2012-01-29 global_common.conf


cp global_common.conf global_common.conf.bak (备份一下,如果配置出错,可以改)
[[email protected] drbd.d]# vim 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;

         }

}

构建Heartbeat+DRBD+NFS高可用文件共享存储

[[email protected] drbd.d]# vim web.res(此网页是自己要创建的后缀要是.res,此网页是定义资源的

vim  web.res

resource  web {

        on masternfs{

        device   /dev/drbd0;

        disk    /dev/sdb1;

        address  192.168.1.100:7789;

        meta-disk       internal;

        }   

        on slavenfs {

        device   /dev/drbd0;

        disk    /dev/sdb1;

        address  192.168.1.200:7789;

        meta-disk       internal;

        }   

}

构建Heartbeat+DRBD+NFS高可用文件共享存储

5.配置参数完成,拷贝到另一个机器上

[[email protected] drbd.d]# scp /etc/drbd.d/* slavenfs:/etc/drbd.d/ (拷贝资源文件和公共的文件)

[[email protected] drbd.d]# scp /etc/drbd.conf slavenfs:/etc/ (拷贝主配置文件)

6.drbd作为服务需要启动,但启动之前要同步才能启动。

[[email protected] drbd.d]# drbdadm create-md web (同步两个节点都要执行)

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created. (提示成功)

7.开启服务就连接上了

[[email protected] ~]# service drbd start (两边的同时)

[[email protected] drbd.d]# cat /proc/drbd    drbd-overview (两种方式查看设备启动的状态)

 0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

8.把节点一作为一个主设备

[[email protected] drbd.d]# drbdadm -- --overwrite-data-of-peer primary web (设置为主的)

9.在主设备上格式化文件系统 -L 是改卷标的可不加

[[email protected] drbd.d]# mkfs -t ext3 -L drbhua /dev/drbd0

10.新建挂载点,挂载上去

[[email protected] drbd.d]# mkdir /mnt/hua/

[[email protected] drbd.d]# mount /dev/drbd0 /mnt/hua/

[[email protected] drbd.d]# cd /mnt/hua/

[[email protected] hua]# ll

总计 16

drwx------ 2 root root 16384 12-30 22:24 lost+found

[[email protected] hua]# cp /etc/passwd ./ (拷贝一个文件用于测试,)

11.测试,需要把节点二备份的变成主的,则需要先把主的变成备份的

[[email protected] hua]# umount /mnt/hua/ (需要先卸载才能变成备份的)

[[email protected] ~]# drbdadm secondary web (变成备份的)

12.节点二上变成主的

[[email protected] ~]# drbdadm primary web (另一个)

[[email protected] ~]# mount /dev/drbd0 /mnt/hua/ 

[[email protected] ~]# cd /mnt/hua/ (进去查看可以查看文件已经有了)

[[email protected] hua]# ll

total 20

drwx------ 2 root root 16384 Dec 30  2012 lost+found

-rw-r--r-- 1 root root  1553 Dec 30  2012 passwd  (文件已经存在)

二.NFS上的配置

1.安装nfs软件,略

2.编辑共享的文件,两节点都做下面的配置

[[email protected] ~]# vim /etc/exports 

/web *(rw)   (编辑的内容)

[[email protected] ~]# service nfs start 

[[email protected] ~]# showmount -e slavenfs (两边都配置完后,查看一下共享的文件是否已经可以看到)

[[email protected] ~]# vim /etc/init.d/nfs (把这个文件的值改一下)

122         killproc nfsd -9
#/etc/init.d/nfs 脚本中的stop 部分中的killproc
#nfsd -2 修改为 -9
三、heartbeat的安装配置

1实现heartbeat高可用需要一些软件实现,需要安装上去

[[email protected] ~]# mount /dev/cdrom /mnt/cdrom/

[[email protected] ~]# yum localinstall heartbeat-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 perl-MailTools-1.77-1.el5.noarch.rpm libnet-1.1.4-3.el5.i386.rpm --nogpgcheck (localinstall本地安装,--nogpgcheck,无签名检测)

2.查看

[[email protected] ~]# rpm -pql heartbeat-2.1.4-9.el5.i386.rpm (查看解压后的文件夹有那些。)

[[email protected] ~]# cd /etc/ha.d/ (这个目录是heartbeat的主配置目录)

[[email protected] ha.d]# cd /usr/share/doc/heartbeat-2.1.4/ (安装后的配置文件)

3.[[email protected] heartbeat-2.1.4]# cp ha.cf authkeys haresources  /etc/ha.d/ (把配置文件拷贝过来)

4.[[email protected] ha.d]# vim ha.cf  (编辑这个心跳文件参数,编辑如下)

ucast  eth0 192.168.1.100 (对方的ip地址,另一台写1.200

auto_failback off

213 node    masternfs  

214 node    slavenfs (两个节点的地址)

5[[email protected] ~]# dd if=/dev/random bs=512 count=1 |openssl md5 (随机产生一个参数用md5加密)

0+1 records in

0+1 records out

128 bytes (128 B) copied, 0.000308478 seconds, 415 kB/s

9bf2f23aae3a63c16ea681295ffd7666

6[[email protected] ha.d]# vim authkeys (编辑认证文件)

auth 3

3 md5 9bf2f23aae3a63c16ea681295ffd7666

[[email protected] ha.d]# chmod 600 authkeys  (改变它的权限为600,不然重启不成功)

7.配置资源文件,把参数直接追加进去了
echo "masternfs IPaddr::192.168.1.150/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd" >> haresources
解释:192.168.1.150,是虚拟ip地址,/web是共享的文件
8.还需要创建一个文件关于nfs的,要受到heartbeat的控制

[[email protected] ha.d]# cd /etc/ha.d/resource.d/

[[email protected] resource.d]# touch killnfsd
chmod 755 /etc/ha.d/resource.d/killnfsd  (改变它的权限)
echo "killall -9 nfsd; /etc/init.d/nfs restart; exit 0 " >> /etc/ha.d/resource.d/killnfsd (把参数追加上去)


8.把配置拷贝到节点二上去,唯一改变的是心跳网卡地址

9.启动heartbeat服务,两边都启动

service heartbeat start
chkconfig heartbeat on

10.查看是主节点还是从节点,如下图所示,当heartbeats 停止时主设备变成了备份的,而另一端变成了主的

构建Heartbeat+DRBD+NFS高可用文件共享存储



11.拷贝文件验证
[[email protected] web]# ls
inittab lost+found--------验证此时文件仍然存在

12.ifconfig 查看网卡,发现多了一个,虚拟网卡,主要是把资源征用了

构建Heartbeat+DRBD+NFS高可用文件共享存储