NFS存儲服務


一、NFS 原理圖

二、NFS 原理描述

  2.1:什么是NFS

    NFS中文名字:網絡共享存儲,就是通過網絡共享目錄,讓網絡上的其他服務器能夠掛載訪問共享目錄的數據(NFS一般都是用來存放視頻、附件、圖片等靜態數據的).

    NFS是通過網絡來進行服務端和客戶端數據傳輸的,那么只要是通過網絡的就一定會有端口,那NFS的端口是什么呢?很失望的是NFS的端口是隨機的,每次重啟服務端口都會改變.

    那么客戶端是怎樣知道服務端的端口的呢?其實NFS服務器是通過遠程過程調用(RPC)協議/服務來實現的,也就是說RPC服務會統一管理NFS的端口,客戶端和服務端通過RPC來確定端口,進行數據傳輸.

    PS:(哦,原來是RPC管理服務端的NFS端口分配,客戶端要傳數據,那客戶端的RPC會先跟服務端的RPC去要服務器的端口,要到端口后再建立連接,然后傳輸數據)。

 

  2.2:什么是RPC

    RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。
     RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了  傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
    RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。
    首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。
    當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
 
=================================上面說了這么多,其實就是百度百科上面的解釋,只要理解了也是對的===================================
 
    PS:在NFS中RPC就是來管理NFS注冊的端口的RPC的端口是111
 

  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實時同步)

  6.1:nfs+inotify+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是提供掛載的主程序,如果出現故障,那么掛載本服務器的共享的客戶端均會出現故障。主程序都出錯了,結果可想而知嘛。就像車子發動機都不動了,還怎么開。

網絡故障

網絡故障:網絡是提供網絡服務的最基礎條件,如果出現故障,那么基於網絡以上的服務都會出現故障。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM