歡迎你們訪問個人博客: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)
出現緣由: 服務端開啓防火牆,阻止客戶端訪問
問題解決: 關閉防火牆