初识 nfs 还是在测试 lvs 负载均衡的时候,为了保证代码的一致性,将一台 Realserver 作为 nfs 服务器,而其他 Realserver 均以 nfs 将代码挂载过来。这样就保证了代码的一致性,但也是由很大隐患的,一旦那台 Realserver 宕机,那就全军覆没了...好了,废话不多说,进入 nfs 挂载简单步骤。
一、安装 nfs
一般 redhat 是默认安装了 nfs 服务的,如果非默认安装且取消勾选 nfs 的话,需要挂载 iso 或下载安装包手动安装,就几个 rpm 包,就不多说了。
二、配置/etc/exports
nfs 允许挂载的目录及权限需在文件/etc/exports 中进行定义。例如,我们要将代码所在目录/www/code 共享出来,那么我们需要编辑/etc/exports 文件,追加一行:
/www/code *(rw,sync,no_root_squash)
其中:
- /www/code 是要共享的目录;
- * 代表允许所有的网络段访问(仅测试中使用,实际使用应该做严格的 IP 限制);
- rw 开启共享目录的可读写权限;
- sync 是资料同步写入内存和硬盘;
- no_root_squash 是客户端分享目录使用者的权限,如果客户端使用 root,那对于该共享目录而言,客户端就有 root 权限;
其他更多参数说明:
ro 只读访问 rw 读写访问 sync 所有数据在请求时写入共享 async nfs 在写入数据前可以响应请求 secure nfs 通过 1024 以下的安全 TCP/IP 端口发送 insecure nfs 通过 1024 以上的端口发送 wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认) no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置。 hide 在 nfs 共享目录中不共享其子目录 no_hide 共享 nfs 目录的子目录 subtree_check 如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认) no_subtree_check 和上面相对,不检查父目录权限 all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。 no_all_squash 保留共享文件的 UID 和 GID(默认) root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认) no_root_squas root 用户具有根目录的完全管理访问权限 anonuid=xxx 指定 nfs 服务器/etc/passwd 文件中匿名用户的 UID anongid=xxx 指定 nfs 服务器/etc/passwd 文件中匿名用户的 GID
三、启动 nfs 服务
在启动 nfs 之前需要先启动 portmap 服务,否则如下报错:
[root@localhost ~]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [FAILED] Starting NFS daemon:
正确方法先启动 portmap 再启动 nfs,如下:
service portmap service nfs start
或
/etc/init.d/portmap start /etc/init.d/nfs start
四、在客户端主机上挂载共享目录
1、挂载之前同样需要先启动 portmap 服务(同上);
2、在客户端使用 showmount -e 查看 nfs 主机共享情况:
[root@localhost2 ~]# showmount -e 192.168.1.100 Export list for 192.168.1.100: /www/code *
3、在客户端建立 code 文件夹(名称需相同,路径可以不同),并使用 mount 挂载命令:
mount -t nfs 192.168.1.100:/www/code /www/code
注意事项:千万不要学博主,测试时误使用了 mount -t nfs 192.168.1.100:/www/code /www/,导致原先/www 目录内容全部被卸下,就算重新 mount -o loop 也是很麻烦的!所以强烈建议路径保持一致!
4、若无报错,则可使用 df -h 查看到挂载情况:
[root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda2 31G 3.7G 25G 13% / /dev/sda5 40G 9.5G 29G 26% /www /dev/sda1 190M 12M 169M 7% /boot tmpfs 2.0G 0 2.0G 0% /dev/shm 192.168.1.100:/www/code 237G 131G 94G 59% /www/code
5、若是需要长期使用,则可以设置开机自动挂载,将相关服务设置为自启动,并将挂载命令也加入开机启动即可(略)
五、在客户端卸载已挂载的目录
1、常规卸载命令:
umount /www/code
2、有时因为 nfs 主机或网络故障,会出现常规卸载提示 device is busy 的提示,此时强制卸载命令如下:
umount -f /www/code
或
umount -l /www/code
3、上述卸载命令均无法生效时,请继续往下看:
以下摘自网络:
fuser 通常被用在诊断系统的“resource busy”问题,通常是在你希望 umount 指定的挂载点得时候遇到。 如果你希望 kill 所有正在使用某一指定的 file, file system or sockets 的进程的时候,你可以使用-k 选项。
格式为: $ fuser -m -v (nfs 挂载点) 回车执行后得到的结果依次是:用户 进程号 权限 命令
此命令可以查看到访问此设备的所有进程,停止进程后 umount.
如果添加参数 -k 则可以一次性将所有当前访问 nfs 共享盘阵的进程停止 也可以加-i 打开交互显示,以便用户确认
或者用 fuser 命令:
#fuser -v -m 挂载点
即可查处 用户 PID 等,KILL 掉该进程后再 umount.
或者
#umount -l 挂载点
选项 –l 并不是马上 umount,而是在该目录空闲后再 umount.还可以先用命令 ps aux 来查看占用设备的程序 PID,然后用命令 kill 来杀死占用设备的进程,这样就 umount 的 NFS 服务安全非常放心了.
好了,以上就是 redhat 下的简单设置,也是博主自己用的步骤,适合初次使用 nfs 的筒子参考,希望对你有所帮助!