昨天做了单独的DRBD,还存在一些疑问,今天通过这个DRBD+HeartBeat+NFS架构,并可以清楚的解答昨天的疑问了。实际上,DRBD只是作为磁盘冗余,而并不是像我之前理解的那样,同时提供2份一模一样的数据,它需要借助HeartBeat 虚拟出一个虚拟IP,并通过NFS挂载,才能完成。

【实验环境】
virtual box 
centos 6.4  最小化
【实验拓扑图】
【实验步骤】
1、配置主机名
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node1
[root@localhost ~]# vim /etc/hosts
192.168.56.120  node1
192.168.56.121  node2
[root@localhost ~]# hostname node1
===============================
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node2
[root@localhost ~]# vim /etc/hosts
192.168.56.120  node1
192.168.56.121  node2
[root@localhost ~]# hostname node2

2、配置DRBD
    参照前面的配置过程
[root@node1 ~]# cat /proc/drbd 
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 2013-07-29 08:48:43
 1: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:664 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

确保两个节点为一主一从即可。
3、安装配置NFS(node2的配置与node1一致,可以通过scp命令将相关配置文件拷贝到node2上即可)
[root@node1 ~]# yum -y install nfs nfs-utils rpcbind openssh-clients
[root@node1 ~]# vim /etc/exports 
/db     *(rw,sync,insecure,no_root_squash,no_wdelay)
修改nfs启动脚本
[root@node1 ~]# vim /etc/init.d/nfs
找到    killproc nfsd –2  相关行,并改为:killproc nfsd –9

启动nfs
[root@node1 ~]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@node1 ~]# service nfs start
Starting NFS services:                                        [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]

[root@node1 ~]# scp /etc/exports /etc/init.d/nfs 192.168.56.121:/etc/exports 
4、安装配置HeartBeat(node2配置同node1)
[root@node1 ~]# yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools
注:有些版本可能并没有heartbeat相关的rpm包,如果没有,可以下载源码包编译安装,或者通过配置epel软件仓库在线yum安装
[root@node1 ~]# wget http://mirrors.hust.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
[root@node1 ~]# rpm -ivh epel-release-6-8.noarch.rpm 

[root@node1 ~]#  yum clean all
[root@node1 ~]#  yum list
重新执行yum命令安装heartbeat
[root@node1 ~]#  yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools
确认已经安装heartbeat
[root@node1 ~]# rpm -qa |grep heartbeat
heartbeat-libs-3.0.4-1.el6.i686
heartbeat-3.0.4-1.el6.i686

