1、什么是NFS?
全称network file system网络文件系统
什么是文件系统?
组织和存取文件的一种机制
什么是网络文件系统?
通过网络来存储和组织文件的一种方法或机制。
2、为什么要用共享存储?
前端所有的应用服务器接收到用户上传的图片、文件、视频,都用统一的放到后端的存储上。
为什么要共享?所有节点服务器都需要将内容放到存储上,取的统一来取。
3、共享存储的种类
单点存储系统就是NFS,中小型企业。阿里云服务的NAS服务。OSS对象存储。
NFS性能不太高。
大型企业会用分布式存储FastDFS、Ceph、GlsterFS、Mfs
大型存储厂商:EMC、Netapp(几十万)
艺龙旅行网存储用的EMC传统企业。
硬件存储:稳定、2台、双主机头、几十块硬盘 RAID10。
BAT曾经用硬件,超贵
阿里云去IOE Orace EMc
4、NFS工作原理
NFS网络文件系统
启动NFS服务,而且还有启动很多端口。
NFS功能,需要很多服务。每个服务都有端口,而且经常变动。
如何让客户端找到这些端口呢?就需要一个经纪人(rpc服务)
NFS服务:
(1)NFS服务(有很多进程和端口),把自己的端口告诉RPC。
(2)RPC服务(对外固定端口111)。
客户端请求NFS服务,先找RPC 111 ,查到NFS的端口,发给客户。
客户端:开启PRC服务,
服务端:先开启RPC服务然后开启NFS服务,NFS服务会把端口号告诉RPC服务。
客户端的PRC服务通过TCP/IP协议找到服务端的RPC服务,
服务端的RPC通过TCP/IP返回给客户端的RPC并告诉服务端NFS的端口号111,
客户端的RPC或通过TCP/IP直接访问客户端的NFS服务。
5、安装
yum install -y nfs-utils rpcbind
查看:
[root@nfs01 ~]# rpm -aq nfs-utils rpcbind
rpcbind-0.2.0-47.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
开启rpcinfo服务
[root@nfs01 ~]# systemctl start rpcbind.service
[root@nfs01 ~]# systemctl enable rpcbind.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
检查本地有没有开启服务:
[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 54138 status
100024 1 tcp 45145 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 55016 nlockmgr
100021 3 udp 55016 nlockmgr
100021 4 udp 55016 nlockmgr
100021 1 tcp 43292 nlockmgr
100021 3 tcp 43292 nlockmgr
100021 4 tcp 43292 nlockmgr
查看端口:
[root@nfs01 ~]# netstat -lntup|egrep "rpc|nfs"
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 8293/rpc.mountd
tcp 0 0 0.0.0.0:45145 0.0.0.0:* LISTEN 8240/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 8293/rpc.mountd
tcp6 0 0 :::60227 :::* LISTEN 8240/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 8293/rpc.mountd
udp 0 0 0.0.0.0:746 0.0.0.0:* 8203/rpcbind
udp 0 0 127.0.0.1:784 0.0.0.0:* 8240/rpc.statd
udp 0 0 0.0.0.0:54138 0.0.0.0:* 8240/rpc.statd
udp6 0 0 :::20048 :::* 8293/rpc.mountd
udp6 0 0 :::37576 :::* 8240/rpc.statd
udp6 0 0 :::746 :::* 8203/rpcbind
6、配置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)
待共享的目录访问的主机(权限)
(1)待共享的目录存东西的目录取东西的目录例如/data
(2)访问的主机,
172.16.1.7(web01) 单个主机
172.16.1.0/24网段
172.16.1.*网段
master主机名
(3)()权限
rw可读写 read write
ro只读 read only
sync写到磁盘才算完成,安全
async异步写到远程缓冲区,快,不安全
NFS默认用户nfsnobody
[root@nfs01 ~]# mkdir -p /data
[root@nfs01 ~]# ll -ld /data/
drwxr-xr-x 2 root root 105 Apr 16 17:12 /data/
[root@nfs01 ~]# grep nfs /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ll -ld /data/
drwxr-xr-x 2 nfsnobody nfsnobody 105 Apr 16 17:12 /data/
重启NFS
平滑重启,不影响用户
在生产场景中必须要平滑重启。
[root@nfs01 ~]# systemctl reload nfs
[root@nfs01 ~]# exportfs -r
上述二者等价,选一个即可。
检查:
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/16
看到共享目录了。
服务端本地挂载:
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data/ /mnt
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 90G 1.7G 88G 2% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 182M 0 182M 0% /run/user/0
172.16.1.31:/data 90G 1.7G 88G 2% /mnt
[root@nfs01 ~]# touch /mnt/oldboy.txt
[root@nfs01 ~]# ls /mnt/
1 2 3 4 5 a b c d oldboy.txt
换到web01挂载:
1、安装
yum install -y nfs-utils rpcbind
[root@webol ~]# rpm -aq nfs-utils rpcbind
nfs-utils-1.3.0-0.61.el7.x86_64
rpcbind-0.2.0-47.el7.x86_64
2、启动
[root@webol ~]# systemctl start rpcbind
[root@webol ~]# systemctl enable rpcbind
[root@webol ~]# netstat -lntup|grep rpc
udp 0 0 0.0.0.0:727 0.0.0.0:* 8184/rpcbind
udp6 0 0 :::727 :::* 8184/rpcbind
[root@webol ~]# netstat -lntup|grep rpc
udp 0 0 0.0.0.0:727 0.0.0.0:* 81
udp6 0 0 :::727 :::* 81
[root@webol ~]# ps -ef |grep rpcbind
rpc 8184 1 0 12:17 ? 00:00:00 /sbin/rpcbind -w
root 8210 7920 0 12:18 pts/2 00:00:00 grep --color=auto rpcbind
查看NFS服务器提供的共享目录:
[root@webol ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/16
操作前备份,操作后检查。
课后作业
1、backup客户端挂载好
2、实现开机自动挂载(fstab里实现,rc.local)
3、项目实战
Web01 backup客户端实现挂载到nfs
实现开机自动挂载。