一、nfs介绍

 NFS是Network File System的缩写,是网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录,主要存储用户上传的图片附件等信息。

nfs共享文件实现原理

1、nfs工作原理

nfs服务端

① 先启动rpc服务 /etc/init.d/rpcbind start

② 再启动nfs服务 /etc/init.d/nfs start

③  nfs向rpc注册端口和功能,端口号为111

nfs客户端

① 先启动rpc服务 /etc/init.d/rpcbind start

② mount命令进行挂载

③ 向对端rpcbind请求nfs服务端口,nfs服务端返回端口信息

2、RPC服务介绍

相当于租房中的中介,NFS服务启动会产生多个进程和多个端口,不便于客户端进行连接访问,通过RPC服务接收NFS端口信息的注册,并通过开启RPC服务生成111端口,提供客户端进行访问

二、nfs服务部署

1、nfs服务端

①安装nfs和rpc服务软件

rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y

②修改nfs配置文件

cat >>/etc/exports<<EOF
/data 172.16.1.0/(rw,sync)
EOF

③启动rpc、nfs服务

/etc/init.d/rpcbind start
/etc/init.d/nfs start

④创建共享目录并授权

mkdir /data -p
chown -R nfsnobody.nfsnobody /data
id nfsnobody

⑤重启nfs服务

/etc/init.d/nfs reload  #平滑重启
/etc/init.d/nfs restart #强硬重启

⑥检查并测试nfs挂载服务

showmount -e 172.16.1.31 #检查共享目录列表信息
mount -t nfs 172.16.1.31:/data /mnt

2、nfs客户端

①安装nfs和rpc服务软件

yum install nfs-utils rpcbind -y

②测试nfs共享目录挂载

mount -t nfs 172.16.1.31:/data /mnt

③卸载目录

退出共享目录,再进行卸载           umount /mnt
不退出共享目录,强制进行卸载 umount -lf /mnt
-l Lazy unmount #懒惰的卸载
-f Force unmount #强制的卸载

三、nfs配置文件详解

1、nfs授权客户端地址配置说明

客户端地址

具体地址

说明

授权单一客户端访问NFS

172.16.1.41

一般情况,生产环境中此配置不多

授权整个网段访问NFS

172.16.1.0/24

生产环境中最常用的配置,简单、方便

授权整个网段访问NFS

172.16.1.*

指定网段的另一种写法(不推荐使用)

授权某个域名客户端访问

nfs.oldboyedu.com

此方法生产中一般情况不常用

授权整个域名客户端访问

*.oldboyedu.com

此方法生产中一般情况不常用

2、nfs权限参数

参数名称

参数说明

rw ******

read-write表示可读写权限

ro

read-only表示只读权限

sync ******

请求或写入数据时,数据同步写到nfs-server的硬盘才返回

优点,数据安全不会丢;缺点,性能比不启用该参数要差

async ******

写入数据时先写到缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率,如果服务器宕机或不正常关机,会损失缓存区中未写入磁盘的数据

no_root_squash

保持root用户不进行压缩

访问nfs server共享目录的用户如果是root的话,它对该目录有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用

root_squash

如果访问nfs server共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份

all_squash ******

对所有访问的用户身份压缩成匿名用户,同时变成nfsnobody身份

生产中配置NFS的重要技巧:

1、  确保所有客户端服务器对NFS共享目录具备相同用户访问权限

a、  all_squash把所有客户端都压缩成固定的匿名用户(UID相同)

b、  就是anonuid,anongid指定的UID和GID的用户

2、所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)

anonuid ******

指定匿名用户的UID

这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID,但是这个UID必须存在于/etc/passwd中,如多台web共享一个nfs目录,通过这个参数可以使得不同的nfs客户端写入的数据对所有NFS客户端保持同样的用户权限,即为配置的匿名UID对应用户权限,一般默认即可

anongid ******

指定匿名用户的GID,区别就是把UID(用户ID)换成GID(组ID)

四、nfs客户端挂载参数

参数

参数意义

系统默认参数

suid

nosuid

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

suid

rw

ro

可以指定文件系统是只读(ro)还是可写(rw)

rw

dev

nodev

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

dev

exec

noexec

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

exec

user

nouser

是否允许普通用户拥有文件的挂载与卸载功能,如果要保护文件系统,最好不要为普通用户提供挂载与卸载功能

nouser

auto

noauto

这个auto指的是”mount -a”时会不会挂载的项目,如果不需要这个分区随时挂载,可以设置为noauto

auto

soft

hard

当nfs客户端以soft挂载server时,若网络或server出现问题,造成客户端和server无法传输资料,客户端就会一直尝试,直到timeout后显示错误才停止,若用hart模式挂载硬盘时,刚好与soft相反,客户端一直尝试连接到server

若server有回应就继续刚才的操作,若没有回应客户端会一直尝试

hard

intr

当使用hart挂载的资源timeout后,若有指定的intr参数,可以在timeout后把它中断掉,避免出问题时系统整个被nfs锁死,建议使用intr

rsize

wsize

读出与写入的区块大小,这个设置可以影响客户端与server端传输数据的缓冲存储量,在局域内,客户端与server都具有足够的内存,这个值可以设置大一点,提升缓冲区块提升nfs文件系统的传输能力,但也不能设置太大,最好以网络能够传输最大值为限

五、企业nfs共享存储优化

1、服务端

①硬件:多块sas/ssd磁盘,raid0/raid5/raid10,网上吞吐量要大,至少千兆(多块bond)

②NFS服务端配置:/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

