一、NFS 原理圖
二、NFS 原理描述
2.1:什么是NFS
NFS中文名字:網絡共享存儲,就是通過網絡共享目錄,讓網絡上的其他服務器能夠掛載訪問共享目錄的數據(NFS一般都是用來存放視頻、附件、圖片等靜態數據的).
NFS是通過網絡來進行服務端和客戶端數據傳輸的,那么只要是通過網絡的就一定會有端口,那NFS的端口是什么呢?很失望的是NFS的端口是隨機的,每次重啟服務端口都會改變.
那么客戶端是怎樣知道服務端的端口的呢?其實NFS服務器是通過遠程過程調用(RPC)協議/服務來實現的,也就是說RPC服務會統一管理NFS的端口,客戶端和服務端通過RPC來確定端口,進行數據傳輸.
PS:(哦,原來是RPC管理服務端的NFS端口分配,客戶端要傳數據,那客戶端的RPC會先跟服務端的RPC去要服務器的端口,要到端口后再建立連接,然后傳輸數據)。
2.2:什么是RPC
2.3:RPC和NFS之間的關系
NFS服務端需要先啟動RPC,在啟動NFS,這樣NFS才能到RPC注冊端口信息,客戶端的RPC可以通過向服務端的RPC請求獲取服務端的NFS端口信息,獲取到端口后,就可以以獲取到的實際端口來進行數據傳輸了
2.4:RPC和NFS啟動順序
① 先啟動RPC服務
② 在啟動NFS服務
③ 客戶端只啟動RPC服務就OK
2.5:NFS客戶端和NFS服務端的通訊原理
① 首先服務端會啟動RPC服務,並開啟111端口
② 服務端啟動NFS服務,並向RPC注冊端口
③ 客戶端啟動RPC服務,向服務端的RPC服務請求獲取NFS端口
④ 服務端的RPC服務反饋端口給客戶端的
⑤ 客戶端通過服務端的RPC反饋回來的端口和服務端進行數據傳輸
三、NFS 優缺點
3.1:優點
① 簡單容易掌握
② 方便快速的部署維護簡單
③ 從軟件層面上來看,數據的可靠性高
④ 某一方面來講節省了本地的磁盤空間
3.2:缺點
① 單點故障 維護麻煩,nfs掛了,也就表示所有的客戶端就沒法連接了(也是可以通過NFS集群解決這個問題的,也可以考慮Moosefs(mfs)、GlusterFS(大文件存儲)、FastDFS分布式文件系統)
② 高並發場合,效率低(2000萬pv網站不是瓶頸,除非網站的架構性能很渣)
③ 服務端共享文件客戶端認證基於IP和主機名的,安全性一般般(但是一般用NFS都是通過內網來做共享)
④ NFS的數據是明文的,對數據的完整性不做驗證(內網用,問題不大)
四、NFS 什么環境使用
NFS是一般中小型企業的競爭選擇
① 建議在中小型網站(2000萬pv以下)的線上應用
② 訪問量小的網站,可以用來做視頻、附件、圖片的存儲
③ 多台服務器同時使用一台服務器的目錄
五、NFS 搭建部署
5.1:語法及常用的參數
配置文件語法規則 NFS要共享的目錄 NFS客戶端地址1(參數1,參數2) 客戶端地址2(參數1,參數2) 或者 NFS要共享的目錄 NFS客戶端地址/網段(參數1,參數2) NFS共享目錄:為NFS服務端要共享的實際目錄,要用絕對路徑,此目錄必須要有本地的權限 NFS客戶端地址: 為NFS服務端授權的可訪問共享目錄的NFS客戶端地址,可以是一個單獨的IP也可以是個網段 權限參數集:rw:可讀可寫 sync:直接寫到磁盤 async:異步寫入磁盤(大並發) 常用參數 rw 可讀寫 ro 可讀 sync 請求寫入數據時,數據同步到磁盤才返回 async 請求寫入數據時,數據先寫到緩沖區,只有在磁盤有空的時候寫到磁盤,前提是要確保服務器不間斷運行,不然會丟數據 all_squash 不管訪問NFS Server共享目錄的用戶身份如何,權限都將會被壓縮成匿名用戶 目的就是讓所有的客戶端都能互相管理 anonuid 指定用戶UID anongid 指定用戶GID 部署完NFS以后會有些命令 /etc/exports 主配置文件 /usr/sbin/exportfs 管理命令 /usr/sbin/showmount 查看NFS的掛載情況 /proc/mounts 查看客戶端掛載參數 /var/lib/nfs/rmtab 客戶端訪問服務器的exports的信息列表 NFS支持平滑重啟reload /etc/init.d/nfs reload 或者 /usr/sbin/exportfs -rv 自我檢查:showmount -e 192.168.163.129(配置NFS服務端的內網地址)
5.2:在服務端安裝NFS和RPC軟件
yum安裝NFS和RPC 在yum源中有nfs是不存在的,所以要先安裝epel源 yum -y install epel-release yum -y install nfs-utils rpcbind
5.3:編輯NFS配置文件
編輯NFS配置文件 [root@nfs129 ~]# vim /etc/exports [root@nfs129 ~]# cat /etc/exports # /home/shared by root for web1 server /home/shared 192.168.163.0/24(rw,sync)
5.4:啟動NFS並檢查啟動狀態
現在是服務端一定要遵循啟動的順序,先RPC服務在NFS服務 # 啟動RPC systemctl start rpcbind.service # 啟動NFS systemctl start nfs.service # 查看NFS有沒有注冊到RPC 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 100024 1 udp 11064 status 100024 1 tcp 7423 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 100227 3 udp 2049 nfs_acl 100021 1 udp 17683 nlockmgr 100021 3 udp 17683 nlockmgr 100021 4 udp 17683 nlockmgr 100021 1 tcp 2911 nlockmgr 100021 3 tcp 2911 nlockmgr 100021 4 tcp 2911 nlockmgr # 服務端檢查 showmount -e 192.168.163.129 出現下面結果成功 Export list for 192.168.163.129: /home/shared 192.168.163.0/24
5.5:客戶端安裝RPC服務軟件
客戶端只需要啟動RPC服務就好了,一開始感覺可能只安裝rpcbind軟件就好了,但是最后發現測試的時候沒有showmount命令,也就是說明showmount命令是nfs軟件帶的,所以還是把nfs和RPC都裝上比較好 和服務端安裝的方式一樣 安裝epel yum -y install epel-release yum -y install nfs-utils rpcbind # 啟動RPC服務 systemctl start rpcbind.service # 客戶端檢查 showmount -e 192.168.163.129 得到以下結果沒問題 Export list for 192.168.163.129: /home/shared 192.168.163.0/24
5.6:客戶端掛載測試
掛載命令 mount -t nfs 192.168.163.129:/home/shared/ /mnt/ 檢查命令(下面結果成功) df -h | tail -1 192.168.163.129:/home/shared 32G 33M 32G 1% /mnt mount | tail -1 192.168.163.129:/home/shared on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.163.132,local_lock=none,addr=192.168.163.129)
5.7:客戶端實現開機自動掛載
開機自動掛載 兩種方式: 1、把掛載的命令放到/etc/rc.local中 最好的方式 2、直接在/etc/fstab 中可能會有問題 原因是因為你NFS還沒啟動就掛載fstab會比NFS先啟動 (解決方法:開機自啟動netfs服務)
六、NFS 擴展(與rsync實時同步)
七、NFS 總結
NFS就是網絡共享文件系統,就是服務端共享目錄,客戶端掛載使用,共享文件服務端需要配置/etc/exports文件,添加相應的權限和目錄,開啟共享目錄的本地權限,然后客戶端mount掛載,使用默認也行,自己加參數做安全優化也行,服務端的啟動順序一定是先RPC在NFS,在2000萬pv的情況下NFS還是一個不錯的選擇,不管是優點還是缺點,在使用中都能有一個很好的效果(缺點是有辦法解決的呦)
八、NFS 錯誤總結
nfs的三個主程序,知道了對拍錯很有幫助的 nfsd這個就是nfs的主程序,如果這個被停了,那就表示nfs完全的癱掉不能工作,當然就連接不上了 rpc.mountd 這個屬於管理共享的掛載機制 rpc.quotad 管理共享配額 ================================================= RPC故障 服務端RPC故障:原有已掛載的不會受到任何影響。所有客戶端如果是要掛載本服務器的共享,或者是重新執行已經掛載本服務器的共享的操作(卸載,重新掛載)均會出現錯誤。因為此時還需要去向RPC去請求端口信息。新的掛載或服務端新的共享均出錯。 客戶端RPC故障:原有已掛載的不會受到任何影響。本客戶端如果要重新掛載,卸載任何服務器的共享均會報錯。新的掛載出錯. 服務端NFS故障 服務器NFS故障:NFS是提供掛載的主程序,如果出現故障,那么掛載本服務器的共享的客戶端均會出現故障。主程序都出錯了,結果可想而知嘛。就像車子發動機都不動了,還怎么開。 網絡故障 網絡故障:網絡是提供網絡服務的最基礎條件,如果出現故障,那么基於網絡以上的服務都會出現故障。