实验环境

系统CentOS 6.5 X64
Ip:172.16.25.162  172.16.25.163
epel源
每台主机有/dev/sdb1: 1073 MB挂载点/test供drbd使用
先升级nfs先关组件:yum updatenfs-utilsnfs-utils-lib nfs4-acl-toolsyum updaterpcbind

一、安装配置

安装配置drbd:

[root@master~]#wget http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz
[root@master~]#tar zxvf drbd-8.3.16.tar.gz
[root@master~]#./configure --prefix=/usr/local/drbd--with-km     #--with-km是启用内核模块
[root@master~]#make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64   #KDIR随系统而变
[root@master~]#make install
[root@master~]#mkdir -p /usr/local/drbd/var/run/drbd
[root@master~]#cp /usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/
[root@master~]#chkconfig --add drbd; chkconfigdrbd on
[root@master~]#cp drbd/drbd.ko/lib/modules/2.6.32-431.el6.x86_64/kernel/lib/
[root@master~]#modprobe drbd
[root@master~]#lsmod |grepdrbd      #验证drbd模块是否加载成功
  1. 准备底层存储设备:

    一块硬盘、软raid、LVM逻辑卷、甚至另一个drbd设备(drbd叠加)

  2. 准备网络配置:

    推荐(不是必须)在专用的、直连的、千兆的网络上运行drbd。如果通过交换机运行drbd,建议设置一个热备的交换机同时the Linux bonding driver (in active-backup mode) is recommended

    注意三点:

    1) Our two DRBD hosts each have a currently unused network interface, eth1,with IP addresses 10.1.1.31 and 10.1.1.32 assigned to it, respectively.
    2) No other services are using TCP ports 7788 through 7799 on eitherhost.
    3) The local firewall configuration allows both inbound and outboundTCP connections between the

  3. 配置drbd

    drbd所有配置均在/etc/drbd.conf,默认的,该配置文件只是一个‘框架’,有如下两行
    include"/etc/drbd.d/global_common.conf";
    include"/etc/drbd.d/*.res";

    /etc/drbd.d/global_common.conf包含drbdglobal和common段的设置,*.res文件每个包含一个resource段的配置。

    注意:确保每个节点上drbd的配置文件保持一致

    实验环境配置文件

    global {usage-count yes;
    }
    common {protocol C;       # A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作                # B 收到接收确认就认为完成了写入操作# C 收到写入确认就认为完成了写入操作
    }
    resource r0 {on master {       #master为主机名,配置文件里必须和uname–n输出的一致,不一致会导致no resources defined!device   /dev/drbd1;disk     /dev/sdb1;address  172.16.25.162:7789;meta-disk internal;}on slave {device   /dev/drbd1;disk     /dev/sdb1;address  172.16.25.163:7789;meta-disk internal;}
    }
  4. 初始化resource

    创建设备元数据,该步骤只在设备初始化时执行一次,在两台server分别执行
    [root@master~]#drbdadm create-md r0(resource名称)

    一台报错:drbdadm create-md r0: exited with code 40
    解决方法dd if=/dev/zero of=/dev/sdb1 bs=1M count=10(count数量不限,主要是为了清除/dev/sdb1上的分区信息)。成功截图如下

  5. 启动drbd

    [root@master~]#/etc/init.d/drbd start

    刚启动时,两台机器上drbd状态均为secondary

    在drbd主上执行drbdsetup/dev/drbd0 primary -o,将drbd状态改为primary(无此步,会导致格式化/dev/drbd0时报错)。执行过此命令以后,可以通过drbdadmprimary/secondary r0来切换主被动状态

  6. 挂载drbd设备

    现在可以把主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作.

    在drbd primary节点(否则格式化会报错Wrong medium type while trying to determine filesystem size)

    [root@master ~]#mkfs.ext4/dev/drbd1

    [root@master~]#mount /dev/drbd1 /test

    二、使用管理

  7. 状态查看

    ~]# drbd-overview `
    或者
    ~]# cat /proc/drbd
    version: 8.3.16 (api:88/proto:86-97)GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build byroot@master, 2015-03-29 15:25:431: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent Cr-----ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0 ep:1 wo:f oos:1044124

    cs: connect state ro:表示角色信息 ds: 磁盘状态信息Inconsistent/UpToDatens/nr:网络发送/接收的数据包信息dw/dr:设备读写信息

    “/proc/drbd”中显示了drbd当前的状态。第一行的Secondary/Secondary 表示两台主机的状态,都是”备机”状态.ds是磁盘状态,都是”不一致”状态. 这是由于DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化一个主机。在master server执行

    [root@master ~]#drbdsetup /dev/drbd1 primary –o
    或者
    [root@master ~]#drbdadm primary r0

    再看两台的/proc/drbd


    倒数第二行可以看到正在从主向备同步数据

    日志变化(/var/logs/message)

    主机:

    备机:

  8. DRBD的主备机切换

    有时,你需要将DRBD的主备机互换一下.可以执行下面的操作:
    在主机上,先要卸载掉DRBD设备.

    [root@master /]# umount /mnt/drbd1

    将主机降级为”备机”

    [root@master /]# drbdadm secondary r0
    [root@master /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14
    1: cs:Connectedst:Secondary/Secondaryds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0
    resync: used:0/31 hits:0 misses:0starving:0 dirty:0 changed:0
    act_log: used:0/127 hits:0 misses:0starving:0 dirty:0 changed:0

    现在,两台主机都是”备机”
    在备机slave上,将它升级为”主机”

    [root@slave /]# drbdadm primary r0
    [root@slave /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14
    1: cs:Connectedst:Primary/Secondaryds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0
    resync: used:0/31 hits:0 misses:0starving:0 dirty:0 changed:0
    act_log: used:0/127 hits:0 misses:0starving:0 dirty:0 changed:0

    现在,slave成为了”主机”.你可以把它的/dev/drbd1进行挂载和使用了.同样,数据会被同步到master的/dev/drbd0上

###三、配合keepalived实现自动fail-over
Keepalived配置文件(主机):

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_scriptchk_nfs {script "/etc/keepalived/check_nfs.sh"interval 5}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nfs}notify_stop /etc/keepalived/notify_stop.sh         #脚本见附件notify_master /etc/keepalived/notify_master.sh     #脚本见附件virtual_ipaddress {172.16.200.234/24}
}

