使用drbd+keepalived+nfs+shell实现远程共享文件高可用

  drbd简介:drbd是一种文件可以实时同步的技术,通常都是主从同步,从节点复制主节点的数据,并且主从之间可以进行切换
  keepalived简介:keepalived是一种可以将一个ip地址绑定到一台服务器上,而如果这台服务器发生故障,就将这个ip地址切换到另一台服务器的技术
  nfs简介:nfs是一个文件远程共享的技术

步骤目录:
步骤一:环境准备
1.1 准备三台主机,一台做主节点,一台做从节点,一个被当作客户端用于测试
1.2 从节点做主节点的冗余,客户端挂载他们vip的nfs硬盘,vip指向主机节点,如果主节点挂掉,vip则自动指向从节点,形成高可用,站住这次选择的vip是192.168.1.220
1.3 两台主机的系统环境为centos7或者centos6(最好是centos7)
1.4 主节点主机改名为node1,从节点命名为node2,客户端改名为client
1.5 三台主机能够相互ping通(站主的node1 ip地址为:192.168.1.221,node2 ip地址为:192.168.1.222)
1.6 node1和node2主机能够通过主机名ping通自己和对方(通过修改配置文件/etc/hosts实现)、
1.7 node1和node2主机要能够无密钥ssh远程对方,包括远程ip地址和主机名(可以使用ssh-keygen和ssh-copy-id命令实现)
1.8 node1和node2主机要保证时间同步
1.9 三台主机都要配置好centos系统镜像的默认yum源
2.0 node1和node2主机都要新加一块同样大小的硬盘

步骤二:在node1和node2上安装drbd并配置
2.1 安装drbd文件系统主从同步软件(同时在node1和node2上操作)
2.1.1 drbd的安装方式选择
(drbd在默认yum源里是没有安装包的,要安装drbd可以选择以下几种方式)
2.1.1.1 使用drbd官方提供的网络yum安装(站主本次选用的方法)
2.1.1.2 使用drbd官方源码安装(不推荐)
2.1.1.3 使用drbd的rpm包安装

2.1.2 使用drbd官方的网络yum源安装drbd(要保证两台服务器能连外网)
2.1.2.1 CentOS 6.x的安装方式如下
2.1.2.2 CentOS 7.x的安装方式如下
2.2 配置drbd的配置文件
2.2.1 修改/etc/drbd.conf配置文件
2.2.2 修改/etc/drbd.d/global_common.conf配置文件
2.2.3 创建/etc/drbd.d/nfsdrbd.res配置文件
2.2.4 将在node1上配置好的/etc/drbd.conf、/etc/drbd.d/global_common.conf和/etc/drbd.d/nfsdrbd.res配置文件拷贝到node2上面

2.3 启动drbd服务并创建drbd设备
2.3.1 启用drbd服务
2.3.2 创建并查看drbd服务新生成的硬盘
2.3.2.1 在生成drbd硬盘之前是有没有drbd硬盘的
2.3.2.2 创建drbd硬盘
2.3.2.3 创建drbd硬盘后就能看到对应的drbd硬盘了
2.4 使用drbd服务
2.4.1 查看以下就会发现,默认drbd的所有节点都是从节点,需要设置之后才能进行主从同步
2.4.2 设置drbd主节点
2.4.3 拥有主节点之后就可以在主节点上格式化并挂载(格式化只是在磁盘上写入信息,所以也是可以同步过去的)
2.4.3.1 格式化drbd文件系统
2.4.3.2 挂载drbd文件系统
2.4.3.3 此时就可以在drbd文件系统里写入数据了

步骤三:在node1和nod2上安装NFS并配置
3.1 服务端安装nfs-utils软件
3.2 生成要共享的文件夹和文件
3.3 配置nfs的设置
3.4 重启nfs服务
3.5 开机自启nfs服务
3.6 查看nfs共享状态

