14.1 NFS介绍
NFS是Network File System的缩写
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
NFS架构
应用场景:
A B C为别是三台机器
他们分别需要访问同一个目录,且目录中都是图片。传统的做法就是把这些图片分别放到A,B,C中,
但若使用NFS,只需要把图片放到A上,然后A共享给B和C即可。访问B和C时,是通过网络的方式去访问A上的那个目录的。
NFS原理图
NFS服务端 启动NFS服务,利用RPC服务(启动rpcbind,实现RPC通信)去提供NFS客户端使用NFS服务
rpcbind监听111端口
NFS服务需要借助RPC协议实现通信
14.2 NFS服务端安装配置
大纲
准备工作:
2台或以上linux机器
centos7-01(192.168.189.128)客户端
centos7-02(192.168.189.129)服务端
*以下全部操作都在服务端操作
1 先在服务端和客户端安装两个包
[[email protected] ~]# yum install -y nfs-utils rpcbindc
[[email protected] ~]# yum install -y nfs-utils rpcbindc
2 安装完成后,编辑exports文件
[[email protected] ~]#vim /etc/exports //加入如下内容
/home/nfstestdir 192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
格式解释:
以空格(空格键)分割,分为三部分
第一部分是本地要分享出去的目录(如果不存在,需要自行创建)
第二部分是允许访问的主机(可以是一个IP,也可以是一个IP段)
第三部分是小括号里面的权限选项。
3 启动服务
3.1 启动服务之前的准备
[[email protected] ~]#mkdir /home/nfstestdir创建分享目录
[[email protected] ~]#chmod 777 /home/nfstestdir赋予777权限,方便后面测试权限通过
检查监听端口,看看rpcbind监听端口状态
[[email protected] ~]# netstat -lntp |grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
其实111端口就是rpcbind的服务,这里显示systemd并不代表rpcbind没被监听,
只需记住111端口就是rpcbind服务使用即可。
3.2 启动服务
#systemctl start rpcbind 启动rpc服务
#systemctl start nfs启动nfs服务
#systemctl enable rpcbind 开机启动rpc服务
#systemctl enable nfs开机启动nfs服务(服务端)
14.3 NFS配置选项
大纲
先看看服务端配置的参数选项
[[email protected] home]# cat /etc/exports
/home/nfstestdir 192.168.189.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
客户端挂载NFS
大纲
1 安装nfs-utils包
#yum install -y nfs-utils
2 查看指定ip挂载服务状态,下面的ip为NFS服务端ip
[[email protected]entos7-02 ~]# showmount -e 192.168.189.128
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
报错提示,网络不通,通讯失败(原因:防火墙、rpc的端口没被监听)
2.1 关闭客户端与服务端的防火墙服务
[[email protected] home]# systemctl stop firewalld
[[email protected] home]# setenforce 0
[[email protected] home]# systemctl stop firewalld
[[email protected] home]# setenforce 0
2.2 关闭防火墙后,再次showmount
[[email protected] ~]# showmount -e 192.168.189.128
Export list for 192.168.189.128:
/home/nfstestdir 192.168.189.0/24
关闭防火墙后正常输出,可以看到状态信息和服务端的NFS设置一样
3 挂载NFS
[[email protected] ~]# mount -t nfs 192.168.189.128:/home/nfstestdir /mnt/
3.1 检查挂载
[[email protected] ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 28G 1.1G 27G 4% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 187M 97M 91M 52% /boot
tmpfs 99M 0 99M 0% /run/user/0
192.168.189.128:/home/nfstestdir 28G 9.3G 19G 34% /mnt
3.2 在客户端创建文件测试
3.2.1 在客户端上创建文件
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# touch client.test
[[email protected] mnt]# ls -l
总用量 0
-rw-r--r--. 1 user5 user5 0 5月 9 16:14 client.test
3.2.2 在服务端检查文件是否被建立
[[email protected] home]# cd /home/nfstestdir/
[[email protected] nfstestdir]# ls -l
总用量 0
-rw-r--r-- 1 aming aming 0 5月 9 16:14 client.test
文件被创建,
但可以看到客户端创建的文件用户名和组都不同。
原因是:在服务端限定了uid和gid为1000,所以 客户端和服务端的用户和用户组是不同的。
服务端ID为1000的用户
[[email protected] nfstestdir]# cat /etc/passwd |grep 1000
aming:x:1000:1000::/home/aming:/bin/bash
客户端ID为1000的用户
[[email protected] mnt]# cat /etc/passwd |grep 1000
user5:x:1000:1000::/home/user5:/bin/bash
由此可以证明,NFS搭建成功。
原文地址:http://blog.51cto.com/13578154/2114478