1. 什么是NFS?
全程 network file system 網(wǎng)絡(luò)文件系統(tǒng)
什么是文件系統(tǒng)?
通過網(wǎng)絡(luò)存儲(chǔ)和組織文件的一種方法或機(jī)制
2. 為什么要用共享存儲(chǔ)
前段所有的服務(wù)器接收用戶所上傳的圖片稻轨、文件、視頻都會(huì)放到后端的NFS服務(wù)器上
為什么要共享?
所有節(jié)點(diǎn)服務(wù)器都需要將內(nèi)容存到存儲(chǔ)上羞酗,取的時(shí)候也要統(tǒng)一來取
3. 共享存儲(chǔ)種類
單一的存儲(chǔ)系統(tǒng)就是NFS,中小型企業(yè)紊服,相當(dāng)于阿里云的NAS服務(wù)檀轨。OSS對(duì)象存儲(chǔ)
NFS性能不高。
大型企業(yè)用FastDFS 欺嗤、Ceph参萄、GlsterFS、Mfs
大型存儲(chǔ)廠商:EMC煎饼、Netapp 幾十萬一臺(tái)
硬件存儲(chǔ):穩(wěn)定讹挎、得買兩臺(tái) 或者雙主機(jī)頭 幾十塊硬盤, 需要做raid 10
4. NFS 工作原理
NFS網(wǎng)絡(luò)文件系統(tǒng)吆玖,所以要啟動(dòng)服務(wù)筒溃,還需要啟動(dòng)很多端口
完成NFS功能需要很多服務(wù)。而且每個(gè)服務(wù)都有端口
如何然那個(gè)客戶端找到這些端口沾乘,不但有端口怜奖,而且經(jīng)常變化。
就需要中間有一個(gè)介質(zhì)中轉(zhuǎn)意鲸,(rpc服務(wù))
NFS服務(wù)(固定端口2049烦周,也會(huì)有其他端口):
- NFS服務(wù)(很多進(jìn)程的端口)把自己的端口告訴rpc
- RPC服務(wù)網(wǎng)(對(duì)外固定端口111)
客戶端請(qǐng)求NFS服務(wù),先找RPC服務(wù) 111怎顾,查到NFS的端口读慎,然后發(fā)給客戶端
NFS軟件列表
要部署NFS服務(wù),需要安裝下面的軟件包:
- nfs-utils:NFS服務(wù)的主程序槐雾,包括rpc.nfsd,rpc.mound這兩個(gè)daemons和相關(guān)文檔說明夭委,以及執(zhí)行命令文件等
- rpcbind:CentOS7.6/7下面RPC主程序。NFS可視為一個(gè)RPC程序募强,在啟動(dòng)任何一個(gè)RPC程序之前株灸,需要做好端口和功能的對(duì)應(yīng)映射工作,這個(gè)映射工作就是由rpcbind 服務(wù)來完成的擎值。因此慌烧,在提供NFS服務(wù)之前必須先啟動(dòng)rpcbind服務(wù)才行。
查詢 安裝包
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
查詢不到鸠儿,yum 安裝
[root@nfs01 ~]# yum install nfs-utils rpcbind -y
查詢安裝包已找到
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.61.el7.x86_64
rpcbind-0.2.0-47.el7.x86_64
啟動(dòng)rpc服務(wù)
[root@nfs01 ~]# systemctl start rpcbind.service
開機(jī)自啟動(dòng)rpc服務(wù)
[root@nfs01 ~]# systemctl enable rpcbind.service
查看是否開啟
[root@nfs01 ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-04-17 11:30:58 CST; 19s ago
Main PID: 8098 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─8098 /sbin/rpcbind -w
Apr 17 11:30:58 nfs01 systemd[1]: Starting RPC bind service...
Apr 17 11:30:58 nfs01 systemd[1]: Started RPC bind service.
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
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
重啟NFS服務(wù)屹蚊,并設(shè)置開機(jī)自啟動(dòng)
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs01 ~]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Active: active (exited) since Wed 2019-04-17 11:33:06 CST; 15s ago
Main PID: 8244 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
Apr 17 11:33:06 nfs01 systemd[1]: Starting NFS server and services...
Apr 17 11:33:06 nfs01 systemd[1]: Started NFS server and services.
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
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 7872 status
100024 1 tcp 37897 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
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 37144 nlockmgr
100021 3 udp 37144 nlockmgr
100021 4 udp 37144 nlockmgr
100021 1 tcp 34275 nlockmgr
100021 3 tcp 34275 nlockmgr
100021 4 tcp 34275 nlockmgr
查看rpc和nfs端口是否開啟
[root@nfs01 ~]# netstat -lntup|egrep "rpc|nfs"
tcp 0 0 0.0.0.0:37897 0.0.0.0:* LISTEN 8189/rpc.statd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 8242/rpc.mountd
tcp6 0 0 :::16170 :::* LISTEN 8189/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 8242/rpc.mountd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 8242/rpc.mountd
udp 0 0 0.0.0.0:641 0.0.0.0:* 8098/rpcbind
udp 0 0 0.0.0.0:7872 0.0.0.0:* 8189/rpc.statd
udp 0 0 127.0.0.1:733 0.0.0.0:* 8189/rpc.statd
udp6 0 0 :::20048 :::* 8242/rpc.mountd
udp6 0 0 :::641 :::* 8098/rpcbind
udp6 0 0 :::31068 :::* 8189/rpc.statd
查看 rpc和nfs進(jìn)程是否開啟
ps -ef|egrep "rpc|nfs"
root 6245 2 0 19:04 ? 00:00:00 [rpciod]
rpc 6576 1 0 19:04 ? 00:00:00 /sbin/rpcbind -w
root 7208 2 0 19:04 ? 00:00:00 [nfsiod]
root 7242 2 0 19:04 ? 00:00:00 [nfsv4.1-svc]
rpcuser 7287 1 0 19:04 ? 00:00:00 /usr/sbin/rpc.statd
root 7775 7694 0 20:55 pts/0 00:00:00 grep -E --color=auto rpc|nfs
NFS配置文件/etc/exports
查看這個(gè)文件man exports
可以找到書寫文件的格式
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)
待共享的目錄 訪問的主機(jī)(權(quán)限)
- 待共享的目錄 存東西的目錄 取東西的目錄例如:/data
- 訪問的主機(jī)
172.16.1.7 單個(gè)主機(jī)
172.6.1.0/24 網(wǎng)段
172.16.1.* 代表所有
master主機(jī)名 可以用主機(jī)名厕氨,域名 - 權(quán)限
rw 可讀寫 read write
ro 只讀 resd only
sync 寫到磁盤 安全 慢
async 異步寫到遠(yuǎn)程緩沖區(qū) 快,不安全
編輯/etc/exports文件
共享/data目錄給主機(jī)
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)
/data 172.16.1.0/24(rw,sync)
文件配置完成之后創(chuàng)建/data文檔
[root@nfs01 /]# cat /etc/passwd|grep nfs
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
更改文件的UID屬主和組
[root@nfs01 /]# chown -R nfsnobody.nfsnobody /data
查看
[root@nfs01 /]# ls -ld /data/
drwxr-xr-x 2 nfsnobody nfsnobody 6 Apr 17 11:52 /data/
平滑重啟 (工作中必須平滑重啟)
[root@nfs01 /]# systemctl reload nfs
在本地自我驗(yàn)證汹粤,檢查結(jié)果
出來下列文件之后表示成功
[root@nfs01 /]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
客戶端的配置
需要安裝rpc服務(wù)
因?yàn)榉?wù)端和客戶端是通過rpc服務(wù)通訊才知道服務(wù)端nfs對(duì)應(yīng)的端口號(hào)
使用下方命令驗(yàn)證客戶端是否能訪問到服務(wù)端
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/backup 172.16.1.0/24
/data1 10.0.0.0/24
/data 172.16.1.0/24
然后創(chuàng)建一個(gè)掛載在點(diǎn)
mkdir -p 目錄名
作為掛載點(diǎn)
使用命令把共享目錄掛載到客戶端
mount -t nfs 服務(wù)端的IP:服務(wù)端的共享目錄 客戶端掛載點(diǎn)
最后查看是否掛載上
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 2.1G 16G 12% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 197M 162M 36M 82% /boot
172.16.1.31:/data 18G 2.1G 16G 12% /data
172.16.1.31:/backup 18G 2.1G 16G 12% /nfsbackup
10.0.0.31:/data1 18G 2.1G 16G 12% /data1
tmpfs 98M 0 98M 0% /run/user/0