nfs 深度讲解及inotify

目  录

第1章共享目录的挂载及参数mount1

1.1挂载nfs下共享的data目录... 1

1.2 查看挂载的目录... 2

1.3 mount 挂载的参数... 2

1.3.1 mount –o 参数对用的选项... 3

1.3.2 man mount后的-o参数中英文翻译对比... 3

1.4 Mount挂载性能优化参数选项... 4

第2章 NFS深度讲解... 5

2.1 NFS内核优化建议... 5

2.2 服务端nfs内核优化... 5

2.3 企业生产场景NFS共享存储优化小结... 6

2.4 NFS系统的优缺点说明... 6

2.4.1 优点... 6

2.4.2 局限:... 6

第3章 Exportfs命令说明... 7

3.1 Exportfs命令介绍... 7

3.2 Exportfs命令参数的使用方法... 7

第4章 Inotify+rsync实时同步... 7

4.1 下载inotify源码包... 8

4.2 inotify监控目录变化... 8

4.3 Rsync+inotify实时推送脚本... 8

4.4 inotify的优点... 8

4.5 inotify的缺点... 8

4.6 Sersync功能介绍... 8

第5章高并发数据实时同步方案小结... 9

 

 

 1 共享目录的挂载及参数mount

1.1 挂载nfs下共享的data目录

[[email protected] ~]# mount -t nfs 172.16.1.31:/data//mnt

1.2 查看挂载的目录

[[email protected] ~]# cat /proc/mounts

rootfs / rootfs rw 0 0

proc /proc proc rw,relatime 0 0

sysfs /sys sysfs rw,relatime 0 0

devtmpfs /dev devtmpfsrw,relatime,size=487092k,nr_inodes=121773,mode=755 0 0

devpts /dev/pts devptsrw,relatime,gid=5,mode=620,ptmxmode=000 0 0

tmpfs /dev/shm tmpfs rw,relatime 0 0

/dev/sda3 / ext4 rw,relatime,barrier=1,data=ordered0 0

/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0

/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered0 0

none /proc/sys/fs/binfmt_misc binfmt_miscrw,relatime 0 0

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefsrw,relatime 0 0

172.16.1.31:/data/ /mnt nfs4rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,minorversion=0,local_lock=none,addr=172.16.1.310 0

[[email protected] ~]# df -T

Filesystem        Type  1K-blocks    Used Available Use% Mounted on

/dev/sda3         ext4    9213440 1518344   7220424 18% /

tmpfs             tmpfs    502384      0    502384   0% /dev/shm

/dev/sda1         ext4     194241   35999   148002  20% /boot

172.16.1.31:/data/ nfs     9213440 1517568   7221248 18% /mnt

1.3 mount 挂载的参数


参数


参数功能


默认参数


fg

bg


当在客户端执行挂载时,可选择是前台(fg)还是后台(bg)执行。若在前台执行,则mount会持续尝试挂载,直到成功或挂载时间超时为止,若在后台执行,则mount会在后天执行多次进行mount,而不会影响前台的其他程序操作。如果网络联机不稳定,或是服务器常常需要开关机,建议使用bg比较妥当。


fg


soft

hard


当NFS Client 以soft挂载server时,若网络或server出现问题,造成client和server无法传输资料,client就会一直尝试,知道timeout后显示错误才停止。若使用soft mount 的话,可能会在timeout出现时造成资料丢失,故一般不建议使用。

若用hart模式挂载硬盘时,刚好和soft相反,此时client会一直尝试连接到server,若server有回应就继续刚才的动作,若没有回应NFS client 会一直尝试,此时无法umount或kill,所以常常会配合intr使用,这是默认值。


Hard


intr


当使用hard瓜子啊的资源timeout后明若有指定intr参数,可以在timeout后把它中断掉,这避免出现问题时系统整个被NFS锁死,建议使用intr


rsize


