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

[经验分享] centos7下NFS使用与配置

[复制链接]

尚未签到

发表于 2018-4-19 14:10:09 | 显示全部楼层 |阅读模式
  NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
一、NFS的工作流程
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。  所以无论客户端 和服务端都需要用NFS,必须安装RPC服务。
  NFS的RPC服务,在Centos5下名为portmap,Centos6下名称为rpcbind.
二、Centos7搭建NFS服务器实例
  
  服务器系统
  角色
  IP
  CentOS7-150--server
  NFS服务器端
  192.168.10.150
  CentOS7-151-localhost
  NFS客户端
  192.168.10.151
  共享CentOS7-150--server中/data/bbs目录,使192.168.10.1 IP段所有主机都可以访问
  1、因是测试环境,先关闭selinux和firewalld
  1)关闭selinux
[iyunv@service ~]# sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config  2)关闭firewalld防火墙
  查看firewalld防火墙开机自动状态
[iyunv@service ~]# systemctl list-unit-files|grep enable|grep firewalld
firewalld.service                             enabled  关闭firewalld防火墙开机自动启
[iyunv@service ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.  停止防火墙
[iyunv@service ~]# systemctl stop firewalld.service  查看防火墙状态
[iyunv@service ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon   
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)   
Active: inactive (dead)     
Docs: man:firewalld(1)Mar 14 18:52:24 localhost.localdomain systemd[1]: Starting firewalld - dynamic ....
Mar 14 18:52:24 localhost.localdomain systemd[1]: Started firewalld - dynamic f....
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'beyond...
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: beyond-scope: INV...
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'failed...
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: failed-policy: IN...
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'reject..
Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: reject-route: INV...
Mar 14 11:21:43 service systemd[1]: Stopping firewalld - dynamic firewall daemon...
Mar 14 11:21:43 service systemd[1]: Stopped firewalld - dynamic firewall daemon.Hint: Some lines were ellipsized, use -l to show in full.  
  2、服务端部署
  1)检查系统版本及NFS服务nfs-utils 和rpcbind有没有安装
[iyunv@service ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[iyunv@service ~]# rpm -qa nfs-utils rpcbind  2)安装NFS服务nfs-untils和rpcbind
[iyunv@service ~]# yum install nfs-utils rpcbind -y  3)启动rpcbind服务(一定要先启动rpcbind服务再启动nfs服务)
  查看rpcbind服务状态
[iyunv@service ~]# systemctl status rpcbind.service  启动rpcbind服务
[iyunv@service ~]# systemctl start rpcbind.service  查看rpc
[iyunv@service ~]# lsof -i :111
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd    1 root   33u  IPv6  25136      0t0  TCP *:sunrpc (LISTEN)
systemd    1 root   38u  IPv4  25137      0t0  TCP *:sunrpc (LISTEN)
rpcbind 9227  rpc    4u  IPv6  25136      0t0  TCP *:sunrpc (LISTEN)
rpcbind 9227  rpc    5u  IPv4  25137      0t0  TCP *:sunrpc (LISTEN)
rpcbind 9227  rpc    8u  IPv4  33497      0t0  UDP *:sunrpc
rpcbind 9227  rpc   10u  IPv6  33499      0t0  UDP *:sunrpc
[iyunv@service ~]# netstat -lntup|grep
rpcbindudp     0      0 0.0.0.0:922             0.0.0.0:*                    9227/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                 9227/rpcbind        
udp6        0      0 :::922                  :::*                 9227/rpcbind        
udp6        0      0 :::111                  :::*                9227/rpcbind  查看nfs服务向rpc注册的端 口信息
[iyunv@service ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper  把rpcbind另入开机自启动
[iyunv@service ~]# systemctl enable rpcbind.service
[iyunv@service ~]# systemctl list-unit-files|grep enabled|grep rpcbind
rpcbind.socket                 enabled  4)启动NFS服务并查看其状态
[iyunv@service ~]# systemctl start nfs.service
[iyunv@service ~]# systemctl status nfs.service  把NFS服务加入开机自启动并查看其状态
[iyunv@service ~]# systemctl enable nfs.service
[iyunv@service ~]# systemctl list-unit-files|grep nfs  5)授权nfsnobody于/data/bbs让客户端挂载后可写可读
[iyunv@service /]# chown nfsnobody:nfsnobody /data/bbs  6)创建测试目录及文件
[iyunv@service ~]# mkdir /data/bbs -p
[iyunv@service ~]# mkdir /data/bbs/test.txt  7)配置NFS服务的export文件
[iyunv@service ~]# echo "/data/bbs/ 192.168.10.1/24(rw,sync,root_squash)">>/etc/exports  重新加载nfs配置文件
[iyunv@service ~]# exportfs -rv
exporting 192.168.10.1/24:/data/bbs  exportfs:NFS服务端发布共享控制命令。
  -r:表示重新刷新共享。
  -a:表示将配置文件/etc/exports中的所有定义共享发布出去。
  -v:显示确认共享设置。
  -u:表示不发布共享。
  查看nfs服务器挂载情况
[iyunv@service ~]# showmount -e localhost
Export list for localhost:
/data/bbs 192.168.10.1/24ro:目录只读rw:目录读写sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性async:将数据先保存在内存缓冲区中,必要时才写入磁盘all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)no_all_squash:与all_squash取反(默认设置)root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)no_root_squash:与rootsquash取反anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户  3、客户端配置
[iyunv@localhost ~]# yum install nfs-utils rpcbind  把rpcbind加入开机自启动
[iyunv@localhost bbs]# systemctl enable rpcbind.service  创建测试目录文件
[iyunv@localhost ~]# mkdir /data/bbs/ -p  扫描NFS服务器的文件共享列表
[iyunv@localhost bbs]# showmount -e 192.168.10.150
Export list for 192.168.10.150:
/data/bbs 192.168.10.1/24  把服务器的目录挂载到客户端 的目录下
[iyunv@localhost ~]# mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs
[iyunv@localhost ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
/dev/sda3                  18G 1004M   17G   6% /
devtmpfs                  479M     0  479M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                     489M  6.8M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                  497M  112M  385M  23% /boot
tmpfs                    98M     0   98M   0% /run/user/0
192.168.10.150:/data/bbs   18G 1006M   17G   6% /data/bbs三、数据测试
  服务端
[iyunv@service /]# cd /data/bbs
[iyunv@service bbs]# touch a.txt  客户端
[iyunv@localhost ~]# ls /data/bbsa.txt  提示:   1.配置NFS服务端后,不用重启NFS服务,只要使用exportfs -rv
  2.rpc主程序Centos5.8下为portmap 、Centos6.4和Centos7下为rpcbind
  3.NFS共享目录不要授权于777权限,可以改所属主和组为nfsnobody,因为nfsnobody权限不是很大,也不能登陆
四、配置客户端 开机自动挂载NFS共享目录
[iyunv@localhost ~]# chmod +x /etc/rc.d/rc.local     #centos7需要给rc.local赋予执行权限后,rc.local文件才能生效
[iyunv@localhost ~]# echo "mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs">>/etc/rc.local
[iyunv@localhost ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs五、客户端mount挂载优化
  在企业生产环境中,NFS客户端挂载的参数有noexec、nosuid、nodev、noatime、rsize、wsize、nodiratime等,
  一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马修改站点文件都是由上传入口上传的程序存储目录,然后执行,因此在挂载时,用下面的命令是有必要的,
  普遍安全挂载参数:
  mount -t nfs -o nosuid,noexec,nodev,rw 192.168.10.150:/data/bbs /data/bbs
  挂载的读写缓存
  wsize和rsize写和读缓存
  wsize和rsize的最大值
  NFSV2   rsize=8192 wsize=8192
  NFSV3   rsize=32768 wsize=32768
  NFSV4   rsize=65536 wsize=65536
  现在一般centos5.8以上的系统都己经增加了读写缓存,如需修改可以加以上参数
  例如:
  mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs
  ★mount的一些常用挂载优化参数:
  wsize和rsize写和读缓存
  async     数据不同步写到磁盘,提高性参,但降低数据安全,不推荐使用
noatime和nodiratime  这两个选是说在读写磁盘时,不更新文件和目录的时间戳,而更新文件时间戳对于工作数据必要性不大,增加了磁盘IO的次数,拖慢系统性参,  defaults   这个缺省值包括rw,suid,dev,exec,auto,nouser,and async  cat /etc/fstab的结果默认大部人都是缺省值
  noauto    不会自动挂载文件系统
  noexec    不允许安装的直接执行任何二进制文件
  ro         挂载一个只读文件系统
  rw        挂载一个可写的文件系统
  sync       把数据同步写入硬盘
  nosuid     不允许设置用户标识或设置组标识符位
  nodev      不解释字符或文件块特殊设备
  intr       表示可以中断
  ★企业生产环境中nfs性参优化挂载例子:
mount -t nfs -o noatime,nodiratime 192.168.10.150:/data/bbs /data/bbs
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs  如果是本地系统:
  mount -o defaults,async,noatime,data=writeback,barrier=0 /dev/sdb1 /mnt
  data=writeback,barrier=0 是日志文件系统的优化
  提示:本地文件系统挂载如果加nodiratime会报错,
六、加优化参数和不加的数据写入测试
  ★使用普通挂载
[iyunv@localhost ~]# mount -t nfs 192.168.10.150:/data/bbs /data/bbs  测试单个文件写入速度
[iyunv@localhost ~]# cd /data/bbs
[iyunv@localhost bbs]# time dd if=/dev/zero of=/data/bbs/dingjianfile bs=9k count=2000
2000+0 records in
2000+0 records out
18432000 bytes (18 MB) copied, 0.114592 s, 161 MB/s
real    0m0.125s
user    0m0.000s
sys     0m0.021s  测试批量创建文件的写入速度
[iyunv@localhost bbs]# time for ((i=1;i<10000;i++));do /bin/cp /bin/touch /data/bbs/test$i;done
real    2m2.877s
user    0m10.242s
sys     0m33.882s  ★加优化参数挂载:
[iyunv@localhost bbs]#mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.10.150:/data/bbs /data/bbs  测试单个文件写入速度
[iyunv@localhost bbs]#  time dd if=/dev/zero of=/data/bbs/dingjianfile bs=9k count=2000
2000+0 records in
2000+0 records out
18432000 bytes (18 MB) copied, 0.10043 s, 184 MB/s
real    0m0.107s
user    0m0.001s
sys     0m0.017s  测试批量创建文件的写入速度
[iyunv@localhost bbs]# time for ((i=1;i<10000;i++));do /bin/cp /bin/touch /data/bbs/test$i;done
real    1m38.526s
user    0m9.989s
sys     0m32.788s七、配置fstab文件令开机自动加载网络文件系统和本地的文件系统(和rc.local效果一样)
[iyunv@localhost bbs]# vi /etc/fstab
## /etc/fstab# Created by anaconda on Fri Mar  9 05:05:49 2018
## Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=07347aff-3d84-4cd6-a0e7-ac145593622e /                       xfs     defaults        0 0
UUID=f6cdb812-e3ba-4154-8116-a39c68f74d98 /boot                       xfs     defaults        0 0
UUID=8b003ed3-3e5b-4f45-9530-41a412748c6a swap                       swap    defaults        0 0
192.168.10.150:/data/bbs /data/bbs   nfs   defaults,nosuid,noatime,nodiratime,noexec,nodev,intr,rsize=65536,wsize=65536     0 0
~

运维网声明 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-449034-1-1.html 上篇帖子: Centos7 软件包安装管理 下篇帖子: centos系统基础网络配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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