一、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. linux 学习笔记一

    Linux 学习笔记一 计算机 主要分为五个部分:控制器,运算器,存储器,输入设备,输出设备. 操作系统 操作系统就是针对硬件编写的程序,同时提供硬件接口调用的接口.操作系统需要处理如管理与配置内存. ...

  2. 【MyBatis】-----【MyBatis】---表级联系【一对多】

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...

  3. 【Spring】---【IOC入门案例】

    第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...

  4. spring-mvc 3.* 多视图解析配置实例 ContentNegotiatingViewResolver

    一.起因     从spring 3.1.0升级到spring 3.2.0时,配置文件servlet.xml中出错. 错误信息: java.lang.String cannot be cast to  ...

  5. laravel 添加后台登陆守护器

    后台不能在一个浏览器登陆,下面简单配置下即可解决这个问题. 设置路由如下: <?php /** * 后台路由,从Illuminate\Routing\Router控制器的auth()方法中复制过 ...

  6. PHP开发一个简单的成绩录入系统

    预览界面 源码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. js for 循环

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. Jmeter响应数据显示乱码问题

    Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析. 解决步骤: 现象:jmeter访问本地文件 ...

  9. Python内置函数compile

    英文文档: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the source i ...

  10. numpy库的认识以及数组的创建

    numpy库 numpy是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础.numpy十分高效,基于NumPy的算法要比纯Python快10到100倍(甚至 ...