步骤四:在node1和node2上安装keepalived并配置
4.1 安装keepalived
4.2 配置node1和node2的keepalived配置文件
4.3 启动keepalived
4.4 此时开启客户端已经可以通过vip挂载nfs磁盘了

步骤五:在node1和node2上编制对应的监控切换脚本,实现nfs的高可用
5.1 在node1上编制一个只要检测到本机nfs和drbd服务停止就停止keepalived服务对脚本,启动并设置为开机自启
5.1 在node2上编制一个检测到vip的nfs服务共享中断就让自己成为drbd主节点并挂载对脚本,启动并设置为开机自启
5.1.1 首先让node2直接挂vip的nfs磁盘(用于让脚本能够判断vip的nfs磁盘是否可用)
5.1.2 编制脚本,启用脚本并设置为开机自启
5.1.3 注意如果node2系统重启了之后需要再挂载192.168.1.220:/content之后,这个脚本才能器自动切换的作用

步骤六:使用客户端验证NFS共享存储的高可用
6.1 客户端安装nfs-utils软件
6.2 客户端启动nfs服务
6.3 客户端查看服务端的nfs服务
6.4 客户端挂载nfs共享存储
6.5 关掉node1上面的keepalived服务,或者直接让他关机
6.6 而此时在node2上查看可以看见他已经是drbd主从同步的主节点了

具体的操作步骤:
步骤一:环境准备
1.1 准备三台主机,一台做主节点,一台做从节点,一个被当作客户端用于测试
1.2 从节点做主节点的冗余,客户端挂载他们vip的nfs硬盘,vip指向主机节点,如果主节点挂掉,vip则自动指向从节点,形成高可用,站住这次选择的vip是192.168.1.220
1.3 两台主机的系统环境为centos7或者centos6(最好是centos7)
1.4 主节点主机改名为node1,从节点命名为node2,客户端改名为client
1.5 三台主机能够相互ping通(站主的node1 ip地址为:192.168.1.221,node2 ip地址为:192.168.1.222)
1.6 node1和node2主机能够通过主机名ping通自己和对方(通过修改配置文件/etc/hosts实现)、
1.7 node1和node2主机要能够无密钥ssh远程对方,包括远程ip地址和主机名(可以使用ssh-keygen和ssh-copy-id命令实现)
1.8 node1和node2主机要保证时间同步
1.9 三台主机都要配置好centos系统镜像的默认yum源
2.0 node1和node2主机都要新加一块同样大小的硬盘
(站主在node1和node2新加的硬盘都叫vdb,大家添加完成了之后使用以下命令确认一下:
[root@node1 ~]# fdisk -l | grep /dev/sdb
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
[root@node2 ~]# fdisk -l | grep /dev/sdb
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
)

步骤二:在node1和node2上安装drbd并配置
2.1 安装drbd文件系统主从同步软件(同时在node1和node2上操作)
2.1.1 drbd的安装方式选择
(drbd在默认yum源里是没有安装包的,要安装drbd可以选择以下几种方式)
2.1.1.1 使用drbd官方提供的网络yum安装(站主本次选用的方法)
2.1.1.2 使用drbd官方源码安装(不推荐)
2.1.1.3 使用drbd的rpm包安装

2.1.2 使用drbd官方的网络yum源安装drbd(要保证两台服务器能连外网)
2.1.2.1 CentOS 6.x的安装方式如下
(在node1和node2上都要操作)
[root@node1 ~]# rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
[root@node1 ~]# yum -y install drbd83-utils kmod-drbd83
[root@node1 ~]# systemctl enable drbd

[root@node2 ~]# rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
[root@node2 ~]# yum -y install drbd83-utils kmod-drbd83
[root@node1 ~]# systemctl enable drbd

2.1.2.2 CentOS 7.x的安装方式如下
(在node1和node2上都要操作)
[root@node1 ~]# rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@node1 ~]# yum install -y drbd84-utils kmod-drbd84

[root@node2 ~]# rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@node2 ~]# yum install -y drbd84-utils kmod-drbd84

2.2 配置drbd的配置文件
2.2.1 修改/etc/drbd.conf配置文件
(只在node1上面操作)
[root@node1 ~]# vim /etc/drbd.conf
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";
include "drbd.d/*.res";

2.2.2 修改/etc/drbd.d/global_common.conf配置文件
(只在node1上面操作)
[root@node1 ~]# vim /etc/drbd.d/global_common.conf
# DRBD is the result of over a decade of development by LINBIT.
# In case you need professional services for DRBD or have
# feature requests visit http://www.linbit.com

global {
    usage-count no;                #让不让linbit公司收集目前drbd的使用情况,这个在默认的情况下是yes,也就是开启的,写no就是关闭
}
common {                            #common的作用是如果DRBD没有额外定义属性那么就使用common里的属性;
    protocol C;                     #使用 C 协议
    handlers {                      #处理消息的一些策略
        pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -  f";    #当主节点被迫降级时怎么办
        pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -  f";    #发生脑裂以后,找不到主节点了怎么办
        local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";    #在本地磁盘发生io错误以后,所做的操作。通告i/o错误,通告我要关机了,强制关机
    }
    startup {
    }
    options {
    }
    disk {
        on-io-error detach;         #设置同步IO错误的策略,drbd发生i/o错误以后,所做的动作,detach让资源离线。
    }
    net {
    }
    syncer {
                rate 1000M;    #定义同步速率,这个很容易就把整个网络占满,所以在第一次同步完成后,可以改小点。
        }

}

(补充:这里on-io-error 策略可以为以下选项之一: 
detach      :分离,这是默认和推荐的选项,如果在节点上发生底层的硬盘I/O错误,它会将设备运行在Diskless无盘模式下 
pass_on     :DRBD会将I/O错误报告到上层,在主节点上,它会将其报告给挂载的文件系统,但是在此节点上就往往忽略(因此此节点上没有可以报告的上层) 
-local-in-error:调用本地磁盘I/O处理程序定义的命令;这需要有相应的local-io-error调用的资源处理程序处理错误的命令;这就给管理员有足够自由的权力命令命令或是脚本调用local-io-error处理I/O错误 )

2.2.3 创建/etc/drbd.d/nfsdrbd.res配置文件
(只在node1上面操作)
[root@nfs-0001 /]# vim /etc/drbd.d/nfsdrbd.res
resource data {                       #设置本次文件数据主从同步的资源名为"data"
  on nfs-0001 {                       #设置第一个节点,注意on后面的主机名要与第一个节点输入`# uname -n` 命令之后显示的结果一致,否则会报错
    device    /dev/drbd0;             #设置drbd的标示名,在双方的节点上要一样,drdb启动后这将变成DRBD设备的设备文件,名字为/dev/drbd0
    disk      /dev/vdb1;              #设置为drdb0硬盘提供存储的硬件设备
    address   192.168.1.221:7789;    #设置此节点的ip和端口号
    meta-disk internal;               #网络通信属性,指定drbd的元数据在本机
  }
  on nfs-0002 {              #设置第二个节点,注意on后面的主机名要与第二个节点输入`# uname -n` 命令之后显示的结果一致,否则会报错
    device    /dev/drbd0;        #设置drbd的标示名,在双方的节点上要一样,drdb启动后这将变成DRBD设备的设备文件,名字为/dev/drbd0
    disk      /dev/vdb1;         #设置为drdb0硬盘提供存储的硬件设备
    address   192.168.1.222:7789;   #设置此节点的ip和端口号
    meta-disk internal;         #网络通信属性,指定drbd的元数据在本机
  }
}

