1.NFS服務配置
NFS服務配置
一、NFS介紹
1.1 NFS文件系統
什麽是文件系統,NFS文件系統又是什麽?
簡單的說,文件系統就是通過軟件對磁盤上的數據進行組織和管理的一種機制,對其的一種封裝或透視。NFS,Network File System。顧名思義,網絡文件系統,即通過網絡,對在不同主機上的文件進行共享。
1.2 NFS起源與應用場景
NFS最早由Sun公司開發,分2,3,4三個版本,2和3由Sun起草開發,4.0開始Netapp公司參與並主導開發,最新為4.1版本,更新比較慢其實4.1是從2010年就開始使用了。
NFS數據傳輸基於RPC協議,RPC為Remote Procedure Call的簡寫。
NFS應用場景是:A,B,C三臺機器上需要保證被訪問到的文件是一樣的,A共享數據出來,B和C分別去掛載A共享的數據目錄,從而B和C訪問到的數據和A上的一致
1.3 NFS架構
為什麽需要使用NFS呢?
在生產環境,我們很少使用單機部署應用,因為單機存在單點故障,一旦宕機,將無法為前端業務提供服務,這是客戶無法容忍的。現在提倡的高可用及7*24服務,是我們追求的目標。 對於一些小的應用,雙機成為了主流。我們來看一種簡單集群場景, 應用分別部署在A及B上, 前端通過F5或著web服務器訪問應用。如下圖:
那麽當客戶端發出一個請求時,F5根據一定的機制進行轉發,有可能有A服務器進行響應,也有可能
由B服務器進行響應。 而在web應用中上傳一些靜態文件是很常見的一種功能,如圖片。假設用戶在某一時間,上傳了一張照片到A服務器上,那麽下次訪問時,被F5路由到了B服務器上,由於B服務器上並沒有存儲上傳的照片,所以將造成用戶無法看到自己上傳的照片。那麽很容易想到,是不是可以把文件上傳到一個公用的服務器上呢? 這樣不管訪問的是A還是B,讀、取文件都只存在一份。答案是肯定的,這個公用的服務器我們也稱之為文件服務器。上面的架構就演變成了下面的架構:
NFS提供了一種機制,可以讓A、B訪問C中的一個共享目錄,就像是操作本地文件一樣。
註:此處當然也可以通過sftp或ftp進行文件上傳和下載。
1.4 NFS的原理:
首先:NFS包括兩部分,服務端及客戶端
由於NFS服務功能很多,會有很多端口,這些端口還有可能不固定,那麽客戶端就無法與服務器進行通信,因為程序間通信必須通過端口(tcp/udp都是端到端通信),那麽就需要一個中間的橋接機制,RPC進程即充當這樣一個角色,RPC的端口是一定的(111),當NFS啟動時,會向RPC進行註冊, 那麽客戶端PRC就能與服務器RPC進行通信, 從而進行文件的傳輸。
當客戶端用戶打開一個文件或目錄時,內核會判斷,該文件是本地文件還是遠程共享目錄文件,如果是遠程文件則通過RPC進程訪問遠程NFS服務端的共享目錄,如果是本地文件,則直接打開。
為了更好的並發,RPC進程及NFS進程都有多個。
二、服務端配置NFS
2.1 需求:兩臺機器。xavi001為服務器(192.168.72.130),xavi002為客戶端進行測試(192.168.72.133):
2.2 在服務端和測試段都安裝上rpcbind
# yum install -y nfs-utils //yum工具安裝nfs-utils時會一並安裝recbind
小技巧關於安裝包印象整體安裝進度時,可以把相關安裝源禁掉
以下以epel為例
[root@xavi ~]# cd /etc/yum.repos.d/
[root@xavi yum.repos.d]# ls
CentOS7-Base-163.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo epel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo
[root@xavi yum.repos.d]# mv epel.repo epel.repo.1
- 將安裝的epel文件move到另外地方,這樣禁止好,可以加快安裝進程。
2.3 編輯配置文件
[root@xavi ~]# vim /etc/exports
/home/nfstestdir 192.168.72.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
小括號內的權限選項含義:
rw: 讀寫
ro: 只讀
sync: 同步模式,內存數據實時寫入磁盤
async :非同步模式
no_root_squash: 客戶端掛載NFS共享目錄後,root用戶不受約束,權限很大
root_squash: 與上面選項相對,客戶端上的root用戶收到約束,被限定成某個普通用戶
all_squash:
客戶端上所有用戶在使用NFS共享目錄時都被限定為一個普通用戶anonuid/anongid: 和上面幾個選項搭配使用,定義被限定用戶的uid和gid
2.4 創建目錄並修改權限,方便後面測試
[root@xavi ~]# chmod 777 /home/nfstestdir/
2.5 查看rpc服務是否啟動
[root@xavi ~]# netstat -lntp //111端口說明rpcbind已啟動
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1866/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1050/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1048/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1693/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1050/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1048/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1693/master
[root@xavi ~]# ps aux |grep rpc //rpcbind服務已啟動
root 385 0.0 0.0 0 0 ? S< 10:00 0:00 [rpciod]
rpcuser 2657 0.0 0.0 44464 1824 ? Ss 10:11 0:00 /usr/sbin/rpc.statd
rpc 2659 0.0 0.0 64964 1348 ? Ss 10:11 0:00 /sbin/rpcbind -w
root 2660 0.0 0.0 42564 940 ? Ss 10:11 0:00 /usr/sbin/rpc.mountd
root 2661 0.0 0.0 43812 536 ? Ss 10:11 0:00 /usr/sbin/rpc.idmapd
root 2700 0.0 0.0 112684 976 pts/0 S+ 10:12 0:00 grep --color=auto rpc
2.6 啟動NFS服務,這是rpc的相關聯的服務也會被啟動
[root@xavi ~]# systemctl start nfs
[root@xavi ~]# ps aux |grep nfs
root 2672 0.0 0.0 0 0 ? S< 10:11 0:00 [nfsd4_callbacks]
root 2678 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2679 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2680 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2681 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2682 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2683 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2684 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2685 0.0 0.0 0 0 ? S 10:11 0:00 [nfsd]
root 2690 0.0 0.0 112680 976 pts/0 S+ 10:11 0:00 grep --color=auto nfs
[root@xavi ~]# ps aux |grep rpc
root 385 0.0 0.0 0 0 ? S< 10:00 0:00 [rpciod]
rpcuser 2657 0.0 0.0 44464 1824 ? Ss 10:11 0:00 /usr/sbin/rpc.statd
rpc 2659 0.0 0.0 64964 1348 ? Ss 10:11 0:00 /sbin/rpcbind -w
root 2660 0.0 0.0 42564 940 ? Ss 10:11 0:00 /usr/sbin/rpc.mountd
root 2661 0.0 0.0 43812 536 ? Ss 10:11 0:00 /usr/sbin/rpc.idmapd
root 2700 0.0 0.0 112684 976 pts/0 S+ 10:12 0:00 grep --color=auto rpc
2.7 設置NFS開機啟動項
[root@xavi ~]# 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客戶端設置
上節內容中我們已經安裝好了nfs-utils包
3.1 shwomount查看服務端共享目錄
使用showmount -e IP可以查看NFS的共享情況
[root@xavi-002 ~]# showmount -e 192.168.72.130
Export list for 192.168.72.130:
/home/nfstestdir 192.168.241.0/24 //共享目錄為/home/nfstestdir,信任主機為192.168.241.0/24網段
共享目錄為/home/nfstestdir,信任主機為192.168.241.0/24網段
如果沒有出現共享目錄,有可能是服務端沒有開啟rpc服務,或者現在客戶端的防火墻沒有關閉,註意NFS是特殊的服務,必須關閉防火墻
[root@xavi ~]# setenforce 0
setenforce: SELinux is disabled
[root@xavi-002 ~]# getenforce
Disabled
3.2 在客戶端掛載NFS
[root@xavi-002 ~]# mount -t nfs 192.168.72.130:/home/nfstestdir /mnt/
[root@xavi-002 ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/sda3 17G 3.6G 13G 23% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 7.1M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.72.130:/home/nfstestdir 17G 10G 6.2G 63% /mnt
3.3 在增加的/mnt分區,就是NFS共享的目錄,在該目錄下創建測試文件:
[root@xavi-002 ~]# cd /mnt/
[root@xavi-002 mnt]# ls
[root@xavi-002 mnt]# touch xavilinux.123
[root@xavi-002 mnt]# ls -l
總用量 0
-rw-r--r-- 1 xavi xavi 0 3月 27 10:55 xavilinux.123
[root@xavi-002 mnt]# id xavi
uid=1000(xavi) gid=1000(xavi) 組=1000(xavi),10(wheel)
3.4 在服務端查看
[root@xavi ~]# ls -l /home/nfstestdir/
總用量 0
-rw-r--r-- 1 xavi xavi 0 3月 27 10:55 xavilinux.123
[root@xavi ~]# id xavi
uid=1000(xavi) gid=1000(xavi) 組=1000(xavi),1004(grptest1)
可以看到創建的新文件xavilinux.txt所有者和所屬組為xavi,其uid和gid都為1000.
1.NFS服務配置