欢迎你们访问个人博客:blog.54newpower.topweb
NFS=Network File System=网络文件系统。
主要功能是经过网络(通常是局域网)让不一样的主机系统之间能够共享文件或目录。
NFS客户端(通常为应用服务器,例如web)能够经过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端本身的磁盘分区或者目录同样,而实际上倒是远端的NFS服务器的目录。
NFS属于本地文件存储服务。
NFS主要用于存储web服务器上用户上传的数据信息(图片 附件 头像 视频 音频)。shell
在nfs服务端建立共享目录vim
经过mount 网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。centos
因为NFS服务启动产生的进程服务端口号都是随机的,所以NFS的各项功能都须要向RPC服务(rpcbind服务)注册,因此只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能经过向RPC服务询问才能找到正确的端。也就是说,NFS须要有RPC服务的协助才能成功对外提供服务。说白了,PRC至关与一个中介,NFS至关与是房东,当有新的租房信息发布时,房东会告诉中介,房客通常是联系中介来租房的。安全
服务端:服务器
rpcinfo -p 172.16.1.31 [root@web01 /mnt]#rpcinfo -p 172.16.1.31 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 100024 1 udp 43152 status 100024 1 tcp 60675 status 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 40594 nlockmgr 100021 3 udp 40594 nlockmgr 100021 4 udp 40594 nlockmgr 100021 1 tcp 41770 nlockmgr 100021 3 tcp 41770 nlockmgr 100021 4 tcp 41770 nlockmgr
客户端:网络
rpm -qa|grep -E "nfs|rpc" yum install -y nfs-utils rpcbind rpm -qa nfs-utils rpm -qa rpcbind
注意:nfs和rpc的软件名并发
vim /etc/exports #输入如下内容 /data 172.16.1.0/24(rw,sync) #/data 共享目录 #容许存储数据网段信息 #rw 读写 #rsync同步存储数据
mkdir /data chown nfsnobody.nfsnobody /data ls -ld /data
先启动rpc服务app
systemctl start rpcbind.service systemctl enable rpcbind.service systemctl status rpcbind.service systemctl is-enabled rpcbind.service
[root@nfs01 ~]#systemctl start rpcbind [root@nfs01 ~]#systemctl enable rpcbind [root@nfs01 ~]#systemctl status rpcbind ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-05-03 23:28:06 CST; 7h left Main PID: 964 (rpcbind) CGroup: /system.slice/rpcbind.service └─964 /sbin/rpcbind -w May 03 23:28:05 nfs01 systemd[1]: Starting RPC bind service... May 03 23:28:06 nfs01 systemd[1]: Started RPC bind service. [root@nfs01 ~]#systemctl is-enabled rpcbind enabled
再启动nfs服务异步
systemctl start nfs systemctl enable nfs systemctl status nps systemctl is-enabled nfs
[root@nfs01 ~]#systemctl start nfs [root@nfs01 ~]#systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. [root@nfs01 ~]#systemctl status nfs ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Sun 2020-05-03 15:45:02 CST; 19s ago Main PID: 1779 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service May 03 15:45:02 nfs01 systemd[1]: Starting NFS server and services... May 03 15:45:02 nfs01 systemd[1]: Started NFS server and services. [root@nfs01 ~]#systemctl is-enabled nfs enabled
安装nfs-utils,使客户端能够识别nfs挂载方式
yum install -y nfs-utils rpm -qa|grep "nfs-utils"
实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt
第一种方法:
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
第二种方法:
/data 172.16.1.0/24(rw,sync) /data 10.0.0.0/24(rw,sync)
(1)服务端配置文件参数 exports文件里ro/rw参数
(2)服务端自己目录权限
(3)服务端共享目录权限存在继承关系 例如:/data,/data/r
PS:建议设置共享目录时,不要存在父级与子级关系
(4)客户端挂载参数是否为 ro
NFS配置参数权限 rw -- 存储目录是否有读写权限 ro -- 存储目录是否时只读权限 sync -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全) async -- 异步方式存储数据 直接将数据保存到内存(提升数据存储效率) no_root_squash -- 不要将root用户身份进行转换 root_squash -- 将root用户身份进行转换 all_squash -- 将全部用户身份都进行转换 no_all_squash -- 不要将普通用户身份进行转换
no_all_squash 须要进行配置 共享目录权限为www(确保客户端用户 服务端用户 uid数值一致) root_squash 须要进行配置 root---nfsnobody data目录---www
以上默认配置(不少服务默认配置都是从安全角度出发)
cat /var/lib/nfs/etab --- 记录nfs服务的默认配置记录信息 [root@nfs01 ~]#cat /var/lib/nfs/etab /data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
anonuid=65534,anongid=65534 --- 能够指定映射的用户信息 #修改映射用户:www=1002 /data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(ro,sync)
/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx) #注:服务端普通用户的uid要与客户端普通用户的uid相同
nfs服务器重启,挂载后建立数据比较慢
服务器重启方式不正确
服务重启:
restart 重启服务 强制断开全部链接 用户感觉很差
reload 重启服务(平滑重启) 强制断开没有数据传输的链接 提高用户感觉
挂载命令:
mount -t nfs 172.16.1.31:/data /mnt
如何实现自动挂载:
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local #文件要有执行权限
vim /etc/fstab 172.16.1.31:/data /mnt nfs defaults 0 0 #实现fstab文件挂载自动加载nfs存储目录 必须让remote-fs.target服务开机自启 #centos7 必须启动 remote-fs.target #centos6 必须启动 netfs
客户端如何卸载
umount -lf /mnt #-l 不退出挂载点目录进行卸载 #-f 强制进行卸载操做
#PS:需求问题:如何找到一台服务器开机运行了哪些服务 ll /etc/systemd/system/multi-user.target.wants/
rw --- 实现挂载后挂载点目录可读可写 (默认)
ro --- 实现挂载后挂载点目录可读可写
suid --- 在共享目录中可让setuid权限位生效 (默认)
nosuid --- 在共享目录中可让setuid权限位失效 提供共享目录的安全性
exec --- 共享目录中的执行文件能够直接执行
noexec --- 共享目录中的执行文件能够没法直接执行 提供共享目录的安全性
auto --- 能够实现自动挂载 mount -a 实现加载fstab文件自动挂载
noauto --- 不能够实现自动挂载
nouser --- 禁止普通用户能够卸载挂载点设定此文件系统是否容许让普通用户使用 mount 执行实现挂载,默认是不容许(nouser),仅有 root 能够
user --- 容许普通用户能够卸载挂载点
ls: cannot open directory .: Stale file handle (文件句柄错误)
出现缘由: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,可是客户端仍是处于挂载状态
问题解决: 将和父级目录有关的全部挂载点所有卸载,从新挂载
Cannot register service: RPC: Unable to receive;
出现缘由: 服务启动顺序不正确
问题解决: 关闭全部服务,按顺序进行启动
出现挂载卡死状况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现缘由: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