(注意:
两个节点的存储设备大小最好一样。如果主节点的存储比从节点的存储大,不知道会发生什么
一开始未同步之前,磁盘是不用格式化的。要知道DRBD是块级别的同步,是在文件系统下面的。格式化也不过是在磁盘上写有关文件系统的信息。

上面的meta-disk有两种存储方式:internal和external。
(1)internal表示DRBD的元数据信息与普通数据存在同一个底层存储上,存在存储设备的最后的位置。优点:容易管理,要坏一起坏,要好一起好。缺点磁盘开销大,而且如果磁盘原来有很多数据,建立DRBD的时候元数据可能会把原来的数据覆盖掉。(不管是哪种方式,都最好不要玩有数据的磁盘)。
(2)external,是把元数据存在另一块磁盘上。优点性能好,缺点:如果元数据坏了,还要恢复元数据,如果数据坏了,还要修改元数据。
)

2.2.4 将在node1上配置好的/etc/drbd.conf、/etc/drbd.d/global_common.conf和/etc/drbd.d/nfsdrbd.res配置文件拷贝到node2上面
(只在node1上面操作)
[root@node1 /]# scp -r /etc/drbd.d/* node2:/etc/drbd.d/

2.3 启动drbd服务并创建drbd设备
2.3.1 启用drbd服务
(在node1和node2上都要操作)
[root@node1 /]# service drbd start
[root@node2 /]# service drbd start

2.3.2 创建并查看drbd服务新生成的硬盘
2.3.2.1 在生成drbd硬盘之前是有没有drbd硬盘的
(在node1和node2上都要操作)
[root@node1 /]# ls /dev/drbd0
[root@node2 /]# ls /dev/drbd0
(发现两台主机都还没有生成drbd0硬盘)
(注意:这里的drbd0是刚刚在/etc/drbd.d/nfsdrbd.res配置文件里,在device后面设置的drbd设备名称)

2.3.2.2 创建drbd硬盘
(在node1和node2上都要操作)
[root@node1 /]# drbdadm create-md data
......
New drbd meta data block successfully created.    #创建成功
[root@node2 /]# drbdadm create-md data
......
New drbd meta data block successfully created.    #创建成功
(注意:这里的data是刚刚在/etc/drbd.d/nfsdrbd.res配置文件里,在resource后面设置的资源名)

2.3.2.3 创建drbd硬盘后就能看到对应的drbd硬盘了
(在node1和node2上都要操作)
[root@node1 /]# ls /dev/drbd0
/dev/drbd0
[root@node2 /]# ls /dev/drbd0
/dev/drbd0
(注意:这里的drbd0是刚刚在/etc/drbd.d/nfsdrbd.res配置文件里,在device后面设置的drbd设备名称)

2.4 使用drbd服务
2.4.1 查看以下就会发现,默认drbd的所有节点都是从节点,需要设置之后才能进行主从同步
(在node1和node2上都要操作)
[root@node1 /]# cat /proc/drbd
cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:8 nr:0 dw:8 dr:3185 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@node2 /]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:8 dw:8 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

(此时drbd主从同步正处于Secondary/Secondary状态,没有主库,所以无法同步)

2.4.2 设置drbd主节点
(只在node1上面操作)
[root@node1 /]# drbdadm primary --force data  #强制为主节点
[root@node1 /]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:8 nr:0 dw:8 dr:5289 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
(生成后就可以发现node1现在是主节点模式:Primary/Secondary)

(只在node2上面操作)
[root@node2 /]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:8 dw:8 dr:2104 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
(而此时的node就是从节点模式了:Secondary/Primary)

2.4.3 拥有主节点之后就可以在主节点上格式化并挂载(格式化只是在磁盘上写入信息,所以也是可以同步过去的)
2.4.3.1 格式化drbd文件系统
(只在node1上面操作)
[root@node1 /]# mke2fs -t ext4 /dev/drbd0

2.4.3.2 挂载drbd文件系统
(只在node1上面操作)
[root@node1 /]# mkdir /content/
[root@node1 /]# mount /dev/drbd0 /content/

2.4.3.3 此时就可以在drbd文件系统里写入数据了
(注意:drbd同步做好了之后,在node1的/content写入的数据会被同步到node2中,但是drbd同一时间只有能有一个主节点,所以必须要切换了主从之后,node2才能看到自己从node1同步的数据)

