NFS服務

NFS服務:
小結:
1.文件系統是對一個存儲設備上的數據和元數據進行組織的一種機制。
2.分區必須先格式化創建文件系統才能存放數據,不同的分區只能有一種文件系統。
3.linux下常見文件系統有ext2、ext3、ext4、zfs、xfs和Reuserfs
windows下常見文件系統NTFS、FAT32

文件系統選型簡單介紹
1.SAS/SATA硬盤文件系統選擇:
1)reiserfs大量小文件業務首選reiserfs.
2)xfs數據庫MYSQL業務,門戶案例。
3)ext4視屏下載,流媒體,數據庫,小文件業務也ok.
ext2藍汛的cache(緩存)業務CDN網站加速服務的。

常規應用
centos默認的文件系統都是比較優秀的,不會選擇就默認。
xfs,reiserfs這兩個文件都需要單獨安裝。默認不支持,維護不方便。
大併發並不是過多的磁盤的優化,而是在前端增加緩存,架構師的能力。

2.SSD固態硬盤選擇文件系統也是一樣

NFS介紹
1.概念描述:NFS是Network File System的縮寫,主要功能是通過網絡讓不同的主機系統之間可以彼此共享文件或目錄。
2.NFS應用場景:
在企業集羣架構的工作場景中,NFS網絡文件系統一般被用來存儲共享視頻、圖片、附件等靜態資源文件(一般把網站用戶上傳的文件都放到NFS共享裏)。中小型企業用的很多,大型公司或門戶也有用的,大公司或門戶除了用NFS還會用MFS、GFS、FASTFS,TFS等分佈式文件系統。

NFS服務

3.NFS服務的端口問題;
因爲NFS服務啓動時,會隨機選擇端口提供服務,這樣的話,客戶端很難知道NFS使用哪個端口,爲了解決這個問題就引出了RPC服務(遠程過程調用服務,英文:Remote Procedure Call簡稱:RPC),NFS的RPC服務主要功能是記錄每個NFS功能所對應的端口號,並且在NFS客戶端請求時將該端口號和功能對應的信息傳遞給請求數據的NFS客戶端,從而可以確保客戶端可以正常連接到服務端上,實現數據傳輸。
注意:在啓用NFS服務時先啓動RPC服務在啓動NFS,類似於上班需要先打卡再上班(RPC在C5爲portmap,C6rpcbind)
NFS客戶端連接服務端的示意圖:
NFS服務

配置NFS服務:
[root@server ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@ns1 ~]# uname -r
2.6.32-431.el6.x86_64
[root@server ~]# rpm -aq nfs-utils portmap rpcbind(查看nfs和rpc安裝包)
[root@server ~]# yum groupinstall "NFS file server"(安裝nfs服務)
[root@server ~]# yum groupinstall "rpcbind"(安裝rpc)
[root@server ~]# /etc/init.d/rpcbind start(啓動rpc服務)
[root@server ~]# /etc/init.d/rpcbind status(查看rpc服務的狀態)
[root@server ~]# rpcinfo -p localhost(查看已知本機端口)
[root@server ~]# rpcinfo -p localhost
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
(上述報錯說明rpc服務沒啓動)
chkconfig nfs on(加入開機自啓動)
chkconfig rpcbind on(加入開機自啓動)
chkconfig --list nfs(檢查)
chkconfig --list rpcbind (檢查)
[root@server ~]# /etc/init.d/nfs start(啓動nfs服務)(reload重啓)
[root@server ~]# ll /etc/exports(顯示nfs配置文件)

[root@server ~]#vi /etc/exports
共享文件要有註釋
/data ip地址子網(權限,sync寫入磁盤)
例如:
[root@server ~]#vi /etc/exports
#share /data
/data 192.168.0.0/24(rw,sync)
注:sync是寫入磁盤,還有個是async是將數據寫入內存中,寫入內存比寫入磁盤速度快,但容易丟數據。
[root@server ~]#showmount -e localhost(服務端本機檢查是否共享)
Export list for localhost:
/data 192.168.0.0/24
root@server ~]# cat /var/lib/nfs/etab
/data 192.168.0.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
注:anonuid=65534,anongid=65534,爲NFS默認用戶nfsnobody.
[root@server ~]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin默認用戶nfsnobody.
NFS客戶端配置:
[root@client ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@client ~]# uname -r
2.6.32-431.el6.x86_64
[root@client ~]# rpm -qa rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
[root@client ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@client ~]# chkconfig rpcbind on
[root@server ~]#showmount -e +服務端ip地址(服務部端檢查完,檢查客戶端是否可以共享)
例如:
[root@client ~]# showmount -e 192.168.0.50
Export list for 192.168.0.50:
/data 192.168.0.0/24
[root@server ~]#mount -t nfs 服務ip:目錄 /mnt(掛載到客戶端的mnt上)
例如:
[root@client ~]# mount -t nfs 192.168.0.50:data /mnt
[root@client ~]# ls /mnt
a.txt
[root@client ~]# mount -t nfs 192.168.0.50/data /mnt
mount.nfs: remote share not in 'host:dir' format(注意格式,ip地址後面共享目錄用:隔開,用/會報錯並提示'host:dir'
注意:當服務端共享目錄沒有授權其他用戶有可寫權或更改屬主時,即使共享權限可寫,也無法寫入或刪除內容。
例如下面:會提示權限不夠
[root@client ~]# rm -f /mnt/a.txt
rm: cannot remove /mnt/a.txt': Permission denied<br/>[root@client ~]# touch /mnt/b.txt<br/>touch: cannot touch/mnt/b.txt': Permission denied
當在服務端給共享目錄授權後或更改屬主(默認nfs寫入用戶爲nfsnobody)
例如:將不會提示權限問題
[root@client ~]# rm -f /mnt/a.txt
[root@client ~]# ls /mnt
[root@client ~]#
[root@client ~]# touch /mnt/b.txt
[root@client ~]# ls /mnt
b.txt
排故思路;
一般nfs客戶端無法連接服務端時,可能是防火牆的問題,可用ping命令和telnet命令測試網絡連通性。
NFS配置文件路徑:
/etc/exports:NFS服務主配置文件,配置NFS具體共享服務的地點,默認內容爲空。以單行位。
vi /etc/exports
共享文件要有註釋
/data ip地址子網(權限,sync寫入磁盤)

/usr/sbin/exportfs:NFS服務的管理命令。
/etc/init.d/nfs reload=====exportfs -rv
(exportfs命令不但可以加載配置生效,也可以通過命令直接共享目錄。越過/etc/exports,但重啓服務失效。)
/usr/sbin/showmount:常用來再客戶端,查看NFS配置及掛載結果的命令
(配置nfsserver,分別再服務端以及客戶端查看掛載情況,重點一定要查看。)
/var/lib/nfs/etab:NFS配置文件的完整參數設定的文件。
(rw:可寫,ro:只讀)
/var/lib/nfs/xtab:在C5中記錄有哪些用戶掛載了NFS目錄信息,包括IP地址,但是C6成了空文件失效了。
NFS及RPC服務相關進程的介紹
[root@ns1 ~]# ps -ef|egrep "nfs|rpc"
rpc 1027 1 0 14:14 ? 00:00:00 rpcbind C6.5的rpc服務,c5中是portmap
rpcuser 1045 1 0 14:14 ? 00:00:00 rpc.statd 檢測文件一致性
root 1414 2 0 14:20 ? 00:00:00 [rpciod/0]
root 1422 1 0 14:20 ? 00:00:00 rpc.rquotad 磁盤配額進程
root 1426 1 0 14:20 ? 00:00:00 rpc.mountd 權限管理進程
root 1432 2 0 14:20 ? 00:00:00 [nfsd4]
root 1433 2 0 14:20 ? 00:00:00 [nfsd4_callbacks]
root 1434 2 0 14:20 ? 00:00:00 [nfsd] NFS主進程
root 1435 2 0 14:20 ? 00:00:00 [nfsd]
root 1436 2 0 14:20 ? 00:00:00 [nfsd]
root 1437 2 0 14:20 ? 00:00:00 [nfsd]
root 1438 2 0 14:20 ? 00:00:00 [nfsd]
root 1439 2 0 14:20 ? 00:00:00 [nfsd]
root 1440 2 0 14:20 ? 00:00:00 [nfsd]
root 1441 2 0 14:20 ? 00:00:00 [nfsd]
root 1464 1 0 14:20 ? 00:00:00 rpc.idmapd
root 1545 1362 0 14:50 pts/0 00:00:00 egrep nfs|rpc
具體的進程作用可用man命令查看

配NFS生產重要技巧:
1.確保所有服務器對NFS共享目錄具備相同的權限。
a.all_squash把所有客戶端都壓縮成匿名用戶。
B.就是把anonuid,anongid指定的UID和GID的用戶。
2.所有的客戶端和服務端都需要有一個相同的UID和GID的用戶,即客戶端nfsnobody(UID必須相同)。

NFS在C5中默認用戶並非是65534,所以在部署時要查看系統有沒有服務器中的默認用戶,一定要統一用戶。
避免方法:

  1. 統一創建新的用戶,在服務端匿名用戶改爲指定用戶。
  2. 統一查看有沒有UID爲65534用戶,沒有則創建。
    當NFS服務出現故障時,排故思路:
    1) 查看服務端,服務開啓的順序是否正確,先開啓RPC服務,再開NFS服務,查看RPC服務中,是否有NFS服務的端口。
    2) 服務端和客戶端都要開啓RPC服務,客戶端只要開啓RPC服務就可以了。
    3) 當客戶端無法掛載服務端目錄時,在ping下服務端地址,如果ping通則在telnet下地址加端口號,例如:
    先看是否可以ping同,若ping不同,則表示網絡不通,看服務端防火牆和selinux是否開啓了。
    Last login: Sun Dec 17 10:46:06 2017 from desktop-rtg9bmp.w.mifi
    [root@xuexi ~]# ping 192.168.0.50
    PING 192.168.0.50 (192.168.0.50) 56(84) bytes of data.
    64 bytes from 192.168.0.50: icmp_seq=1 ttl=64 time=0.557 ms
    64 bytes from 192.168.0.50: icmp_seq=2 ttl=64 time=0.219 ms
    ^C
    --- 192.168.0.50 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, ti
    Ping通了,測試端口,用telnet:
    [root@xuexi ~]# telnet 192.168.0.50 111
    Trying 192.168.0.50...
    Connected to 192.168.0.50.
    Escape character is '^]'.(表明沒有問題)
    [root@xuexi ~]# telnet 192.168.0.50 111
    Trying 192.168.0.50...
    telnet: connect to address 192.168.0.50: No route to host(表明端口有問題,可能服務沒起或者是防火牆或者selinux導致的,No route to host:一般是防火牆開啓了)。
    客戶端掛載:
    掛載格式:
    Mount -t(指定掛載類型)nfs 服務端ip地址:(分號隔開)共享目錄 本地掛載點;例如
    Mount -t nfs 192.168.0.50:/data /mnt
    注意:客戶端在掛載前先showmount -e 192.168.0.50,先shoumount看一下能否看到共享目錄,若看不到則服務端有問題。)
    NFS客戶端掛載在/mnt下是零時的關機重啓就會失效:
    解決方案:
    /bin/mount -t nfs IP地址:/data/ /mnt把掛在的命令放在/etc/rc.local裏(命令儘量全路徑)
    配置monunt掛在命令使開機自啓動:
    a、/etc/rc.local裏
    優點:不會影響系統的啓動,即使NFS服務沒起,它只是開機不會掛載而已,但不會影響系統啓動。
    缺點:偶爾會開機掛在不上,工作中除了開機自啓動配置,還要對掛載點監控。
    b、/etc/fstab裏
    注:NFS網絡文件系統不要放到fstab裏。
    原因:1.fstab優先於網絡啓動。此時還沒連接上nfs服務器。
    2.即使是本地文件系統,也要注意,fstab最後兩行,要設置0 0。否則會導致無法啓動服務器的問題。

