1. 什么是NFS?
全程 network file system 网络文件系统
什么是文件系统?
通过网络存储和组织文件的一种方法或机制
2. 为什么要用共享存储
前段所有的服务器接收用户所上传的图片、文件、视频都会放到后端的NFS服务器上
为什么要共享?
所有节点服务器都需要将内容存到存储上,取的时候也要统一来取
3. 共享存储种类
单一的存储系统就是NFS,中小型企业,相当于阿里云的NAS服务。OSS对象存储
NFS性能不高。
大型企业用FastDFS 、Ceph、GlsterFS、Mfs
大型存储厂商:EMC、Netapp 几十万一台
硬件存储:稳定、得买两台 或者双主机头 几十块硬盘, 需要做raid 10
4. NFS 工作原理
NFS网络文件系统,所以要启动服务,还需要启动很多端口
完成NFS功能需要很多服务。而且每个服务都有端口
如何然那个客户端找到这些端口,不但有端口,而且经常变化。
就需要中间有一个介质中转,(rpc服务)
NFS服务(固定端口2049,也会有其他端口):
- NFS服务(很多进程的端口)把自己的端口告诉rpc
- RPC服务网(对外固定端口111)
客户端请求NFS服务,先找RPC服务 111,查到NFS的端口,然后发给客户端
NFS软件列表
要部署NFS服务,需要安装下面的软件包:
- nfs-utils:NFS服务的主程序,包括rpc.nfsd,rpc.mound这两个daemons和相关文档说明,以及执行命令文件等
- rpcbind:CentOS7.6/7下面RPC主程序。NFS可视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind 服务来完成的。因此,在提供NFS服务之前必须先启动rpcbind服务才行。
查询 安装包
[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
启动rpc服务
[root@nfs01 ~]# systemctl start rpcbind.service
开机自启动rpc服务
[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服务,并设置开机自启动
[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进程是否开启
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
查看这个文件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)
待共享的目录 访问的主机(权限)
- 待共享的目录 存东西的目录 取东西的目录例如:/data
- 访问的主机
172.16.1.7 单个主机
172.6.1.0/24 网段
172.16.1.* 代表所有
master主机名 可以用主机名,域名 - 权限
rw 可读写 read write
ro 只读 resd only
sync 写到磁盘 安全 慢
async 异步写到远程缓冲区 快,不安全
编辑/etc/exports文件
共享/data目录给主机
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)
/data 172.16.1.0/24(rw,sync)
文件配置完成之后创建/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
在本地自我验证,检查结果
出来下列文件之后表示成功
[root@nfs01 /]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
客户端的配置
需要安装rpc服务
因为服务端和客户端是通过rpc服务通讯才知道服务端nfs对应的端口号
使用下方命令验证客户端是否能访问到服务端
[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
然后创建一个挂载在点
mkdir -p 目录名
作为挂载点
使用命令把共享目录挂载到客户端
mount -t nfs 服务端的IP:服务端的共享目录 客户端挂载点
最后查看是否挂载上
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