步骤三:在node1和nod2上安装NFS并配置
3.1 服务端安装nfs-utils软件
(在node1和node2上都要操作)
[root@node1 ~]# yum -y install nfs-utils
[root@node1 ~]# systemctl enable nfs-server

[root@node2~]# yum -y install nfs-utils
[root@node2 ~]# systemctl enable nfs-server

3.2 生成要共享的文件夹和文件
(在node1和node2上都要操作)
[root@node1 ~]# mkdir /content
[root@node1 ~]# chmod 777 /content
[root@node1 ~]# echo eternalcenter.com > /content/index.html

[root@node2 ~]# mkdir /content
[root@node2 ~]# chmod 777 /content
[root@node2 ~]# echo eternalcenter.com > /content/index.html

3.3 配置nfs的设置
(在node1和node2上都要操作)
[root@node1 ~]# vim /etc/exports
/content     *(rw,no_root_squash)

[root@node2 ~]# vim /etc/exports
/content     *(rw,no_root_squash)
(这里的*代表允许所有网段访问,如果只想要让指定网段访问,可以这样写:
/root/ 172.25.0.0/24(rw) #只让172.25.0.0网段的主机访问
)
(这里的no_root_squash是指:当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份。
如果换成root_squash的话,则如果登录NFS主机使用共享目录的使用者是root,那么对于这个共享的目录来说,它具有root的权)

3.4 重启nfs服务
(在node1和node2上都要操作)
[root@node1 ~]# systemctl restart nfs-server.service

[root@node2 ~]# systemctl restart nfs-server.service

3.5 开机自启nfs服务
(在node1和node2上都要操作)
[root@node1 ~]# systemctl enable nfs-server.service

[root@node2 ~]# systemctl enable nfs-server.service

3.6 查看nfs共享状态
(在node1和node2上都要操作)
[root@node1 ~]# exportfs  -rv
exporting *:/content

[root@node2 ~]# exportfs  -rv
exporting *:/content

步骤四:在node1和node2上安装keepalived并配置
4.1 安装keepalived
(在node1和node2上都要操作)
[root@node1 ~]# yum -y install keepalived
[root@node1 ~]# systemctl enable keepalived

[root@node2 ~]# yum -y install keepalived
[root@node2 ~]# systemctl enable keepalived

4.2 配置node1和node2的keepalived配置文件
(在node1和node2上都要操作)
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id proxy1
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 90
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.220
    }
}

[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id proxy2
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 90
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.220
    }
}

4.3 启动keepalived
(在node1和node2上都要操作)
[root@node1 ~]# systemctl restart keepalived
[root@node2 ~]# systemctl restart keepalived

4.4 此时开启客户端已经可以通过vip挂载nfs磁盘了
(只在node2上操作)
[root@node1 ~]# showmount -e 192.168.1.220
Export list for 192.168.1.220:
/content *

步骤五:在node1和node2上编制对应的监控切换脚本,实现nfs的高可用
5.1 在node1上编制一个只要检测到本机nfs和drbd服务停止就停止keepalived服务对脚本,启动并设置为开机自启
(当主keepalived服务停止后,vip:192.168.1.220就会自动跳到备用服务器上)
(只在node1上操作)
[root@node1 ~]# vim /etc/keepalived/check_nfs_drbd_down.sh
[root@node1 ~]#!/bin/bash
while :
do
ss -ntulap | grep 2049 > /dev/null
if [ $? -ne 0 ];then
systemctl restart nfs-server
sleep 3
ss -ntulap | grep 2049 > /dev/null
if [ $? -ne 0 ];then
systemctl stop nfs-server
umount /content
drbdadm secondary data
systemctl stop keepalived
fi
fi

ss -ntulap | grep 7789 > /dev/null
if [ $? -ne 0 ];then
systemctl restart drdb
drbdadm primary --force data
mkdir /content
mount /dev/drbd0 /content/
sleep 5
ss -ntulap | grep 7789 > /dev/null
if [ $? -ne 0 ];then
systemctl stop nfs-server
umount /content
drbdadm secondary data
systemctl stop keepalived
fi
fi