读出(rsize)与写入(wsize)的区块的大小(block size0,这个设置可以影响客户端与服务端传输数据的缓冲存储量,一般来说,如果在局域网lan,并且客户端与服务器端都具有足够的内存,这个值设置大一点,比如65535(bytes),提升缓冲区块可提升NFS文件系统的传输能力。但设置的值不要太大,最好网络能够承受的最大的值为限。


Centos5的rsize,wsize默认为1024

Centos6的rsize,wsize默认为132072


Proto=udp


使用UDP协定来传输资料,在LAN中会有比较好的性能。若要跨越Internet的话,使用proto=tcp多传输的数据会有比较好的纠错能力


proto=tcp

可通过man nfs 查看上述参数信息,如果追求极致,可以用如下参数挂载:

mount -t nfs -ofg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt

[[email protected] mnt]# mount -t nfs -ofg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt

[[email protected] mnt]# grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefsrw,relatime 0 0

172.16.1.31:/data/ /mnt nfs4rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=

但是如果考虑以简单、易用为原则,直接选择默认值就可以了

mount -t nfs 172.16.1.31:/data/ /mnt

1.3.1 mount –o参数对用的选项


参数


参数意义


系统默认值


Suid

Nosuid


当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消默认设置SUID的功能


Suid


Rw

Ro


可以指定文件系统是只读ro或可写rw


rw


Dev

Nodev


是否可以保留装置文件的特殊功能?一般来说只有/dev才会有特殊的装置,因此可以选择nodev


dev


Exec


是否具有执行文件的权限?如果想要挂载的仅是普通资源数据区(例如:图片、附件),那么可以选择noexec


exec


User

Nouser


是否允许用户进行文件的挂载与卸载功能?如果要保护文件系统,最好不要提供用户进行挂载与卸载


nouser

1.3.2 manmount后的-o参数中英文翻译对比

下面mount命令的-o选项后面可以接的参数,注意,有些选项只有出现在/etc//fstab里才会有效,下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2、ext3、fat、vfat、ufs等文件系统。

  • async :涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但会降低数据安全。一般情况,生产环境不推荐使用,除非对性能要求很高,对数据可靠性不要求的场合。
  • sync:该参数和async相反,有I/O操作时,都会同步处理I/O,即把数据同步写入硬盘,此参数会牺牲一点I/O性能,但是换来的是掉电后数据的安全性。
  • atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项,在高并发的情况下,建议通过明确加上noatime,来取消这个默认项,已达到提升I/O性能,优化I/O的目的。
  • ro:以只读的方式挂载一个文件系统。
  • rw:可以写的方式挂载一个文件系统。*
  • auto:能够被自动挂载通过-a选项。
  • noauto:不会自动挂载文件系统。
  • default:这是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、and async,默认情况大部分都是默认值。
  • exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全
  • noexec:在挂载的文件系统中不允许直接执行任何二进制的程序,注意,仅对二进制程序有效,即使设置了noexec、shell、php程序还是可以执行的
  • noatime:访问文件时不更新文件的inode时间戳,高并发环境下,推荐显示应用该选项,可以选项,可以提高系统I/O性能。*

在企业工作场景,一般来说,NFS服务器共享的只有普通的静态数据(图片、附件、视频)不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马篡改站点文件都是上传的程序到存储目录,然后执行的。

因此在挂载的时候,用下面的命令很有必要:

[[email protected] mnt]# mount -t nfs-o nosuid,noexec,nodev,rw 172.16.1.31:/data/ /mnt

通过mount –o指定挂载参数和在/etc/fstab里指定挂载的效果一样的。

网络文件系统和本地的文件系统效果也是一样的。

1.4 Mount挂载性能优化参数选项

下面介绍几个在企业上产环境下,NFS性能优挂载的例子。

1)禁止更新目录及文件时间戳挂载,命令如下:

mount -t nfs -o nosuid,noexec,nodev,rw172.16.1.31:/data/ /mnt

2)安全加优化的挂载方式如下:

Mount –t nfs –o nouid,noexec,nodev,noatime,intr,rsize=131072,wsize=131072172.16.1.31:/data /mnt

3)默认的挂载方式如下:

Mount –t nfs 172.16.1.31:/data /mnt

如果是本地文件系统,使用如下的命令

mount /dev/sdb1 /mnt –odefaults,async,noatime,data=writeback,barrier=0

本地文件系统挂载时,如果加nodiratime会报错。

 

以下是NFS网络文件系统优化的参数建议。

