nfs文件儲存系統

nfs大綱

1.nfs是干什么
1.什么是NFS,NFS是Network File System的縮寫及網絡文件系統。
2.NFS能干什么,它的主要功能是通過局域網絡讓不同主機系統之間可以共享文件和目錄。
和Windows網絡共享很像
windows\linux\macos
3.為什么要使用NFS,NFS解決了什么問題?
解決多臺web靜態資源的共享(所有客戶端都掛載服務端,看到的數據都一樣)
解決多臺web靜態資源一致性(如果客戶端A刪除NFS服務上的test文件,客戶端B上也會看不見test文件)
解決多臺web磁盤空間的浪費(有用戶上傳圖片,就使用rsync進行一次同步)

需要注意的問題:
由于用戶請求靜態資源每次都需要web連接NFS服務獲取,那么勢必會帶來一定的網絡開銷、以及網絡延時、所以增加NFS服務并不能給網站帶來訪問速度的提升。
如果希望對靜態資源進行加速,建議將靜態資源統一存放至NFS服務端,便于統一推送至CDN,以此來實現靜態資源的加速。

CDN:將源站內容分發至最接近用戶的節點,使用戶可就近取得所需內容,提高用戶訪問的響應速度和成功率。

NFS共享存儲
分布式共享存儲: glusterfs fastdfs ceph

nfs沒什么用: 為什么要學?
    1.理解什么是共享存儲
    2.后面很多課程需要使用共享存儲   nfs
    3.簡單\容易理解\

2.nfs是怎么存數據

本地文件操作方式
1.當用戶執行mkdir命令,BashShell無法完成該命令操作,會將其翻譯給內核。
2.Kernel內核解析完成后會驅動對應的磁盤設備,完成創建目錄的操作。

NFS實現原理(需要先了解[程序|進程|線程])
1.NFS客戶端執行增、刪等操作,客戶端會使用不同的函數對該操作進行封裝。
2.NFS客戶端會通過TCP/IP的方式傳遞給NFS服務端。
3.NFS服務端接收到請求后,會先調用portmap進程進行端口映射。
4.nfsd進程用于判斷NFS客戶端是否擁有權限連接NFS服務端。
5.Rpc.mount進程判斷客戶端是否有對應的權限進行操作。
6.idmap進程實現用戶映射和壓縮。
7.NFS服務端將客戶端的函數轉換為本地能執行的命令,然后將命令傳遞至內核,由內核驅動硬件

注意: rpc是一個遠程過程調用,那么使用nfs必須有rpc服務

3.nfs怎么使用
安裝
yum install nfs-utils -y #依賴rpcbind軟件包
配置
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,all_squash)

準備共享目錄
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/

啟動
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

客戶端測試掛載:
    [root@web01 ~]# yum install nfs-utils -y
    [root@web01 ~]# showmount -e 172.16.1.31
    Export list for 172.16.1.31:
    /data 172.16.1.0/24
    [root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt
    [root@web01 ~]# df -h

客戶端測試寫入
    [root@web01 opt]# mkdir dir
    [root@web01 opt]# ll
    total 0
    drwxr-xr-x. 2 nfsnobody nfsnobody 6 May 22 03:01 dir


怎么判斷nfs服務啟動異常:
    systemctl status nfs-server
    [root@nfs ~]# cat /var/lib/nfs/etab 
        #有記錄則代表共享的沒問題
        #無記錄則代表共享的有問題

使用nfs在共享一個/data1目錄,讓客戶端web01能通過172網段掛載到本地的/mnt目錄,并能寫入數據

服務端
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,all_squash)
/data1 172.16.1.0/24(rw,all_squash)

[root@nfs ~]# mkdir /data1
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data1/
[root@nfs ~]# systemctl restart nfs-server

客戶端
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data1 172.16.1.0/24
/data 172.16.1.0/24
[root@web01 ~]# mount -t nfs 172.16.1.31:/data1 /mnt/
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
172.16.1.31:/data 37G 3.8G 34G 11% /opt
172.16.1.31:/data1 37G 3.8G 34G 11% /mnt

數據到底在哪?
nfs服務器
有人說數據就在web上面? 錯誤 數據始終都是在存儲上面

希望開機自啟動:
#cat /etc/fstab
172.16.1.31:/data /opt nfs defaults 0 0

    如果當nfs故障
        開機狀態: 那么客戶端輸入df -h 則會夯住
            解決方法: 強制卸載
            mount               #查看所有的掛載信息
            umount -lf /opt     #強制卸載
        重啟系統: 會導致系統無法啟動
            單用戶: e  enforcing=0 init=/bin/bash   ctrl+x   
                    mount -o remount,rw /

NFS配置詳解

