在linux下搭建NFS伺服器實現檔案共享

人生的哲理發表於2020-12-22

一.關於NFS

1.NFS是Network File System的簡寫,即網路檔案系統。網路檔案系統是FreeBSD支援的檔案系統中的一種,也被稱為NFS,NFS允許一個系統在網路上與他人共享目錄和檔案。通過使用NFS,使用者和程式可以像訪問本地檔案一樣訪問遠端系統上的檔案。

2.在專案中,如果A,B,C伺服器都需要D伺服器上的某個目錄下的檔案,就可以把D伺服器上的目錄使用NFS的方式共享給A,B,C伺服器,既方便又節省磁碟空間,D伺服器還可以設定許可權限制A,B,C的訪問。

3.NFS的軟體架構是C/S架構(即客戶端/伺服器端架構)。

4.NFS的監聽埠為 2049,可以使用如下方式檢視:

[root@node5 ~]# cat /etc/services | grep "^nfs"
nfs             2049/tcp        nfsd shilp      # Network File System
nfs             2049/udp        nfsd shilp      # Network File System
nfs             2049/sctp       nfsd shilp      # Network File System
nfsd-keepalive  1110/udp                # Client status info
nfsrdma         20049/tcp               # Network File System (NFS) over RDMA
nfsrdma         20049/udp               # Network File System (NFS) over RDMA
nfsrdma         20049/sctp              # Network File System (NFS) over RDMA

二.搭建一臺NFS伺服器共享特定資源

1.部署環境

伺服器 作業系統版本 CPU架構 程式 功能描述
node5/192.168.110.184 CentOS Linux release 7.9.2009 (Core) x86_64 rpcbind,nfs-server NFS伺服器端
node8/192.168.110.186 CentOS Linux release 7.9.2009 (Core) x86_64 需要安裝nfs-server,但是不需要啟動 NFS客戶端

2.在node5上安裝NFS

#安裝nfs
[root@node5 ~]# yum -y install rpcbind nfs-utils

[root@node5 ~]# rpm -qa | grep rpcbind 
rpcbind-0.2.0-49.el7.x86_64

[root@node5 ~]# rpm -qa | grep nfs
libnfsidmap-0.25-19.el7.x86_64
nfs-utils-1.3.0-0.68.el7.x86_64

#檢視已安裝的nfs-utils命令,生成了哪些檔案
[root@node5 ~]# rpm -ql nfs-utils
/etc/exports.d
/etc/gssproxy/24-nfs-server.conf
/etc/modprobe.d/lockd.conf
/etc/nfs.conf
/etc/nfsmount.conf
/etc/request-key.d/id_resolver.conf
/etc/sysconfig/nfs
......
/var/lib/nfs/state
/var/lib/nfs/v4recovery
/var/lib/nfs/xtab

#NFS的核心配置檔案
[root@node5 ~]# ls /etc/exports
/etc/exports

[root@node5 ~]# systemctl start rpcbind

#啟動NFS
[root@node5 ~]# systemctl start nfs

