DRBD+HEARTBEAT+NFS实现高可用性群集

一,DBRB概述

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

DRBD Logo

DRBD Logo

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

DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。

DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

工具:

drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令,

drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用

drbdmeta:管理META数据结构,平时很少直接用。

在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)

每个资源有个角色,是Primary或Secondary,下面简称“主”和“备”

主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。

备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。

角色可以改变。

DRBD功能

单主模式:典型的高可靠性 集群 方案。

复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从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功能,可以代替使用一个 共享盘 阵.因为数据同时存在于 本地主机 和远程主机上,

切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.

DRBD的工作原理如下图:

+--------+ | 文件系统 | +--------+

|

V

+--------+| 块设备层 | | (/dev/drbd1) +--------+

| |

V V

| 本地硬盘 | | (/dev/hdb1) | | 远程主机硬盘 | | (/dev/hdb1) |

二,heartbeat概述

Heartbeat

     Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。下面描述了 heartbeat 模块的可靠消息通信机制,并对其实现原理做了一些介绍。

      heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

      高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在Linux-HA里这个功能由一个叫做heartbeat的程序完成。

三,NFS概述

NFS简介
NFS是Network File System的简写,即网络文件系统.

网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

     以下是NFS最显而易见的好处:

1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。

2.用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。

3.诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。

NFS组成
NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。
实际应用
NFS 有很多实际应用。下面是比较常见的一些:

1.多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。

2.在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。

3.几台机器可以有通用的/usr/ports/distfiles 目录。这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。

四,案例拓扑

     2012-10-19_104438

[root@node1 ~]# vim /etc/hosts两边同做

[root@node1 ~]#hwclock -s //同步始终

[root@node1 ~]# hostname node1.a.com

2012-10-17_230952
[root@node1 ~]# fdisk /dev/sda
Command (m for help): p
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (1354-2610, default 1354):
First cylinder (1354-2610, default 1354):
Using default value 1354
Last cylinder or +size or +sizeM or +sizeK (1354-2610, default 2610):
2012-10-17_225257
Command (m for help): n
First cylinder (1354-2610, default 1354):
Using default value 1354
Last cylinder or +size or +sizeM or +sizeK (1354-2610, default 2610): +1g
Command (m for help): p
Command (m for help): w
[root@node1 ~]# partprobe /dev/sda
[root@node1 ~]# cat /proc/partitions
2012-10-17_225942
[root@node1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm
[root@node1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
[root@node1 ~]# vim /etc/drbd.conf
:r /usr/share/doc/drbd83-8.3.8/drbd.conf
保存(一地要做)
2012-10-17_232913
[root@node1 ~]# cd /etc/drbd.d/
[root@node1 drbd.d]# cp global_common.conf global_common.conf .bak
[root@node1 drbd.d]# vim global_common.conf
2012-10-17_234734 此处yes一定改为NO

2012-10-17_234742

全部删除后重做
[root@node1 drbd.d]# vim web.res
2012-10-17_235835
拷贝到另一台
[root@node1 drbd.d]# scp * node2.a.com:/etc/drbd.d/
[root@node1 drbd.d]# scp /etc/drbd.conf node2.a.com:/etc/
[root@node1 drbd.d]# drbdadm create-md web

第二台同样

[root@node1 drbd.d]# modprobe drbd
[root@node1 drbd.d]# service drbd start
必须同时启动
[root@node1 drbd.d]# cat /proc/drbd
2012-10-18_105239
[root@node1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary web指定node1为资源主节点
[root@node1 drbd.d]# cat /proc/drbd

2012-10-18_113706
[root@node1 drbd.d]# mkfs -t ext3 -L drbdweb /dev/drbd0
[root@node1 drbd.d]# mkdir /mnt/1 && mount /dev/drbd0 /mnt/1
[root@node1 drbd.d]# df -h
2012-10-18_113553
[root@node1 drbd.d]# service drbd status

NFS

[root@node1 drbd.d]# vim /etc/exports
image
[root@node1 drbd.d]# service portmap start && chkconfig portmap on
[root@node1 drbd.d]# service nfs start && chkconfig nfs on
[root@node1 drbd.d]# vim /etc/init.d/nfs
2012-10-18_115111
两台服务器NFS配置须一致
安装所需的文件(node1和node2上都需执行的)
#ll
total 3088
drwxr-xr-x 2 root root    4096 Aug 30 21:14 Desktop
-rw------- 1 root root    1175 Aug 30 04:50 anaconda-ks.cfg
-rw-r--r-- 1 root root  221868 Oct 17 21:50 drbd83-8.3.8-1.el5.centos.i386.rpm
-rw-r--r-- 1 root root 1637238 Oct 12 14:09 heartbeat-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root  293349 Oct 12 14:09 heartbeat-devel-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root  230890 Oct 12 14:09 heartbeat-gui-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root  111742 Oct 12 14:09 heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root   92070 Oct 12 14:09 heartbeat-pils-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root  179199 Oct 12 14:09 heartbeat-stonith-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root   35236 Aug 30 04:50 install.log
-rw-r--r-- 1 root root    3995 Aug 30 04:49 install.log.syslog
-rw-r--r-- 1 root root  125974 Oct 17 21:50 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
-rw-r--r-- 1 root root   56817 Oct 12 14:09 libnet-1.1.4-3.el5.i386.rpm
-rw-r--r-- 1 root root   92071 Oct 12 14:09 perl-MailTools-1.77-1.el5.noarch.rpm
安装heartbeat
[root@node1 ~]#  yum localinstall *.rpm --nogpgcheck -y
[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
24 debugfile /var/log/ha-debug
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2
56 deadtime 10
76 udpport 694
121 bcast eth0 //此行可以添加在任意一行
157 auto_failback off
211 node director1.a.com
212 node director2.a.com

[root@node1 ha.d]# echo "director1.a.com IPaddr::192.168.1.1/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd">>/etc/ha.d/haresources
[root@node1 ha.d]# vim authkeys
23 auth 1
24 1 crc
[root@node1 ha.d]# cd /etc/ha.d/resource.d/
[root@node1 resource.d]#  echo "killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0" >>/etc/ha.d/resource.d/killnfsd
[root@node1 resource.d]# chmod 600 /etc/ha.d/authkeys
[root@node1 resource.d]# chmod 755 /etc/ha.d/resource.d/killnfsd
[root@node2 resource.d]# service heartbeat start
node2同样
测试

再来一台
root@station ~]# mkdir /mnt/nfs
[root@station ~]# mount 192.168.145.88:/web /mnt/nfs
[root@station ~]# vim /mnt/test.sh
2012-10-18_151123
[root@station ~]# cd /mnt/nfs/
[root@station nfs]# bash /mnt/test.sh 
2012-10-18_151326
断掉
[root@node1 ha.d]# service heartbeat status
heartbeat OK [pid 2557 et al] is running on node1.a.com [node1.a.com]...
[root@node1 ha.d]# service heartbeat stop
测试客户机图

断一下后又开始

2012-10-18_170404

 

你可能感兴趣的:(target,blank,的)