复制模版文件
[root@node1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@node1 heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/

配置heartbeat主配置文件
[root@node1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@node1 ha.d]# vim ha.cf 

找到下面相关内容,去掉前面的#注释,并修改为如下内容:
debugfile /var/log/ha-debug        //打开错误日志报告
logfile /var/log/ha-log            // heartbeat 日志
logfacility    local0            
keepalive 2                        //两秒检测一次心跳线连接
deadtime 10                    //10 秒测试不到主服务器心跳线为有问题出现
warntime 6                    //警告时间(最好在 2 ~ 10 之间)
#initdead 120                //初始化启动时 120 秒无连接视为正常,或指定heartbeat。在启动时,需要等待120秒才去启动任何资源(最少应该设置为deadtime的两倍)
udpport 694                                    //使用udp 694端口
bcast eth0                                        //广播方式
#ucast eth0 192.168.1.20                     //单播方式连接(主从都写对方的 ip 进行连接)
auto_failback off                            //自动切换(主服恢复后可自动切换回来)这个不要开启
node    node1                                //声明主服务器
node    node2                                //声明备服务器
修改资源文件
[root@node1 ha.d]# vim haresources 
node1 IPaddr::192.168.56.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ex
t3 killnfsd

注意:这里的192.168.56.130 便是VIP
修改node2资源文件的时候节点名字应改为node2(node2与node1配置唯一一处不同)即:
[root@node2 ha.d]# vim haresources 
node2IPaddr::192.168.56.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ex
t3 killnfsd

[root@node1 ha.d]# vim authkeys 
auth 1
1 crc

[root@node1 ha.d]# vim resource.d/killnfsd      //加入以下内容
killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0
修改相关文件的权限
[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
Starting High-Availability services: INFO:  Resource is stopped
Done.

node2 上的配置与node1的配置基本上完全一样,可以从node1上直接拷贝过去,稍作修改即可
[root@node1 ha.d]# scp ha.cf authkeys haresources 192.168.56.121:/etc/ha.d/
[root@node1 ha.d]# scp resource.d/killnfsd 192.168.56.121:/etc/ha.d/resource.d
启动node1和node2的heartbeat
[root@node1 ha.d]# service heartbeat start
两个节点都启动heartbeat后,可以看到VIP在node1上:
5、测试
在客户端上测试:
[root@localhost ~]# yum install nfs nfs-utils
确保客户端能ping通VIP: 192.168.56.130
注意:我做实验的时候,发现ping这个Vip 时通时不通,而且heartbeat 频繁切换,但是node1与node2之间网络是通的,于是查看日志,发现有一个错误:
ResourceManager(default)[4917]: 2013/07/29_16:27:13 ERROR: Cannot locate resource script drbddisk
ResourceManager(default)[4917]: 2013/07/29_16:27:14 info: Retrying failed stop operation [drbddisk::r0]

仔细一看,发现/etc/ha.d/resource.d/ 目录下居然没有drbddisk这个脚本...
[root@node1 ha.d]# vim /etc/ha.d/resource.d/drbddisk
这里顺便附上drbddisk脚本: http://down.51cto.com/data/892360
[root@localhost ~]# ping 192.168.56.130
PING 192.168.56.130 (192.168.56.130) 56(84) bytes of data.
64 bytes from 192.168.56.130: icmp_seq=1 ttl=64 time=2.37 ms
64 bytes from 192.168.56.130: icmp_seq=2 ttl=64 time=0.394 ms
64 bytes from 192.168.56.130: icmp_seq=3 ttl=64 time=0.342 ms

在客户端挂载nfs
[root@localhost ~]# mount -t nfs 192.168.56.130:/db /mnt/nfs/
[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
192.168.56.130:/db on /mnt/nfs type nfs (rw,vers=4,addr=192.168.56.130,clientaddr=192.168.56.113)

[root@localhost ~]# ls /mnt/nfs/
hello.txt  hw.txt  lost+found 

可以看到现在nfs可以正常读写了。
在客户端看来,它只知道192.168.56.130 提供了nfs 网络共享目录,并不知道实际上,nfs是跑在node1和node2上,如果node1 宕机,node2可以通过heartbeat很快接管服务,而对于用户体验来说,无需做其他更改。
下面模拟node1宕机的情况:
通过一个脚本对nfs 不断的写入数据,并从另外一个终端通过tailf 查看,与此同时,停止node1的服务
这里,网上很多资料都是用这个脚本,通过这个脚本不断的touch x ,我觉得应该有问题。但不是脚本本身问题。
while true
do
echo ---\> trying touch x:`date`
 touch x
echo \<-----done touch x:`date`
 echo
sleep 1
done
我来分析一下:
网上的资料很多这样的:
[root@localhost ~]# mount 192.168.10.1:/mnt/web /mnt/nfs    # 挂载nfs目录
[root@localhost ~]# vim /mnt/test.sh            #创建上述脚本
[root@localhost ~]# bash /mnt/test.sh        # 执行脚本
执行完上面的操作后,就说看到类似于下面的输出,并且停掉node1的heartbeat后并没有中断,就说实验成功了。
---> trying touch x:2012年 07月 25日 星期三 05:29:40 CST
<-----done touch x:2012年 07月 25日 星期三 05:29:40 CST
实际上,从上面可以看到,挂载的nfs目录是/mnt/nfs这个目录,但是脚本的目录却是/mnt/test.sh,也就是说脚本并不是在nfs目录下,那么执行脚本的时候,毫无疑问,会在工作目录下touch x,就是说是在/mnt 目录touch x 而不是/mnt/nfs这个目录,那么实际上就并没对挂载的nfs 目录进行读写,只是一味的对不相干的/mnt这个目录进行写入操作,在停掉node1上的heartbeat之后,当然不会有任何影响。
我测试是这样做的:
[root@localhost ~]# vim test.sh
#!/bin/bash
while true
do
        echo "`date`" >> /mnt/nfs/date
        sleep 1
done

[root@localhost ~]# chmod +x test.sh
[root@localhost ~]# ./test.sh
停掉node1的heartbeat
[root@node1 ha.d]# service heartbeat stop
打开客户端的另一个终端,通过tailf观察写入情况
[root@localhost ~]# tailf /mnt/nfs/date 
Tue Jul 30 11:42:41 CST 2013
Tue Jul 30 11:42:42 CST 2013
Tue Jul 30 11:42:43 CST 2013
Tue Jul 30 11:42:44 CST 2013
Tue Jul 3011:42:45CST 2013
Tue Jul 3011:44:42CST 2013
Tue Jul 30 11:44:43 CST 2013
Tue Jul 30 11:44:44 CST 2013

从上面可以看到,node1宕机之后,会有一小段时间停止服务,过后自动服务自动恢复,即node2接管服务。
疑问:
        停掉node1之后,通过日志可以看到node2很快接管了vip,但是在客户端,对挂载的nfs目录写入,却需要差不多2分钟的停止服务时间,为什么会那么久?理论上不是应该只有短暂的几秒吗?
    上述问题,还望高手出面帮忙解答一下。

DRBD+HeartBeat+NFS 架构相关推荐

  1. 红帽企业集群和存储管理之DRBD+Heartbeat+NFS实现详解

    红帽企业集群和存储管理之 DRBD+Heartbeat+NFS实现详解 案例应用背景 本实验部署DRBD + HEARDBEAT + NFS 环境,建立一个高可用(HA)的文件服务器集群.在方案中,通 ...

  2. Centos6.3下DRBD+HeartBeat+NFS配置笔记

    --------------闲   扯------------------ 这里首先感谢酒哥的构建高可用的Linux服务器的这本书,看了这本书上并参考里面的配置让自己对DRBD+HeartBeat+N ...

  3. Centos5.6 x86_64下安装DRBD+Heartbeat+NFS

    Centos5.6 x86_64下安装DRBD+Heartbeat+NFS 2012-08-29 10:49:01 转载http://andrewyu.blog.51cto.com/1604432/9 ...

  4. V 8 nfs+drbd+heartbeat

    V 8 nfs+drbd+heartbeat nfs+drbd+heartbeat,nfs或分布式存储mfs只要有单点都可用此方案解决 在企业实际生产场景中,nfs是中小企业最常用的存储架构解决方案之 ...

  5. 前端httpd+keepalived加后端heartbeat+nfs+drbd实现httpd服务的高效应用及资源统一管理...

    本文四台机器:Centos6.0 lv1.lv2两台机器做httpd的前端,使用keepalived做高可用:虚拟出一个vip供client访问. node1.node2应用drbd技术实现文件镜像存 ...

  6. drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理

    不久前的一次机房网络故障,再一次对我们在Heartbeat+DRBD+MySQL数据库架构运维水平的一个考验,之前不止一次的测试与线上部署,还有之后大言不惭的关于该架构组件的所谓深入理解,在这一次不经 ...

  7. mysql heartbeat keepalived_LVS+keepalived+DRBD+heartbeat+mysql

    wKiom1XQKIaC4YcsAAH6io_UKl8752.jpg IP地址规划: LVS: 10.1.1.23 主LVS+keepalived 10.1.1.22 备LVS+keepalived ...

  8. Keepalived+LVS+Nginx+DRBD+Heartbeat+Zabbix集群架构

    2019独角兽企业重金招聘Python工程师标准>>> 本文由阿呆&zhdy合作完成! 一.准备工作: 1.1 6台模拟服务器: 确保每台机器 全部关闭 firewall 以 ...

  9. mysql+drbd+heartbeat高可用配置说明

    环境描述: 系统版本:Red Hat Enterprise Linux Server release 5.5 (Tikanga)x86_64 2.6.18-164.el5 mysql版本:mysql- ...

最新文章

  1. 计算机导航辅助教程,计算机导航辅助下微创人工全膝关节置换的初步经验
  2. Ubuntu安装源安装nodejs
  3. 你的气质里藏着 英文_有小肚腩女人穿衣要讲究,针织套装裙洋气又时髦,穿出优雅气质...
  4. oracle 报错pls 00405,oracle - 检查是否存在PLS-00405:在此上下文中不允许子查询 - 堆栈内存溢出...
  5. python如何从一个dataframe提取相应的行组成一个新的dataframe_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!...
  6. js将文字填充与canvas画布再转为图片
  7. 使用mysql事件_MySQL事件的使用详解
  8. VBA 用 Environ 获取系统环境变量
  9. opencv生成日志_OpenCV在Android环境下的使用方法
  10. 阿里云成为MariaDB基金会白金会员 全球唯一入选云计算公司
  11. js中的数组和字符串的一些方法
  12. 误删除分区下的数据恢复
  13. CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表
  14. Atitit ioc 之道 attilax著 第2章 装配Bean 33 2.1 Spring配置的可选方案 34 2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.
  15. hadoop学习资源与路线图
  16. MySQL 数据库崩溃(crash)的常见原因和解决办法---发表到 《数据和云》 公众号
  17. 阈值分割python实现
  18. Vue实战篇三十四:给新闻WebApp加入模拟注册登录功能
  19. Word2007、Word2010、Word2013空格变成小点解决
  20. 最简单的加密---异或加密

热门文章

  1. 使用SoapHeader对WebService进行身份验证
  2. 解决FusionCharts联动的中文乱码.
  3. 如何在eclipse中使用分支合并功能
  4. think php 缩放图片,THINKPHP+JS实现缩放图片式截图的实现
  5. 公式 有效值_纯电阻电路电功率公式
  6. MySQL高级 - 锁 - MyISAM表锁 - 小结
  7. MySQL高级 - SQL优化 - group by 优化
  8. MySQL 高级 - 存储过程 - 概述
  9. Nginx-常见服务器的对比
  10. 返回后通知(After Return Advice)