企業生產環境中NFS客戶端掛載建議:
1.把NFS rpc服務的啓動命令和掛載命令均放在/etc/rc.local下,然後通過nagios監控軟件監控開機後的掛載情況。
vi /etc/rc.local
#rpc bind by oldboy
/etc/init.d/rpcbind start
/bin/mount -t 192.168.116.128:/data/ /mnt
NFS服務端開機自啓:
vi /etc/rc.local
#rpc bind by oldboy
/etc/init.d/rpcbind start
/etc/init.d/nfs start
經驗:爲什麼要把所有開機自啓動服務放到rc.local呢,爲了規範,統一開機自啓動位置。
相當於把/etc/rc.local當做服務器的檔案。所有服務器啓動配置文件都放在檔案裏,做好註釋。或者寫好配置啓動腳本都用chkconfig管理。

查看客戶端掛載的參數命令:
[root@xuexi ~]# grep mnt /proc/mounts
192.168.116.128:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.116.129,minorversion=0,local_lock=none,addr=192.168.116.128 0 0

mount -o後面的參數:
1.async:寫入內存,一般不推薦使用,在高併發的服務中對數據可靠性不要求的場合中應用
2.defaults:默認的裏面包括(rw,suid,dev,exec,auto,nouser,and async)
3.noatime;優化的選項不更新文件系統上inode訪問時間,高併發環境推薦使用。
4.nodiratime:優化選項不更新文件系統上directory inode訪問時間,高併發環境推薦使用。
5.auto:相當於-a選項,要不要被自動掛載。
6.noauto:不會被自動掛載。
7.remount:重新掛載。
8.ro:只讀掛載
9:rw:可讀可寫掛載。
10.sync:掛載目錄寫入磁盤。
案例:文件系統出現只讀故障:
原因:1.rsync 的bug。2.文件系統內部的一致性3.fstab修改錯誤導致系統無法啓動故障。
解決方法:
mount -o rw,remount /