cat /proc/drbd | grep Secondary/
if [ $? -eq 0 ];then
drbdadm primary --force data
mkdir /content
mount /dev/drbd0 /content/
sleep 7
cat /proc/drbd | grep Secondary/
if [ $? -eq 0 ];then
systemctl stop nfs-server
umount /content
drbdadm secondary data
systemctl stop keepalived
fi
fi

a=`ps -aux | grep keepalived | wc -l`
if [ $a -lt 2 ];then
systemctl stop nfs-server
umount /content
drbdadm secondary data
fi

sleep 1
done

[root@node1 ~]# chmod +x /etc/keepalived/check_nfs_drbd_down.sh
[root@node1 ~]# /etc/keepalived/check_nfs_drbd_down.sh&
[root@node1 ~]# vim /etc/rc.local
/etc/keepalived/check_nfs_drbd_down.sh&
[root@node1 ~]# chmod +x /etc/rc.local

5.1 在node2上编制一个检测到vip的nfs服务共享中断就让自己成为drbd主节点并挂载对脚本,启动并设置为开机自启
5.1.1 首先让node2直接挂vip的nfs磁盘(用于让脚本能够判断vip的nfs磁盘是否可用)
(只在node2上操作)
[root@node2 ~]# mkdir /nfstest
[root@node2 ~]# mount -t nfs 192.168.1.220:/content /nfstest

5.1.2 编制脚本,启用脚本并设置为开机自启
(只在node2上操作)
[root@node2 ~]# vim /etc/keepalived/check_nfs_drbd_up.sh
#!/bin/bash
while :
do
sleep 20

ping -c2 -i0.2 -w0.8 192.168.1.220 > /etc/null
if [ $? != 0 ];then
iptables -F
fi

ls /nfstest/
if [ $? -ne 0 ];then
umount /content
systemctl restart keepalived
systemctl restart nfs-server
drbdadm primary --force data
mkdir /content
mount /dev/drbd0 /content/
sleep 1
iptables -F
fi

done

[root@node2 ~]# chmod +x /etc/keepalived/check_nfs_drbd_up.sh
[root@node2 ~]# /etc/keepalived/check_nfs_drbd_up.sh&
[root@node2 ~]# vim /etc/rc.local
/etc/keepalived/check_nfs_drbd_up.sh&
[root@node2 ~]# chmod +x /etc/rc.local

5.1.3 注意如果node2系统重启了之后需要再挂载192.168.1.220:/content之后,这个脚本才能器自动切换的作用
(只在node2上操作)
[root@node2 ~]# mount -t nfs 192.168.1.220:/content /nfstest

步骤六:使用客户端验证NFS共享存储的高可用
6.1 客户端安装nfs-utils软件
(只在client上操作)
[root@client ~]# yum -y install nfs-utils

6.2 客户端启动nfs服务
(只在client上操作)
[root@client ~]# systemctl restart nfs-server.service

6.3 客户端查看服务端的nfs服务
(只在client上操作)
[root@client ~]# showmount -e 192.168.1.220
Export list for 192.168.1.254:
/content *
(这里的192.168.1.220是这次设置的vip地址,如果服务端不是这个ip地址,则需要更换成对应的ip地址)

6.4 客户端挂载nfs共享存储
(只在client上操作)
[root@client ~]# mkdir /web
[root@client ~]# mount -t nfs 192.168.1.220:/content /web

6.5 关掉node1上面的keepalived服务,或者直接让他关机
此时会发现client上挂载的nfs磁盘在一段时间里无法使用,但是没过多久就好了
(只在client上操作)
[root@client ~]# ls /web

6.5 而此时在node2上查看可以看见他已经是drbd主从同步的主节点了
(只在node2上操作)
[root@node2 ~]# cat /proc/drbd