备机

! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL}
vrrp_instance VI_1 {state BACKUPinterface eth1virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}notify_master /etc/keepalived/notify_master.sh     #脚本见附件notify_backup /etc/keepalived/notify_backup.sh     #脚本见附件virtual_ipaddress {172.16.200.234/24}
}

四、系列验证实验

nfs服务端配置:/test *(sync,rw,no_root_squash)
  1. 自动切换测试:

    关闭主上keepalived,会按照预期流程走。关闭主上nfs----卸载资源设备----主drbd降级----备drdb升级----备挂载资源设备----备启动nfs服务。但是在客户端看来,切换时间过长,切换后打开文件约有1.5分的延时,如图

  2. 连续写测试:

    1. 在nfs客户段执行for i in {1..500};do dd if=/dev/zero of=/ljk/$i.filebs=1M count=1;done

      (/ljk为客户端挂载点,用dd向挂载点内写入500个1M的文件)。执行过程中在主关闭keepalived,验证写入过程是否会中断

      经验证,写入过程没有中断,但中会出现一段时间的延时(同样比正常慢了1.5分左右)

    2. 客户端从其他目录向挂载点拷贝文件,中途开启原主的keepalived(vip自动切回主,产生一次切换动作)

      正常拷贝:time cp -av/data0/songjian/dhmh/* /ljk/用时1m57s

      有切换动作拷贝:在下图所示文件处产生停顿,最终用时3m43

      检查切换过程产生中断可能受影响的文件和原文件是否一致,经md5sum验证,切换过程中受影响复制产生延迟的文件内容未受影响

      经验证,拷贝过程不中断,并且文件状态亦为受到切换动作的影响

    3. 连续读测试

      客户端挂载点向其他目录拷贝文件,如下图文件出产生延时

      Md5sum验证文件一致性ok,如下图

    疑问:关于切换动作导致的延迟时间问题,是哪里导致了切换过程中出现延时;是否文件量越大延迟时间越长;在nfs客户端测试

    在不同数量、大小的文件中打开统一文件测试延时

    FilesystemSizeUsedAvailUse% Mounted on
    172.16.25.234:/test  1004M197M 757M  21% /ljk
    197M小文件,切换后随即打开文件延时1m47s
    172.16.25.234:/test  1004M 461M  492M  49% /ljk
    461M小文件,切换后随即打开文件延时2m16s
    172.16.25.234:/test  1004M 641M  313M  68% /ljk
    641M小文件,切换后随即打开文件延时2m45s
    192.168.0.234:/test           3.0G 2.5G  393M  87% /ljk
    2.5G中大文件,切换后随即打开文件延时1m45
    同样在641M小文件的前提:切换动作后,隔一段(3分钟)再打开文件,无延时
    另外,在nfs server上主备切换后,在新的nfs server打开文件无延时,故可排除drbd层面的原因。

    关于延时最终结论:nfs服务从主切换到备,从系统日志

    May 22 00:10:58 slave kernel: NFSD: Using/var/lib/nfs/v4recovery as the NFSv4 state recovery directory
    May 22 00:10:58 slave kernel: NFSD: starting 90-second grace period

    看出相当于一次nfs服务重启操作,有一个90s的平滑重启过程,延时时间与文件数量及大小无关。

    也再一次验证了drbd提供的数据一致性功能(包括文件的打开和修改状态等),在客户端看来,真个切换过程就是‘一次nfs重启’(主nfs停,备nfs启)。

附件:keepalived状态改变时所触动的脚本

drbd+keepalived nfs高可用方案实践相关推荐

  1. NFS 高可用方案(NFS+keepalived+Sersync)

    NFS 高可用方案(NFS+keepalived+Sersync) 1. 简述 1.1 介绍 本方案 NFS 的高可用方案,应用服务器为 Client ,两台文件服务器分别Master和 Slave, ...

  2. NFS高可用方案:NFS+keepalived+Sersync

    1.背景 因为某系统需要部署生产,但是云平台的nas存储资源不足需要重新采购,采购周期较长,需要有一个临时的解决方案,这样时候就需要采用nfs服务来提供网络存储服务了,在部署nfs服务的时候需要考虑生 ...

  3. DNS域名服务器双master+ntp时间服务器双主+keepalived企业高可用方案 附脚本

    一.环境 [root@localhost ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6.6 (Santiago) Kerne ...

  4. 高可用mysql笔记_MySQL笔记-高可用方案

    MySQL笔记-高可用方案 一.概述 MYSQL高可用方案有多种,本次针对其中部分方案进行实践.包括主从,双主,myql+keepalived, mysql+mycat+keepalived. 纸上得 ...

  5. MySQL高可用方案-PXC环境部署记录

    之前梳理了Mysql+Keepalived双主热备高可用操作记录,对于mysql高可用方案,经常用到的的主要有下面三种: 一.基于主从复制的高可用方案:双节点主从 + keepalived 一般来说, ...

  6. MYSQL(高可用方案)

    本次专题是 MySQL高可用方案选型,这个专题想必有很多同学感兴趣. 高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题. 可选MySQL高可用方案 MySQL的各种高可用方 ...

  7. mysql的高可用方案-PXC方案(综合各方的资料)

    一.基于主从复制的高可用方案:双节点主从 + keepalived 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 一般来说,中小型规模的时候,采用这种 ...

  8. MySQL高可用方案选型参考

    高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题. 可选MySQL高可用方案 MySQL的各种高可用方案,大多是基于以下几种基础来部署的: 基于主从复制: 基于Galera ...

  9. CentOS7搭建keepalived+DRBD+NFS高可用共享存储

    CentOS7搭建keepalived+DRBD+NFS高可用共享存储 一.服务器信息 IP地址 类型 主机名 操作系统 内存 磁盘 172.25.10.100 主服务器 node1 centos7 ...

最新文章

  1. html javascript 遍历数组、字符串
  2. Navigator 对象 深入研究
  3. 在ARM Linux下使用GPIO模拟SPI时序详解
  4. 突然不能 ip访问服务器文件夹,用友U8 工作站连接不到服务器,ping IP及服务器名都正常,访问服务器共享文件夹也正常...
  5. python学习笔记:第19天 类的约束、异常、MD5和logging
  6. SpringBoot教程
  7. 将Tomcat集成到eclipse中并写出第一条web语句
  8. struts2中struts:iterator标签的使用
  9. 庖丁解牛之-Android平台RTSP|RTMP播放器设计
  10. openwrt编译smartdns_ubuntu下交叉编译PandoraBox/潘多拉 k2p/mipsel软件openssl和smartdns
  11. C# TCP异步通信TcpClient
  12. 牛客每日练习----​​​​​​​cayun日常之三七配对,ChiMu need water,mxh道歉记
  13. 虚拟机黑裙加载硬盘_在Promox VE(PVE)虚拟机安装黑群晖并开启硬盘休眠的方法...
  14. Jenkins之工作流程原理
  15. html图片闪烁设置,HTMLCSS基础-图片按钮闪烁解决方案
  16. 开源项目—在线简历编辑工具
  17. 011235813用java写出来_C 编程练习题大全(带答案)
  18. JavaScript_ES5和ES6
  19. ×××未了的黄河情结
  20. 掏心掏肺,教你如何把苍白的人生写成老板都心动的简历

热门文章

  1. 加速网站访问的一些实践体会
  2. 【Linux】Linux下怎么下载安装Chrome?
  3. Maximum modulus principle and its corollary(Stein复分析)
  4. 【Fiddle】The Fiddler AutoResponder is enabled, but this request did not match any of the listed rules
  5. 等额本息贷款每月还款金额推导过程
  6. SQL 常用基础语句
  7. Navicat Premium 12安装激活教程_不需要激活工具直接激活
  8. 计算机领域会议期刊,数据挖掘等计算机领域顶级会议期刊~(转)
  9. BurpSuite爆破(Intruder)模块四种模式介绍
  10. oj2448: 分离正整数中的各位数