在centos6.6 x86_64默认的挂载参数性能还是不错的。

Mount –t nfs 172.16.1.31:/data /mnt

注意:非性能的参数越多,熟读可能会越慢。

 

2 NFS深度讲解

2.1 NFS内核优化建议

下面是优化选项的说明。

  • /proc/sys/net/core/rmem_default:该文件指定了接收套接字缓冲大小的默认值(以字节为单位),默认设置:124928.
  • /proc/sys/net/core/rmem_max;该文件指定了接收套接字缓冲区大小的默认值(以字节为单位),默认设置:124928.
  • /proc/sys/net/core/wmen_default:该文件指定了发送套餐字缓冲区大小默认值(以字节为单位),默认设置:124928.
  • /proc/sys/net/core/wmen_max;该文件指定了发送套接字缓冲区大小的最大值(以字节为单位),默认设置:124928.
  • 内核优化

[[email protected] ~]# cat>>/etc/sysctl.conf<<EOF

> net.core.wmem_default = 8388608

> net.core.rmem_default = 8388608

> net.core.rmem_max = 16777216

> net.core.wmem_max = 16777216

> EOF

[[email protected] ~]# sysctl -p

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

2.3 企业生产场景NFS共享存储优化小结

  • 硬件:sas/ssd硬盘,买多块,硬件raid5/raid10。网卡吞吐量要大,至少千兆(多块bond)。
  • NFS服务器端配置:/data10.0.0./24(rw,sync,all_squash,anounuid=65534,anongid=65534)
  • NFS 客户端挂载优化配置命令;

Mount –t nfs –onoauid,noexec,nodev,notime,nodiratime,rsize=131072,wsize=131072 10.0.0.7:/data/ /mnt 兼顾安全性能

  • 对NFS服务的所有服务器内核优化时,执行如下命令:

[[email protected] ~]# cat>>/etc/sysctl.conf<<EOF

> net.core.wmem_default = 8388608

> net.core.rmem_default = 8388608

> net.core.rmem_max = 16777216

> net.core.wmem_max = 16777216

> EOF

执行sysctl –p 生效

  • 如果卸载的时候提醒“umount: /mnt :device is busy”,需要退出挂载目录在进行卸载,如果是NFS Server 宕机了,则需要强制卸载,可执行umount –lf /mnt。
  • 大型网站NFS网络文件系统的替代软件分布式文件系统Moosefs(mfs),GluseterFS,fastDFS.
  • 系统的优缺点说明

NFS服务可以上不同的客户端挂载使用共同一个目录,也就是将其作为共享存储使用,这样可以保证不同节点客户的数据的一致性,在集群架构环境中进程会用到,如果是Windows和linux混合环境的集群系统,可以用samba来实现。

2.4.1 优点

  • 简单,容易上手,容易掌握。
  • NFS 文件系统内数据是在文件系统上的,即数据是能看见的。
  • 部署快捷,维护简单方便,且可控,满足需求就是最好的。
  • 可靠,从软件层面上看,数据可靠性高,经久耐用,数据在文件系统上的。
  • 服务非常稳定。
  • 存在单点故障,如果NFS Server 宕机了,所有客户端都不能访问共享目录。这个在后期的课程中会痛过负载均衡及高可用方案弥补。
  • 在大数据高并发的场合,NFS效率、性能有限(2千万/日以下的网站不是瓶颈,除非网站架构设计太差)。
  • 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一盘(用于内网则问题不大)。
  • NFS数据是明文的,NFS本身不对数据完整性作验证。
  • 多台客户机挂载一个NFS服务时,连接管理维护系统麻烦(耦合度高),尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试换件可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。
  • 涉及了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序结构师的重要职责就是为程序及架构解耦,让网站的扩展性更好。

3. Exportfs命令说明

3.1 Exportfs命令介绍

exportfs –rv 命令相当于/etc/init.d/nfs reload, 该参数的命令用于使新加载的配置生效,除此之外,通过exportfs 命令,我们还可以管理当前的NFS共享的文件系统目录列表。

3.2 Exportfs命令参数的使用方法

1)重新加载配置使修改生效,实现这个功能的命令为:exprotfs –rv,该命令相当于/etc/init.d/nfs reload.