nfs共享參數 參數作用
rw* 讀寫權限
ro 只讀權限
root_squash 當NFS客戶端以root管理員訪問時,映射為NFS服務器的匿名用戶(不常用)
no_root_squash 當NFS客戶端以root管理員訪問時,映射為NFS服務器的root管理員(不常用)
all_squash 無論NFS客戶端使用什么賬戶訪問,均映射為NFS服務器的匿名用戶(常用)
no_all_squash 無論NFS客戶端使用什么賬戶訪問,都不進行壓縮
sync* 同時將數據寫入到內存與硬盤中,保證不丟失數據
async 優先將數據保存到內存,然后再寫入硬盤;這樣效率更高,但可能會丟失數據
anonuid* 配置all_squash使用,指定NFS的用戶UID,必須存在系統
anongid* 配置all_squash使用,指定NFS的用戶UID,必須存在系統

驗證: ro
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(ro,all_squash)
[root@nfs ~]# systemctl restart nfs

客戶端測試
[root@web01 opt]# touch file
touch: cannot touch 'file': Read-only file system

驗證: all_squash anonuid anongid
服務端操作
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u 666 -g 666 www
[root@nfs ~]# id www
uid=666(www) gid=666(www) groups=666(www)
[root@nfs ~]# chown -R www.www /data
[root@nfs ~]# systemctl restart nfs

客戶端掛載
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/ /opt
如果客戶端覺得看666屬主和屬組不爽,請執行 groupadd 和useradd添加一個666的用戶
[root@web01 opt]# ll
drwxr-xr-x. 2 666 666 6 May 22 03:01 dir
-rw-r--r--. 1 666 666 0 May 22 07:00 file

[root@web01 opt]# groupadd -g 666 www
[root@web01 opt]# useradd -u 666 -g 666 www

[root@web01 opt]# ll
drwxr-xr-x. 2 www www 6 May 22 03:01 dir
-rw-r--r--. 1 www www 0 May 22 07:00 file

NFS案例實踐
準備3臺虛擬機服務器,并且請按照要求搭建配置NFS服務。
NFS服務端(A)172.16.1.31
NFS客戶端(B)172.16.1.7
NFS客戶端(C)172.16.1.41
1.在NFS服務端(A)上共享/data/w(讀寫rw)及/data/r(只讀ro)
2.在NFS客戶端(B/C)上進行掛載測試

服務端:

1.配置共享
[root@nfs ~]# cat /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/r 172.16.1.0/24(ro,sync,all_squash,anonuid=666,anongid=666)

2.創建共享的目錄,以及用戶,并進行授權
[root@nfs ~]# mkdir /data/{r,w} -p
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u 666 -g 666 www
[root@nfs ~]# chown -R www.www /data/r/
[root@nfs ~]# chown -R www.www /data/w/

3.重啟服務
[root@nfs ~]# systemctl restart nfs-server

4.檢查共享是否成功
[root@nfs ~]# cat /var/lib/nfs/etab
/data/r 172.16.1.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,ro,secure,root_squash,all_squash)
/data/w 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)

客戶端:
[root@web01 ~]# mount 172.16.1.31:/data/r /opt/
[root@web01 ~]# mount 172.16.1.31:/data/w /mnt/

測試寫:
[root@web01 mnt]# touch file123
[root@web01 mnt]# ls
file123

測試讀:
root@web01 ~]# cd /opt/
[root@web01 opt]# ls
[root@web01 opt]# touch file
touch: cannot touch 'file': Read-only file system

NFS存儲總結

1.NFS存儲優點
1.NFS簡單易用、方便部署、數據可靠、服務穩定、滿足中小企業需求。
2.NFS的數據都在文件系統之上,所有數據都是能看得見。

2.NFS存儲局限
1.存在單點故障, 如果構建高可用維護麻煩
2.NFS數據都是明文,并不對數據做任何校驗,也沒有密碼驗證(強烈建議內網使用)。

3.NFS應用建議
1.生產場景應將靜態數據(jpg\png\mp4\avi\css\js)盡可能放置CDN進行加速, 以此來減少后端存儲壓力
2.如果沒有緩存或架構、代碼等,本身歷史遺留問題太大,在多存儲也沒意義

明天: sersync實時同步
案例: 實現web上傳視頻文件,實則是寫入NFS至存儲,當NFS存在新的數據則會實時的復制到備份服務器
rsync
nfs
sersync

EXAMPLE
# sample /etc/exports file
共享什么東西 共享給誰(擁有什么權限)
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)

  Stale NFS file handle的解決方法
  https://dikar.iteye.com/blog/634862

nfs錯誤:
    [root@web01 ~]# mount -t nfs 10.0.0.31:/data /mnt/
    mount.nfs: access denied by server while mounting 10.0.0.31:/data
    你沒有權限訪問我的nfs服務器
    寫錯了共享的目錄名


nfs已掛載:
[root@web01 opt]# mkdir dir
mkdir: cannot create directory 'dir': Permission denied


nfs
[root@web01 ~]# showmount -e 172.16.1.31
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
    建議關閉掉 firewalld
    建議關閉掉 selinux
    加入開機自啟
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容