1、如何使A服务器的某个目录挂载到B服务器的某个目录下,使其达到B服务下的目录文件一旦变更,可以实时的在A服务的目录下体现出来;
Lnux的解决方式
1、首先将B服务器的该目录,设置为共享文件夹(只有将其设置为共享文件夹后才能再另外的机器上进行该目录的远程连接访问,共享文件夹这个概念与windows 很有相似之处)
2、A服务器则通过 mount 的方式,指定对应的远程主机所抛出来的共享文件夹进行连接
linux如何实现共享文件夹的效果呢?
1、A服务器新创建的文件夹远程挂载到B服务器的某个 10G以上大小内容的文件夹下后,实际情况下A服务器的磁盘并没有因为挂载了10G的远程文件,而被消耗掉10G的磁盘空间,这说明实际情况下的挂载,并非将远程服务的文件实时Copy到目标文件夹中,当然这也不符合共享文件夹的特征;
那么既然是已经挂载了远程目录后,此时A服务访问自身文件夹时,是如何实时展示B服务的文件夹内容的呢? 原因是,A服务每次对于自身挂载文件夹的访问,实际上都是发送了一次新的RPC请求,请求目标服务器,将其对应的目录数据实时返回到A服务器的文件展示当中;(Linux中存在这样一个应用即:Network File System 即 NFS 网络文件系统,一种使用于分散式文件系统的协定,让应用程序在客户端通过网络访问位于磁盘中的数据,是在类Unix系统间实现对应的磁盘文件共享的一种方法,)
NFS于RPC的关系:
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
所以,如果要实现共享文件夹的效果,那么首先需要安装NFS,但由于NFS是依赖于RPC协议来进行的协议传输,所以,此时需同时安装,NFS 和 RPC 两个应用程序;
安装NFS和RPC(安装nfs-utils,rpcbind)
yum -y install nfs-utils rpcbind
设置共享目录
NFS的配置文件为/etc/exports,文件内容默认为空(无任何共享)。在exports文件中设置共享资源时,
记录格式为 "目录位置 客户机地址(权限选项)" 其中客户机地址于权限列表的括号() 中间不能有空格;
如下 例子则表示:将 /app 目录文件夹共享到 172.16.8.97的服务网段使用,且允许读写操作
vim /etc/exports
/app 172.16.8.97(rw,sync,no_root_squash)
客户机地址 可以是 : 主机名、IP地址、网段地址、或者"*、?"通配符;
权限选项:rw表示允许读写(ro为只读)
sync表示同步写
no_root_squash表示当前客户机以root身份访问时,赋予本地root权限(默认是root_squash,将作为nfsnobody用户降权对待) (NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。)
给多个地址授权
/app 172.16.8.97(rw,sync,no_root_squash) 172.16.8.98(rw,sync,no_root_squash)
给某个网段内所有IP授权
/app 172.16.8.*(rw,sync,no_root_squash)
启动NFS服务
配置完上述的目录文件配置后,则启动NFS服务;
先启动 RPC服务,再启动 NFS 服务
service rpcbind start
service nfs start
启动完对应的rpcbind和nfs后,可以使用ps查看下对应的进程信息
[root@xiaoi-3614 sysconfig]# ps -ef|grep rpcbind
root 4552 1765 0 18:34 pts/1 00:00:00 grep --color=auto rpcbind
rpc 31396 1 0 16:58 ? 00:00:00 /sbin/rpcbind -w
[root@xiaoi-3614 sysconfig]# ps -ef|grep nfs
root 4565 1765 0 18:34 pts/1 00:00:00 grep --color=auto nfs
root 32210 2 0 17:11 ? 00:00:00 [nfsd4_callbacks]
root 32216 2 0 17:11 ? 00:00:00 [nfsd]
root 32217 2 0 17:11 ? 00:00:00 [nfsd]
root 32218 2 0 17:11 ? 00:00:00 [nfsd]
root 32219 2 0 17:11 ? 00:00:00 [nfsd]
root 32220 2 0 17:11 ? 00:00:00 [nfsd]
root 32221 2 0 17:11 ? 00:00:00 [nfsd]
root 32222 2 0 17:11 ? 00:00:00 [nfsd]
root 32223 2 0 17:11 ? 00:00:00 [nfsd]
查看所指定IP机器,当前已发布的NFS共享目录
[root@xiaoi-3614 sysconfig]# showmount -e 172.16.36.14
Export list for 172.16.36.14:
/app 172.16.8.97
当服务机器已经按照上述配置部署完以后,则此时便可以直接在A服务器上,进行目录的挂载操作
1、由于上面也已经提到过目录的挂载于共享是基于RPC协议进行的具体NFS的实现,所以,此处A服务器作为挂载方,也应同时具备,RPC的应用功能,所以也应同时安装对应的 rpcbind 服务插件
此处安装rpcbind依赖,由于LZ此处A服务上,已经具备了rpcbind依赖,所以,此处并没有进行安装,(安装rpcbind时,最好也可以直接把 nfs-utils 同步安装下,后续再次作为共享方时,则也会方便很多)
yum -y install rpcbind
执行mount命令,手动挂载NFS共享目录
使用mount命令,此处表示将IP为:172.16.36.14所共享的app目录,挂载到当前服务的 /app/ftdq_kbase/mnt 目录下
mount 172.16.36.14:/app /app/ftdq_kbase/mnt
修改本地 /etc/fstab文件,实现目录的自动加载(具体fstab的配置方式,可以 百科一下 )
[root@NFSClient ~]# vim /etc/fstab
...... //部分内容省略
1.1.1.1:/www /var/www/html nfs defaults,_netdev 0 0
查看当前服务器所有的目录挂载点:
[root@xiaoi2017-897 dev]# df -ah
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 91G 33G 54G 38% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda1 190M 38M 142M 22% /boot
none 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
-- 此处便是上述所挂载的远程目录
172.16.36.14:/app 50G 26G 25G 51% /app/ftdq_kbase/mnt
参考链接:
yum 安装及rpm常用命令
mount 参数详情