设为首页 收藏本站
查看: 589|回复: 0

[经验分享] 一次测试环境下的高可用NFS文件服务器(DRBD+heartbeat+NFS)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-22 08:57:52 | 显示全部楼层 |阅读模式
什么是DRBD?
    分布式复制块设备。当你将数据写入本地的DRBD设备上的文件系统时,数据同时会被发送到远程端的另一边的DRBD设备文件系统里,保障数据实时同步,当本地的DRBD设备突然故障,远程节点还保留一份一模一样的数据,根据这个特性,可以结合heatbeat的ha开源软件,实现高可用!
    我们都把DRBD理解是网络raid1磁盘阵列。
    DRBD底层设备可以是
        1)一块磁盘,或者一个分区。
        2)raid设备。
        3)逻辑卷lvm。
        4)任何块设备。
    DRBD支持三种不同的复制协议。协议A,协议B,协议C。
    协议A,异步复制协议。此协议只要本地写操作完成,就认为DRBD整个流程的写操作就完成。
    协议B,内存同步复制协议。本地写操作完成,并检测到数据到达DRBD的另一边, 就认为DRBD整个流程的写操作就完成。   

    协议C,同步复制协议。当本地DRBD设备写操作和远程DRBD设备写操作都完成了,就认为DRBD整个流程的写操作就完成。最长用的是协议C,测试环境下也是用的协议C,它可以提供保证的数据一致性和可靠性。需要的磁盘I/O最高。
    heartbeat是一个开源项目。提供linux可靠,可用和可服务性。核心,就是采用心跳检测机制。
如果心跳线或网络出现问题,容易出现脑裂现象!这也是制约该技术大规模部署应用的原因。

实验环境准备:
    1.关闭防火墙。

    2.hosts文件。
    3.ntp对时。
    4.准备两台机器primary和secondary。
    5.每台机器上单独拿一块硬盘或单独分区做为DRBD底层设备(大小建议一样)。
    6.网卡两块,两个网段,其中一网段是数据通信并heartbeat对外提供VIP的网段,另外一段做为重要的心跳线,heartbeat的核心。
    7.primary上 eth0:192.168.4.10  eth1:10.0.54.10

    8.secondary上 eth0:192.168.4.11  eth1:10.0.54.11

两台机器上都关闭iptables和selinux

1
2
3
4
5
6
7
[iyunv@primary ~]# service iptables stop
[iyunv@primary ~]# setenforce 0
[iyunv@zprimary ~]# sed -i /SELINUX=/s/permissive/disabled/ /etc/selinux/config

[iyunv@secondary ~]# service iptables stop
[iyunv@secondary ~]# setenforce 0
[iyunv@secondary ~]# sed -i /SELINUX=/s/permissive/disabled/ /etc/selinux/config



修改hosts文件
1
2
3
4
5
6
7
[iyunv@primary ~]#vim /etc/hosts
primary     192.168.4.10
secondary  192.168.4.11

[iyunv@secondary ~]#vim /etc/hosts
primary     192.168.4.10
secondary  192.168.4.11



  ntp对时
1
2
[iyunv@primary ~]#ntpdate ntp.api.bz
[iyunv@secondary ~]#ntpdate ntp.api.bz



  分区如下:/dev/vdb1   大小8G

1
fdisk /dev/vdb    #分区省略



安装DRBD和配置
  安装包下载地址:http://oss.linbit.com/drbd/

  安装依赖包
1
2
[iyunv@primary ~]#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers
[iyunv@secondary ~]#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers



  这里提供安装包8.4.3(两机器同样的操作)
1
2
3
4
5
6
7
8
9
10
[iyunv@primary ~]#tar zxvf drbd-8.4.3.tar.gz
[iyunv@primary ~]#cd drbd-8.4.3
    ./configure --prefix=/usr/local/drbd --with-km
    make && make install
    mkdir -p /usr/local/drbd/var/run/drbd
    cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
    chkconfig drbd on

[iyunv@primary ~]#modprobe drbd      #加载drbd.ko模块
[iyunv@primary ~]#lsmod |grep drbd   #查看



  两台机器创建硬件设备DRBD
1
[iyunv@primary ~]#mknod /dev/drbd0 b 147 0



  两台下载NFS包(注意不需要自己开启NFS服务,下面搭建heartbeat会来完成)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[iyunv@primary ~]#yum install -y nfs*
[iyunv@primary ~]#vim /etc/exports
/data 192.168.4.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
[iyunv@primary ~]#mkdir /data
[iyunv@primary ~]#/etc/init.d/rpcbind start
[iyunv@primary ~]#chkconfig rpcbind on
[iyunv@primary ~]#chkconfig nfs off
修改DRBD文件配置
[iyunv@primary ~]#vim /usr/local/drbd/etc/drbd.conf
resource r0 {                   #创建的资源名称,和下面创建与之对应
protocol C;                     #采用C协议

startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
net {
        timeout 60;
        connect-int 10;
        ping-int 10;
        max-buffers 2048;
        max-epoch-size 2048;
}
syncer { rate 30M; }

on zabbix-server {
        device /dev/drbd0;
        disk  /dev/vdb1;
        address  192.168.4.10:7788;
        meta-disk internal;
}
on zabbix-agent {
        device /dev/drbd0;
        disk  /dev/vdb1;
        address  192.168.4.11:7788;
        meta-disk internal;
}
}



  两台创建资源r0
