NFS介绍
NFS应用场景
NFS原理简介
NFS配置和挂载
本文需要用到的命令和配置文件: mount , umount(-l -f) showmount,exportfs(-rv -o),rpcinfo,ping(-c -t) telent /etc/fstab , /etc/exports , /var/lib/nfs/etab/
NFS 介绍
首先呢,NFS是一种文件系统,只不过属于网络文件系统. 文件系统就是对存储设备上的数据和元数据进行管理组织的一种机制. 网络文件系统有NFS,MFS,GFS(分布式常见于云计算大数据) NFS的主要功能就是通过网络共享文件和目录.
2. NFS应用场景
一般应用在企业集群架构中,用来存储公共的视频,图片附件等静态资源,一般把网站用户上传的文件都放到NFS共享中.
NFS挂载方式:
传统挂载: mount 源 目标
NFS : mount 192.168.0.12:/video /local
3. NFS 原理
....
4. NFS配置
1. 查看系统版本 cat /etc/redhat-release uname -r uname -m 内核版本是 3.10.0 , centos7.3 ,64位 2.安装nfs 两种安装方法: yum groupinstall "NFS file server" -y rpm -aq nfs-utils portmap rpcbind 3. 启动服务 服务端需要启动rpcbind和 NFS服务. 客户端只需要启动rpc服务. redhat7.x : systemctl start rpcbind systemctl start nfs-utils.service 开机启动: systemctl enable rpcbind systemctl enable nfs-utils.service redhat6.x: /etc/init.d/nfs start /etc/init.d/rpcbind start rpcinfo -p localhost chkconfig rpcbind on chkconfig nfs on 4. 配置文件 服务端配置: vim /etc/exports /data 192.168.0.0/24(rw,sync) 创建共享目录/data mkdir /data ll /data chown -R nfsnobody.nfsnobody /data 5. 重启服务加载配置文件 exportfs -rv 或 /etc/init.d/nfs reload 这两条命令等价的,都是平滑重启 参数 -r 重新导出exports文件 -v 显示exports问加你内容 6. 本地检查 [root@promote ~]# showmount -e localhost Export list for localhost: /data 192.168.255.135/32 参数: -e or --exports #Show the NFS server's export list. 显示NFS服务器导出列表。 客户端配置: 1.安装nfs和rpcbind 2.启动rpcbind服务 3.设置开机启动 4.检查服务端nfs是否正常 [root@promote ~]# showmount -e 192.168.255.134 Export list for 192.168.255.134: /data 192.168.255.135/32 5.挂载并测试 mount -t nfs 192.168.255.134:/data /mnt #挂载到本地的/mnt下 cd /mnt touch a.log ll /mnt #注意服务端权限和本地权限 建议把挂载命令写入/etc/rc.local中实现开机自动挂载. 因为fstab可能会有问题. 对于网络文件系统,一般尽量不要放到fstab. 因为fstab优先网络,网络没有启动,会挂载不上. 即使是本地文件系统,也要主机,最后两列要设置为 0 0 ,否则导致系统起不来.
注意:
为什么要把所有开机启动服务放到rc.local? 规范,便于管理,相当于把/etc/rc.loca当做服务器的档案,所有服务器启动配置都放到档案中,做好注释.
或者写好启动脚本,都用chkconfig管理.
详解:
1. exports 参数
man exports 可以查看案例和参数
共享目录(用绝对路径) , 注意共享目录的本地权限,如果需要读写共享,一定要让本地目录被NFS客户端用户(nfsnobody)可以写.
NFS客户端地址,: 可以只单独IP或主机名 域名,或者网段,还可以用*来匹配.
权限参数集:对授权的客户端的权限设置.
async(异步) 发送端把数据发送到缓冲区,就走了,等客户端自己来取. | 请求或写入数据时,先返回请求,再将数据写入内存缓存和硬盘中,即异步写入数据. 一般不建议启用,如果允许数据丢失的话,可以打开能够提升NFS性能. 例子: 电商秒杀案例 |
sync(同步) 发送端等客户端接受结束才断开连接. 实时,保证能收到. | 请求或写入数据时,数据同步写入NFS server的硬盘后才会返回 |
rw | 读写权限 |
ro | 只读权限 |
all_squash | 所有用户身份都被压缩成匿名用户,即UID为65534,默认nfsnobody 配NFS生产技巧: 1. 确保所有服务器对NFS共享目录都具备相同权限, a) all_squash 把所有客户端都压缩成匿名用户 b) 所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同) |
root_squash | 屏蔽远端root用户权限,压缩root用户为nfsnobody |
no_root_squash | 不屏蔽远程root用户权限 |
同步和异步的优缺点:
异步(async) 写入到内存中,就表示写入结束.返回写成功.
优点: 快,
缺点: 不可靠,容易丢数据
同步(sync) : 写入到磁盘中,才表示写成功.
优点:慢
缺点: 可靠, 保证数据写入.
默认参数 在 /var/lib/nfs/etab 中.
2. nfs客户端挂载的选项参数优化:
NFS共享存储优化:
1)硬件: sas/ssd硬盘 ,买多块 做raid0,raid 10
2)服务器端: /data 192.168.255.0/24(rw,async,all_squash)
参数详解:
rw 读写权限
async 同步
all_squash 所有用户转为匿名用户
3)客户端挂载: rsize,wsize,noatiome,nodirtime,nosuid,noexec,soft(hard,intr)
例如:
mount -t nfs -o,noatime,nodiratime,rsize=1371072,wsize=137072 192.168.255.134:/data /mnt
注意1:
性能测试 测试文件系统
dd
time 计算时间
time dd if=/dev/vero of=/mnt/testfile bs=9k count=20000
注意2:
强制卸载
df -h 查看不了
cat /etc/rc.local
umount /mnt
无法使用umount
加上参数 lf参数
umount -lf /mnt #强制卸载
exportfs命令的高级用法:
直接使用exportfs共享文件目录
man exportfs #做集群的时候 不适用exports文件而是用命令共享
exportfs -o rw,rsync,all_squash,anonuid=555,anongid=555 10.0.0.0/24:/data
总结
NFS相关知识小结:
mount , umount(-l -f) showmount,exportfs(-rv -o),rpcinfo,ping(-c -t) telent
/etc/fstab , /etc/exports , /var/lib/nfs/etab/ ,
NFS的局限性: 存在单点故障,如果nfs server宕机了,所有客户端都不能访问共享目录. 可以使用lb 和 ha解决
高并发的场合,NFS效率优先
客户端认证基于IP和主机名,安全性一般(一般用于内网)
NFS数据是明文的,对数据完整性不作验证
多台机器挂载NFS服务器时,连接管理维护麻烦,尤其是有NFS 服务端出问题后,所有客户端都挂掉状态( 测试环境可以用autofs自动挂载)
耦合度太高===> 架构师重要职责就是 解耦,网站扩展性才更好.
nfs自动挂载autofs:
当用户访问时再挂载,如果没有用户访问,指定时间之内,就自动卸载. 解决NFS服务器和客户端紧密耦合的问题
缺点是: 用户请求才挂载,所以开始请求的瞬间效率较差.
autofs用于测试环境中,或者并发很低的生产环境(LDAP家目录漫游)中
转载于:https://blog.51cto.com/11975375/1970247