2)管理当前NFS共享的问津系统目录列表。

下面的示例将不通过/etc/exports文件,而是通过exportfs命令来共享NFS存储目录,具体命令如下:

Exportfs –o rw ,sync 10.0.0.7:/data

Showmount –e localhost

/mnt 10.0.0.7

/data 10.0.0.0/24 #《==这就是上诉exportfs命令共享/data目录的结果

第4章 Inotify+rsync实时同步

4.1 下载inotify源码包

修改yum源并下载

wget -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo

yum –yinstall inotify-tools

查看包组

[[email protected] ~]# rpm -qa inotify-tools

inotify-tools-3.14-1.el6.x86_64

4.2 inotify监控目录变化

[[email protected] ~]# inotifywait -mrq --format"%w%f" -e create /data              

/data/oldboy

[[email protected] ~]# inotifywait -mrq --timefmt‘%d%m%y %F:%H:%M:%S‘ --format ‘%T %w%f‘ -e create /data/

050516 2016-05-05:19:37:34 /data/12

4.3 Rsync+inotify实时推送脚本

[[email protected] scripts]# cat inotify1.sh      

#!/bin/bash

Path=/backup

Ip=172.16.1.41

/usr/bin/inotifywait -mrq  --format ‘%w%f‘ -e close_write,delete $Path \

|while read file

  do

  if  [ -f $file ];then

   rsync -az$file --delete [email protected]$Ip::nfsbackup --password-file=/etc/rsync.password

  else

    cd $Path&&\

   rsync -az./ --delete [email protected]$Ip::nfsbackup --password-file=/etc/rsync.password

  fi

done

4.4 inotify的优点

1)监控文件系统时间变化,通过同步工具实现实时数据同步

4.5 inotify的缺点

1)并发如果大于200 个文件(10-100K),同步就会有延迟。

2)每一次都是全部推送一次,但确实是增量的也可以只有同步的辩护,不变化的不理

3)监控到时间后,调用rsync同步时单进程的(加&并发),sersync多进程同步

4.6 Sersync功能介绍

1)支持配置文件管理

2)真正的守护进程socket

3)可以对失败的文件定时重传(定时任务功能)。

4)第三方的HTTP接口(例如更新cdn缓存)。

5)默认多线程rsync同步

第5章 高并发数据实时同步方案小结

1、inotify(sersync)+rsync,是文件级别的

2、drbd文件系统级别,文件系统级别面积与block块同步,缺点;北街店数据不可用

3、第三方软件的同步功能:MySQL同步,oracle,mongodb。

4、程序双写、直接写两台服务器

5、利用产品服务逻辑解决(读写分离,备读不到,读主)