③内核优化,优化nfs读写速度

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default=
net.core.rmem_default=
net.core.rmem_max=
net.core.wmem_max=
EOF
sysctl -p

2、客户端

①nfs客户端挂载参数建议

mount –t nfs –o nosuid,noexec,nodev,noatime,nodiratime,rsize=,wsize= 172.16.1.31 :/data /mnt

②禁止更新目录及文件时间戳挂载

mount –t nfs –o noatime,nodiratime 172.16.1.31:/data /mnt

③追求极致,可以使用下面参数挂载

mount –t nfs –o fg,hard,intr,rsize=,wsize= 172.16.1.31:/data /mnt

④经过实际测试,CentOS6.X默认的挂载参数性能还是不错的,简单,方便

mount –t nfs 172.16.1.31:/data /mnt

六、 autofs自动挂载

①设置开机不一定要挂载的目录,当用的时候才实现自动挂载。
②用户不使用自动挂载的目录一段的时间,会自动卸载。(默认时间为5分钟)

1、客户端安装autofs

yum install autofs -y

2、nfs服务端创建共享目录、授权

mkdir /oldboy -p
chown -R nfsnobody.nfsnobody /oldboy/
[root@nfs-nfs01 oldboy]# cat /etc/exports
/oldboy 172.19.5.0/(rw,sync,all_squash)
/etc/init.d/nfs reload

3、客户端修改autofs配置文件

echo "/nfs    /etc/auto.nfs" >>/etc/auto.master          #主配置文件,/nfs表示挂载点,auto.nfs表示所应用的配置文件
echo "* -rw 172.19.5.31:/oldboy/" >>/etc/auto.nfs #表示要挂载点,也可以指定/nfs,rw表示可读写权限
172.19.5.31:/oldboy/ #nfs共享目录
/etc/init.d/autofs restart #重启服务

4、nfs服务端查看共享目录下内容

[root@nfs-nfs01 oldboy]# ll /oldboy/
total
-rw-r--r-- nfsnobody nfsnobody Aug : abc.log
drwxr-xr-x nfsnobody nfsnobody Aug : onlylady

5、客户端autofs查看

[root@test02 nfs]# ll /nfs/
total #此时查看为空
[root@test02 oldboy]# df –h #查看挂载点也没有
Filesystem Size Used Avail Use% Mounted on
/dev/xvda3 .9G .9G .7G % /
tmpfs 497M 12K 497M % /dev/shm
/dev/xvda1 190M 66M 115M % /boot
[root@test02 oldboy]# cd /nfs/ #进入挂载点/nfs
[root@test02 nfs]# cd oldboy #只有cd进行入到nfs共享目录oldboy下面,立马激活,自动挂载
[root@test02 oldboy]# ll
total
-rw-r--r-- nfsnobody nfsnobody Aug : b.txt
drwxr-xr-x nfsnobody nfsnobody Aug : onlylady
[root@test02 oldboy]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda3 .9G .9G .7G % /
tmpfs 497M 12K 497M % /dev/shm
/dev/xvda1 190M 66M 115M % /boot
172.19.5.31:/oldboy/ .9G .7G .9G % /nfs/oldboy

linux运维、架构之路-nfs网络文件系统的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. Linux运维笔记(一)网络基础知识

    网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...

  3. Linux运维七:网络基础

    1:网线 2:交换机,路由器 交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备.它可以为接入交换机的任意两个网络节点提供独享的电信号通路.最常见的交换机是以太网交换机.其他常见的 ...

  4. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  5. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  6. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  7. 网络配置——Linux运维基础

    今天把Linux的网络配置总结了一下,尽管并不难可是是个比較重要的基础.然后我也不知到自己以后是否会做运维,可是我知道自己比較喜欢刨根问底.还有就是我很珍惜我以前掌握过的这些运维的技能.今天突然间问自 ...

  8. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  9. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

随机推荐

  1. 移动端自动化==>AppiumApi接口详解

    Appium 初始化配置信息(Desired Capabilities) Desired Capabilities实际上就是一个字典,它主要用于向Appium Server提供初始化配置参数,如:想要 ...

  2. 安装golang web框架 gin

    gin 地址https://github.com/gin-gonic/gin#installation 去gin 地址 clone 下来,放到对应的包中即可.如:gin就放在项目文件夹/github. ...

  3. 【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)

    [AOP]操作相关术语 Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点. Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add ...

  4. mysql常用知识点之limit

    limit函数的应用.limit后面跟整数,如limit 5,表示在结果集中取前5条:limit后跟整数区间,如limit 2,5,表示在结果集中 从第3条开始,取5条数据,第一个整数表示结果集的顺序 ...

  5. python 并发编程 多进程 目录

    python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...

  6. 初涉Java

    一.学习内容总结 1.程序入口 但如果类的定义使用了public class声明,那么文件名必须与类名保持一致,使用了class定义的类,文件名称可以和类名称不同. 2.输出语句 3.print与pr ...

  7. 【Linux 架构】Linux内核架构

    (1)System Call Interface(SCI)------系统调用接口(2)Process Management(PM)-------进程管理模块(3)Memory Management( ...

  8. How to attach multiple files in the Send Mail Task in SSIS

    Let’s say you need to create a SSIS package that creates 2 files and emails the files to someone. Yo ...

  9. SpringBoot整合mybatis碰到的问题

    整合mybatis 1.  导包:在原有的web项目的基础上加上 <!--JDBC连接-->     <dependency>         <groupId>m ...

  10. [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增)

    [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增) 题面 题面较长,略 分析 首先套路的断环为链.对于从l到r的环上区间,若l<=r,我们 ...