1. NFS 简介
NFS 即网络文件系统,用户可以通过网络将自己服务器上的目录共享出来,具有访问权限的服务器就可以将远程服务器上的目录挂载到本地,对本地目录的读写将会映射到远程服务器。在本地机器上看,远程服务器上的目录就好像自己的一个磁盘分区一样。
2. NFS Server 安装
本次安装环境为:Centos 7.5
2.1 安装 NFS
NFS 服务主要涉及到两个软件:rpcbind 和 nfs-utls。Rpcbind 主要用来提供 RPC 服务,由于 NFS 提供的功能非常多,设计时没有将其各个功能的端口固定,而是在启动时,向 rpcbind 注册自己的服务端口,客户端进行连接时,首先向 rpcbind 询问 NFS 服务所在端口,然后再与 NFS 进行通信。这里 rpcbind 的端口固定为 111,所以客户端总能与 rpcbind 取得联系。
在 Centos 上,我们使用 yum 来进行安装:
1 2 |
yum -y install nfs-utils rpcbind |
2.2 配置 NFS 共享目录
安装完 NFS 后,我们需要配置 NFS 对外共享哪些目录,以及对哪些客户端进行共享。比如,我想在 DC2 上将 /data/dorothy
这个目录共享出去,同时规定只有 172.22.51.28
这台机器可以访问,我可以这样设置:
1 2 3 4 5 6 7 |
mkdir -p /data/dorothy #注意一下目录的访问权限 chmod 777 /data chmod 777 /data/dorothy vi /etc/exports #没有这个文件的话需要自己手动创建 /data/dorothy 111.202.154.66(insecure,rw,no_root_squash,no_all_squash,sync) |
上述配置中括号里的内容表示 172.22.51.28
这台机器对 /data/dorothy
这个目录的操作权限,常见参数有:
参数值 | 内容说明 |
---|---|
rw、ro | 该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关 |
sync、async | sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘 |
no_root_squash、root_squash | 客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行 |
all_squash | 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) |
insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
使用 exportfs -r
使配置生效。
配置完成后我们就可以启动相关服务了:
服务启动后查看一下相关端口信息:
1 2 |
rpcinfo -p |
除了 111 和 2049 这两个端口是固定的,其他端口都是随机的。我们在滴滴云上创建 DC2 时,默认只有 22 和 80 端口是开放的,我们还要在滴滴云上开放 status、mountd 以及 nlockmgr 对应的端口(这一步很重要!!!)。但是每次启动 NFS 时,这些端口都是随机的,所以我们需要固定这些端口。在 /etc/sysconf/nfs
中添加如下配置:
1 2 3 4 5 6 |
RQUOTAD_PORT=30001 LOCKD_TCPPORT=30002 LOCKD_UDPPORT=30002 MOUNTD_PORT=30003 STATD_PORT=30004 |
重启服务:
1 2 |
service nfs restart |
再用 rpcinfo -p 查看一下端口信息:
可以看到 mountd 和 status 服务的端口已经生效了。
修改 /ect/modprobe.d/lockd.conf
加入如下配置:
1 2 3 |
options lockd nlm_tcpport=30002 options lockd nlm_udpport=30002 |
然后重新加载 NFS 配置和服务:
1 2 3 4 5 |
systemctl restart nfs-config systemctl restart nfs-idmap systemctl restart nfs-lock systemctl restart nfs-server |
在滴滴云上选择重新服务器,上述配置就生效了。
可以看到 nlockmgr 服务的端口也变成固定端口了。
下一步我们需要在 DC2 的安全组里开放 NFS 相关的端口, 这里主要有 111、2049、30002、30003、30004 。
具体操作为:
在你的 DC2 页面点击安全组:
点击创建安全组:
填写安全组名和应用到的 DC2:
点击立即创建,然后在你刚刚创建的安全组里添加新的安全规则,把 111、2049、30002、30003、30004 这几个端口的 TCP、UDP 以及接入接出规则都创建一下。这里展示一下 111 端口的安全规则,其他端口相同:
这样,NFS 服务端的配置就完成了。
3. 客户端设置
客户端需要安装 nfs-utils 这个软件:
1 2 |
yum -y install nfs-utils |
创建挂在目录:
1 2 |
mkdir /home/morespace/dorothy/nfs |
使用 showmount 命令查看服务端共享出的目录信息:
如果这一步卡住了,报错:clnt_create rpc port mapper failure - timed out
, 那么可能是服务端 NFS 相关端口没有开放,可以尝试 telnet ip port
看看能不能 telnet 通,如果不能,还需要在安全组里开放相关端口。
下一步我们就可以挂在远程目录了。首先我们在服务器共享出来的目录下创建一个 hello.txt
文件:
挂载远程目录:
可以看到本地挂在的目录与远程目录的内容相同,说明挂在成功了。
本文作者:张迪