1
2
[iyunv@primary ~]#drbdadm create-md r0
[iyunv@secondary ~]#drbdadm create-md r0



  两台启动DRBD,设置开机启动
1
2
[iyunv@primary ~]#service drbd start
[iyunv@primary ~]#chkconfig  drbd on



  查看当前DRBD状态
1
2
3
[iyunv@primary ~]#cat /proc/drbd
或者
[iyunv@primary ~]#service drbd status



  主上初始化
1
2
[iyunv@primary ~]#drbdsetup /dev/drbd0 primary --force     #第一次设置
[iyunv@primary ~]#drbdadm  primary r0



  在查看当前DRBD状态
1
2
3
[iyunv@primary ~]#cat /proc/drbd          #能看到primary机器上状态已经变成primary了
  或者
[iyunv@primary ~]#service drbd status



  格式化DRBD(只在主上操作,备用状态的不允许对DRBD设备进行任何操作,包括只读)
1
[iyunv@primary ~]#mkfs.ext4 /dev/drbd0




  Heartbeat 安装配置(两台设备)
1
2
3
[iyunv@primary ~]#yum install -y heartbeat
        cd /usr/share/doc/heartbeat-3.0.4/
        cp ha.cf  haresources authkeys /etc/ha.d/



   修改primary(secondary的ip为10.0.54.10)的ha.cf

1
2
3
4
5
6
7
8
[iyunv@primary ~]#vim /etc/ha.d/ha.cf
logfile         /var/log/ha-log
logfacility     local0
keepalive       2
deadtime        5
ucast           eth1 10.0.54.11        #采用心跳网口对方ip
auto_failback   off
node            primary secondary



  修改authkeys(两个机器相同配置)
1
2
3
4
[iyunv@primary ~]#vim /etc/ha.d/authkeys     #自选1 2 3 模式
  auth 1
  1 crc
[iyunv@primary ~]# chmod 600 /etc/ha.d/authkeys



  编辑haresources(这里两个主机相同配置,注:从上不要把primary改成secondary)
1
2
3
4
5
6
7
8
[iyunv@primary ~]#vim /etc/ha.d/haresources      #VIP设置为192.168.4.100,参考文件倒数后面的一个例题
primary IPaddr::192.168.4.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4 killnfsd
[iyunv@primary ~]#vim /etc/ha.d/resource.d/killnfsd
killall -9 nfsd; /etc/init.d/nfs restart; exit 0

[iyunv@primary ~]#find / -name  drbddisk    #查看drbddisk脚本在哪,有的时候没有该脚本。
[iyunv@primary ~]#cp /usr/local/drbd/etc/ha.d/resource.d/drbddisk /etc/ha.d/resource.d/
[iyunv@primary ~]#chmod 755 /etc/ha.d/resource.d/drbddisk



  重启heartbeat(先主上开启)
1
[iyunv@primary ~]#/etc/init.d/heartbeat start



  测试,故障模拟及故障排查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@primary ~]#ping 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.020 ms
64 bytes from 192.168.4.100: icmp_seq=3 ttl=64 time=0.016 m
[iyunv@primary ~]#df -h       #主上自动挂载了
/dev/drbd0            7.8G   18M  7.4G   1% /data

找一台客户端A,挂载NFS
[iyunv@room3pc0A ~]# showmount -e 192.168.4.100
Export list for 192.168.4.100:
/data 192.168.4.0/255.255.255.0
[iyunv@room3pc0A ~]#vim /etc/fstab
192.168.4.100:/data /liuqingqing        nfs _netdev,defaults 0 0
[iyunv@room3pc0A ~]#mkdir /liuqingqing
[iyunv@room3pc0A ~]#mount -a
[iyunv@room3pc0A ~]#df -h
192.168.4.100:/data   7.8G   18M  7.4G   1% /liuqingqing



故障模拟(直接把主关机)
1
2
3
4
5
6
7
8
9
10
[iyunv@primary ~]#init 0
.....
.....
.....  等一会儿在ping 192.168.4.100
[iyunv@secondary ~]#ping 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.021 ms
[iyunv@secondary ~]#df -h    #自动挂载在从上,实现了高可用。
/dev/drbd0            7.8G   18M  7.4G   1% /data



1
2
3
4
5
6
7
8
9
10
11
12
13
并且客户端机器挂在的目录,不受影响。


故障排查:
查看日志
[iyunv@primary ~]#tail -f /var/log/messege
[iyunv@primary ~]#tail -f /var/log/ha-log
查看DRBD状态(如,刚才把主关掉之后,自己变成从了)
[iyunv@primary ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@primary, 2016-09-21 09:13:16
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0



出现脑裂现象处理
        在secondary上操作
1
2
3
[iyunv@secondary ~]#drbdadm secondary r0
[iyunv@secondary ~]#drbdadm disconnect all
[iyunv@secondary ~]#drbdadm --discard-my-data connect r0



        在primary上操作
1
2
[iyunv@primary ~]#drbdadm disconnect all
[iyunv@primary ~]#connect r0




最终在测试机器上运行没问题,主备上对此测试。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-275720-1-1.html 上篇帖子: 操作系统CnetOS_7—systemd管理实践指南 下篇帖子: 虚拟网卡实验:网卡别名 与 bond多网卡模式 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表