[root@node5 ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-12-21 23:38:40 CST; 31s ago
  Process: 75239 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 75240 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─75240 /sbin/rpcbind -w

Dec 21 23:38:40 node5 systemd[1]: Starting RPC bind service...
Dec 21 23:38:40 node5 systemd[1]: Started RPC bind service.

#檢視NFS啟動狀態
[root@node5 ~]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Mon 2020-12-21 23:38:55 CST; 21s ago
  Process: 75283 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 75266 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 75263 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 75266 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Dec 21 23:38:55 node5 systemd[1]: Starting NFS server and services...
Dec 21 23:38:55 node5 systemd[1]: Started NFS server and services.

#檢視NFS埠有沒有監聽
[root@node5 ~]# netstat -antup | grep 2049
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
udp        0      0 0.0.0.0:2049            0.0.0.0:*                           -                   
udp6       0      0 :::2049                 :::*                                -                   

#設定NFS開機自啟動
[root@node5 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

#檢視NFS是否開機自啟動
[root@node5 ~]# systemctl is-enabled nfs
enabled

3.修改配置檔案,把node5的Tomcat釋出目錄分享給node8

#修改配置檔案
[root@node5 ~]# vim /etc/exports

#/usr/local/apache-tomcat-8.0.51/webapps表示要共享的目錄
#192.168.110.186表示只對192.168.110.186這臺伺服器共享
#rw,no_root_squash表示訪問許可權,rw表示有讀寫許可權,no_root_squash表示root使用者具有根目錄的完全管理訪問許可權
#其他可用引數說明(看情況配置即可):
#ro             		 #只讀訪問。
#rw                  	 #讀寫訪問。
#sync                	 #資料同步寫入到記憶體與硬碟當中。
#async                   #資料會先暫存於記憶體當中,而非直接寫入硬碟。
#secure                  #NFS通過1024以下的安全TCP/IP埠傳送。
#insecure                #NFS通過1024以上的埠傳送。
#wdelay                  #如果多個使用者要寫入NFS目錄,則歸組寫入(預設)。
#no_wdelay               #如果多個使用者要寫入NFS目錄,則立即寫入,當使用async時,無需此設定。 
#hide                    #在NFS共享目錄中不共享其子目錄。
#no_hide                 #共享NFS目錄的子目錄。
#subtree_check           #如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的許可權(預設)。 
#no_subtree_check        #和上面相對,不檢查父目錄許可權。
#all_squash              #共享檔案的UID和GID對映匿名使用者anonymous,適合公用目錄。 
#no_all_squash           #保留共享檔案的UID和GID(預設)。
#root_squash             #root使用者的所有請求對映成如anonymous使用者一樣的許可權(預設)。
#no_root_squash          #root使用者具有根目錄的完全管理訪問許可權。
[root@node5 ~]# cat /etc/exports
/usr/local/apache-tomcat-8.0.51/webapps 192.168.110.186(rw,no_root_squash)

#動態載入配置檔案
[root@node5 ~]# exportfs -rv
exporting 192.168.110.186:/usr/local/apache-tomcat-8.0.51/webapps

#nfs預設使用nfsnobody使用者,所以修改共享目錄擁有者
[root@node5 ~]# chown nfsnobody:nfsnobody -R /usr/local/apache-tomcat-8.0.51/webapps

4.在客戶端node8上檢視是否能看到共享目錄

#首先在客戶端node8安裝nfs,不需要啟動,但是需要nfs裡包含的命令showmount
[root@node8 ~]# yum -y install nfs-utils

[root@node8 ~]# rpm -qa | grep nfs
nfs-utils-1.3.0-0.48.el7.x86_64
libnfsidmap-0.25-17.el7.x86_64

#檢視伺服器端的共享目錄,showmount語法:showmount -e NFS伺服器端IP
#在客戶端node8上可以看到伺服器端的共享目錄,則伺服器端的/etc/exports配置正確
[root@node8 ~]# showmount -e 192.168.110.184
Export list for 192.168.110.184:
/usr/local/apache-tomcat-8.0.51/webapps 192.168.110.186

5.掛載共享目錄

#建立掛載目錄
[root@node8 ~]# mkdir /tomcatapp

#掛載共享目錄
[root@node8 ~]# mount -t nfs 192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps /tomcatapp

#檢視掛載情況
[root@node8 ~]# df -h
Filesystem                                               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root                                   17G   14G  3.6G  80% /
devtmpfs                                                 478M     0  478M   0% /dev
tmpfs                                                    489M     0  489M   0% /dev/shm
tmpfs                                                    489M   13M  476M   3% /run
tmpfs                                                    489M     0  489M   0% /sys/fs/cgroup
/dev/loop0                                               4.3G  4.3G     0 100% /mnt/cdrom
/dev/sda1                                               1014M  125M  890M  13% /boot
tmpfs                                                     98M     0   98M   0% /run/user/0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps   17G   14G  4.0G  77% /tomcatapp

#此時在/tomcatapp就可以看到共享檔案了
[root@node8 ~]# cd /tomcatapp/
[root@node8 tomcatapp]# pwd
/tomcatapp

#具有讀的許可權
[root@node8 tomcatapp]# ls
docs  examples  host-manager  index.jsp  manager  ROOT  test

#具有寫的許可權
[root@node8 tomcatapp]# mkdir 2358
[root@node8 tomcatapp]# ls
2358  docs  examples  host-manager  index.jsp  manager  ROOT  test

6.配置開機自動掛載共享目錄

[root@node8 tomcatapp]# vim /etc/fstab 

#在/etc/fstab的末尾新增“192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps /tomcatapp nfs defaults 0 0”,使其可以開機自動掛載
[root@node8 tomcatapp]# cat /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=db58ac18-ddda-44e9-bbf5-2584fac03ed6 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/mnt/yum-iso/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom iso9660 loop 0 0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps /tomcatapp nfs defaults 0 0

自此,NFS伺服器搭建完畢。

三.調優

1.調優思路:先調節系統核心引數,使作業系統效能最優,然後再調節NFS客戶端掛載引數。

2.系統核心優化

[root@node8 ~]# vim /etc/sysctl.conf 

[root@node8 ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
#核心預設讀快取
net.core.wmem_default = 8388608
#核心預設寫快取
net.core.rmem_default = 8388608
#核心最大讀快取
net.core.rmem_max = 16777216
#核心最大寫快取
net.core.wmem_max = 16777216

#使配置檔案生效
[root@node8 ~]# sysctl -p
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

3.NFS客戶端掛載引數優化

[root@node8 ~]# df -h
Filesystem                                               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root                                   17G   14G  3.6G  80% /
devtmpfs                                                 478M     0  478M   0% /dev
tmpfs                                                    489M     0  489M   0% /dev/shm
tmpfs                                                    489M   13M  476M   3% /run
tmpfs                                                    489M     0  489M   0% /sys/fs/cgroup
/dev/loop0                                               4.3G  4.3G     0 100% /mnt/cdrom
/dev/sda1                                               1014M  125M  890M  13% /boot
tmpfs                                                     98M     0   98M   0% /run/user/0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps   17G   14G  4.0G  77% /tomcatapp

#先解除安裝共享目錄
[root@node8 ~]# umount 192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps
 
[root@node8 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G   14G  3.6G  80% /
devtmpfs                 478M     0  478M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M   13M  476M   3% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/loop0               4.3G  4.3G     0 100% /mnt/cdrom
/dev/sda1               1014M  125M  890M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0

#優化NFS客戶端掛載引數
#-o後面跟掛載引數
#noatime:取消更新檔案系統上的inode訪問時間,提升I/O效能,優化I/O目的,推薦使用。
#nodiratime:取消更新檔案系統上的directory inode訪問時間,高併發環境,推薦顯式應用該選項,提高系統效能。
#intr:可以中斷不成功的掛載。
#rsize/wsize:讀取(rsize)/寫入(wsize)的區塊大小(block size),這個設定值可以影響客戶端與服務端傳輸資料的緩衝儲存量。一般來說,如果在區域網內,並且客戶端與服務端都具有足夠的記憶體,這個值可以設定大一點,比如說32768(bytes),提升緩衝區塊將可提升NFS檔案系統的傳輸能力。但設定的值也不要太大,最好是實現網路能夠傳輸的最大值為限。
[root@node8 ~]# mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072,intr 192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps /tomcatapp
[root@node8 ~]# df -h
Filesystem                                               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root                                   17G   14G  3.6G  80% /
devtmpfs                                                 478M     0  478M   0% /dev
tmpfs                                                    489M     0  489M   0% /dev/shm
tmpfs                                                    489M   13M  476M   3% /run
tmpfs                                                    489M     0  489M   0% /sys/fs/cgroup
/dev/loop0                                               4.3G  4.3G     0 100% /mnt/cdrom
/dev/sda1                                               1014M  125M  890M  13% /boot
tmpfs                                                     98M     0   98M   0% /run/user/0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps   17G   14G  4.0G  77% /tomcatapp

[root@node8 ~]# vim /etc/fstab 

#把優化後的掛載引數也加入到配置檔案中
[root@node8 ~]# cat /etc/fstab 
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=db58ac18-ddda-44e9-bbf5-2584fac03ed6 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/mnt/yum-iso/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom iso9660 loop 0 0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps /tomcatapp nfs noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0

[root@node8 ~]# mount -a
[root@node8 ~]# df -h
Filesystem                                               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root                                   17G   14G  3.6G  80% /
devtmpfs                                                 478M     0  478M   0% /dev
tmpfs                                                    489M     0  489M   0% /dev/shm
tmpfs                                                    489M   13M  476M   3% /run
tmpfs                                                    489M     0  489M   0% /sys/fs/cgroup
/dev/loop0                                               4.3G  4.3G     0 100% /mnt/cdrom
/dev/sda1                                               1014M  125M  890M  13% /boot
tmpfs                                                     98M     0   98M   0% /run/user/0
192.168.110.184:/usr/local/apache-tomcat-8.0.51/webapps   17G   14G  4.0G  77% /tomcatapp

自此,NFS調優完畢。

相關文章