一.NFS服务
专用于linux和linux之间的专门的文件共享服务(NFS)服务,network filesystem网络文件系统
NFS服务可以把远程linux机器上面的文件目录数据,通过挂载的形式,映射到用户本地机器
本地/mnt ------------- 远方的一台服务器/sharedir
二.NFS和RPC的概念
NFS通过port传输数据,NFS服务在传输数据的时候,端口是随机选择的(自己重启NFS服务,查看端口是否在变化)
但是因为NFS的端口是随机的,既然端口不确定,客户端是无法链接NFS服务的
所以我们就需要一个另外的服务,进行NFS的端口注册,并且告知客户端NFS的工作端口是哪一个,以此让客户端能连接到服务器的NFS服务
三.什么是RPC
RPC(远程过程调用)
linux使用NFS服务必须启动2个服务
- NFS服务
- RPC服务
NFS服务通过RPC注册自己的端口功能
RPC服务功能就是记录每个NFS服务对应的端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输目的
四.工具
- nfs-utils:NFS服务的主程序,包括了rpc.nfsd rpc.mountd这两个守护进程,相关配置文件信息
- RPCBIND:
RPC在centos7系统平台下,实现的软件RPCBIND服务
NFS服务的配置,必须要先运行好RPCBIND服务才可以
如果RPCBIND服务重启了,原本注册的NFS服务端的信息也失效了,你还得再重启NFS服务端,重新注册信息才可以
如果仅仅修改了NFS配置文件,不需要重启NFS服务端,因为重启后,端口的信息就更新了,还得重新注册。
五.安装配置NFS环境
1.查看一下是否有nfs-utils和rpcbind软件包的安装rpm包
[root@localhost virtual_user_dir]# rpm -qa nfs-utils rpcbind nfs-utils-1.3.0-0.68.el7.x86_64 rpcbind-0.2.0-49.el7.x86_64
2.安装nfs-utils 、rpcbind
yum install nfs-utils
yum install rpcbind
3.环境配置
NFS是c/s模式,准备一个nfs服务端,准备一个nfs客户端,两台linux机器
再nfsserver端创建一个 用于共享的文件夹,且设置相应的读写权限
mkdir /sharenfs chmod -Rf 777 /sharenfs/
六、nfs的配置文件
vim /etc/exports
1.nfs配置文件需要遵守如下规则:
nfs共享目录 nfs客户端地址(参数1,参数2……) NFS客户端地址2(参数1,参数2……)
例如:
#把nfs服务端的根目录共享出去,且允许两个主机名为client1,client2的机器,可以进行rw读写权限 / client1(rw) client2(rw)
#允许任意的客户端,都能够挂载到此nfs /public *(rw)
#只允许指定的ip地址的服务器,能够挂载此NFS服务端的/home/nfsfile文件夹且是只读的 /home/nfsfile 101.1.16.61(ro)
2.nfs语法参数解释:
nfs共享目录是绝对路径
nfs客户端地址,也就是nfs服务器授权可以访问共享目录的地址,可以写主机名,可以写通配符,ip地址
权限参数对nfs授权的客户端,进行权限控制的参数
3.nfs客户端地址形式
单一客户端 10.1.1.1 ---用的很少
允许整个网段访问 10.1.1.0/24 ---局域网,用的较多
授权整个域名客户端 nfs.baidu.cn ---用的很少
授权子域名客户端 *.baidu.cn ---用的少
4.nfs客户端权限参数
ro ---只读
rw ---读写
root_squash ---当nfs客户端以root账号访问nfs服务端共享目录数据的时候,把该root映射为nfs服务端的一个匿名用户,该用户的uid,gid会变成nfsnobody的信息
no_root_squash ---几乎和上面一样,但是不安全,因为会映射成root账户
all_squash ---所有nfs客户端的用户都映射为匿名用户,很安全,生产环境常用
sync ---数据同步写入到内存和磁盘,有点是保证内存数据安全,但效率太低
async ---数据先写入内存,再写入到磁盘,但是内存是易失性存储,所以掉电可能会出问题
七、nfs服务端的文件目录共享实践
1.前提
nfs服务是基于rpc的111通信端口,必须要先确保已经启动了rpc服务
如果rpcbind服务停止了,111端口也不会挂掉,因为centos7还提供了rpcbind.socket服务运行着
其实也就是保证rpcbind服务正常运行
[root@localhost virtual_user_dir]# systemctl restart rpcbind [root@localhost virtual_user_dir]# systemctl status rpcbind
[root@localhost virtual_user_dir]# netstat -tunlp|grep 111
2.nfs服务端部署
前面已经确保了rpcbind服务正确启动
现在需要创建nfs服务端共享的目录
mkdir -p /sharenfs chmod -Rf 777 /sharenfs/
我们再创建两个文件
touch /sharenfs/file1 touch /sharenfs/file2
防止出现权限问题,把目录所有人调整为nfsnobody
chown -R nfsnobody.nfsnobody /sharenfs/
3.修改nfs服务端的配置文件,进行客户端授权
vim /etc/exports /sharenfs *(insecure,rw,sync:)
4.挂载
[root@localhost sharenfs]# mount -t nfs 127.0.0.1:/sharenfs /mnt [root@localhost sharenfs]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.6G 0 3.6G 0% /dev tmpfs 3.6G 20M 3.6G 1% /dev/shm tmpfs 3.6G 13M 3.6G 1% /run tmpfs 3.6G 0 3.6G 0% /sys/fs/cgroup /dev/mapper/centos-root 47G 8.0G 40G 17% / /dev/sda1 1014M 185M 830M 19% /boot tmpfs 727M 36K 727M 1% /run/user/1000 /dev/sr0 4.4G 4.4G 0 100% /run/media/o/CentOS 7 x86_64 127.0.0.1:/sharenfs 47G 8.0G 40G 17% /mnt [root@localhost sharenfs]# cd /mnt/ [root@localhost mnt]# ls file1 file2 [root@localhost mnt]#