6、NFS集群(双写主存储,备存储inotify(sersync)+rsync,备没有找到主解决延迟问题

时间: 2024-10-25 15:31:08

nfs 深度讲解及inotify的相关文章

顶级资深工程师深度讲解Go语言

[下载地址:https://pan.baidu.com/s/1nx82k7mOn8ErlPSsCdLfTw ] 第1章 课程介绍欢迎大家来到深度讲解Go语言的课堂.本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的实战项目. 第2章 基础语法量,常量,类型,选择,循环,函数,指针,本章节带领大家学习一门新语言所需的必备语法知识.让大家对Go语言有一个初步的认识! 第3章 内建容器本章节我们来学习数组,切片

Google资深工程师深度讲解Go语言☆

准备工作 ######课程导读: Go语言的历史起源??? 为什么会有Go出现?? Go的发展趋势?? 怎么样学习Go?? ######安装与环境: 视频地址:安装与环境 ######Go的参考资料汇总:1.GO语言零基础入门资料整理2.Restful接口开发(PHP)3.Go入门指南4.Learngobyexample 巩固语法基础的Demo,初学者“抄”(学习)代码的地方5.Go 初学者成长之路6.Go 标准库中文文档7.<编程之法:面试和算法心得>8.目录: 第1章 课程介绍    欢迎

Linux NFS挂载优化,inotify+rsync实时备份

查看客户端挂载的参数 强制卸载 高并发情况下,可以通过明确加上noatime,以达到提升优化I/O性能 ro:以只读方式挂载一个文件系统 rw:   以可写的方式挂载一个文件系统 defaults(默认):这是fstab里的默认值,包括rw.suid.dev.exec.auto.nouser.and async. 默认情况下,都用的默认. mount挂载性能优化参数选项 1.禁止更新目录及文件时间戳挂载: mount -t nfs -o noatime,nodiratime 172.16.1.3

Google资深工程师深度讲解Go语言全套

咱们每先多积累一分,时间越长你与其他人的差距就会越发明显,源于复利效应 课程目录第1章 课程介绍第2章 基础语法第3章 内建容器第4章 面向“对象”第5章 面向接口第6章 函数式编程第7章 错误处理和资源管理第8章 测试与性能调优第9章 Goroutine第10章 Channel第11章 http及其他标准库第12章 迷宫的广度优先搜索第13章 开始实战项目第14章 单任务版爬虫第15章 并发版爬虫第16章 数据存储和展示第17章 分布式爬虫第18章 课程总结 ◆因问题,百度网盘的链接分享被取消

Linux nfs服务讲解

nfs服务介绍 nfs(Network File System) 网络文件系统,能使用户访问服务器的文件系统,就像访问自己的本机的文件系统一样,并且多个 客户端共享访问该文件系统. 目前nfs服务,较为流行的两个nfs的组件为:nfsd,nfs-ganesha.前者linux为系统自带的内核态的文件系统,后者是开源的用户空间的文件 系统.因为nfs-ganesha运行在用户态,nfsd运行在内核态,所以nfs-ganesha具有内存分配灵活,可移植性更好,更方便扩展等优势. 缺点是nfs-gan

Linux通配符知识深度讲解

注意:linux统配符合三剑客(grep,awk,sed)正则表达式是不一样的,因此,代表的意义也是有较大区别的.通配符一般用户命令bash环境,而linux正则表达式用于grep,sed,awk场景. * - 通配符,代表任意(0到多个)字符?- 通配符,代表任意1个字符:- 连续不同命令的分隔符# - 配置文件注释| - 管道~ - 用户的家目录- - 上一次的目录$ - 变量前要加的符号/ - 路径分割符号>或1> - 重定向,覆盖>> - 追加重定向,追加.< - 输

【VHDL】深度讲解无符号和有符号加法处理溢出的问题

1.Unsigned adders 这个比较简单,只需在A.B前面扩展一位0防止溢出,溢出的数填到第n位cout,n-1到0位就是sum. , 2.Signed adders 一开始也搞不懂下图中为什么要扩展符号位,两个符号位了怎么加?   往下看↓ 2.1 Analysis 在真正开始使用Verilog做signed加法运算前,我们先来看看实际上二进制singed加法是如何运算? Normal Condition (没有Overflow) (+6) + (-3) = (+3) 为了节省reso

深度讲解Linux企业级集群实现方案

今天与大家分享的话题,主要是跟我们的软负载集群和Nginx这个强大的开源应用有关系.软负载与nginx那些强大的功能,你都掌握了吗? 当我们打开手机访问点评客户端的时候,访问商户的请求是如何到达对应某台应用服务器的?当有很多XX宽带的用户投诉说我大点评某某域名无法打开但是我们却找不出任何问题的时候,我们就想到会不会是宽带运营商的问题. 当我们准备上线一个新的业务,或者新的功能时候,除了把代码发布的线上生产环境的应用服务器外,还需要做什么工作才能让我们的资深吃货的用户们可以访问到我们高端大气上档次

LocaSpaceViewer深度讲解(一)瓦片服务与数据下载

1.概述 LocaSpaceViewer有着成千上万的用户,是GIS领域饱受好评的一款绿色免费软件.也有很多功能只有少数GIS资深用户理解并且会用.本文以示例的方式来介绍瓦片服务和LocaSpaceViewer的数据下载. 2.瓦片服务 国内有很多地图厂商,都提供地图服务,常见的包括国家测绘局旗下的天地图提供全球14级地图服务,全国16-19基本地图服务,以及大家经常用的百度地图.高德地图.搜狗地图等等. 这些服务是怎么来的,我们又是怎么用的? 这里先来了解一下地图服务的类型. 2.1 瓦片服务