生產場景NFS共享儲存優化小結:
1.硬件;sas/aad磁盤,買多塊,raid0/raid10.網卡好。
2.服務器端:/data 192.168.116.128/24(rw,async,all_squash,anonuid=555,anongid=555
3.客戶端掛載:rsize,wsize,noatime,nodiratime,nosuid,noexec,soft(hard,intr)
C6.5mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072 192.168.0.50:/data /mnt
(最好加上rsize,wsize,因爲每個機器的默認不一樣,爲了讀寫快,最好手動指定一下。)
查看客戶端掛載默認參數:cat /proc/mounts
客戶端掛載時使用這兩個參數的任意一個Soft或(hard,intr),可以時客戶端和服務端的耦合度不會過高,耦合度過高時對客戶端影響很大,生產環境中,還是希望耦合度不用太高。
優化時可以把rsize,wsize,調大些,可以讓讀的數據和寫的數據可以更多,C5分別只有1024所以要做優化,而C6中,是131072,所以可以不用優化。
3.內核優化:
永久生效:
Cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.wmem_max=16777216
net.core.rmem_max=16777216
EOF

Exportfs命令:
共享:exportfs -o 參數 客戶端地址或網段:共享目錄(零時的,重啓失效)
加載生效:exportfs -rv
Rpcinfo常用-p,rpcinfo -p IP地址,查看rpc服務中是否有nfs端口。
NFS相關知識小結:

  1. 涉及到命令:mount(-t,-o,-a),umount(-l,-f),exportfs(-rv,-o),showmonut(-e),rpcinfo(-p),ping(-c,-t),telnet.
  2. 涉及到的配置文件:/etc/fstab, /etc/exports, /var/lib/nfs/etab, /proc/mounts, /etc/mtab
    NFS的作用:NFS服務可以讓不同的客戶端掛載使用同一個目錄,作爲共享存儲使用,這樣可以保證不同節點客戶端數據一致性,在集羣架構中會經常使用。
    NFS的優點:
    1.簡單:容易上手,容易掌握,數據是在文件系統之上。
    2.方便:部署快速,維護簡單。
    3.可靠:從軟件層面上看,數據可靠性高,經久耐用。數據是在文件系統之上的。
    4.穩定:依賴操作系統。
    NFS的侷限性:
    1.侷限性是存在單點故障,如果nfs server宕機了所有客戶端都訪問不到共享目錄。後期可以通過負載均衡及高可用方案彌補。
    2.在高併發的場合,NFS效率\性能有限(一般幾千萬以下PV的網站不是瓶頸,除非網站架構太差,2千萬PV/日)。
    3.客戶端認證事基於ip和主機名的,安全性一般(用於內網則問題不大)。
    4.NFS數據是明文的,對數據完整性不作驗證。
    5.多臺客戶端掛載NFS服務器時,連接管理維護麻煩。尤其NFS服務端出問題後,所有NF客戶端都掛掉狀態(測試環境中可使用autofs自動掛載解決耦合度太高,但是大併發時,它會零時掛載,這樣會出現問題)。
    耦合度太高==》解耦,網站擴展性才能更好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章