现在有三台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现!
一、安装 NFS 服务器所需的软件包:
1 |
|
二、编辑exports文件,添加从机
1 2 |
|
192.168.0.100 和192.168.0.101两台机器可以挂载NFS服务器上的/data目录到自己的文件系统中
rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录
三、启动nfs服务
先为rpcbind和nfs做开机启动:
1 2 |
|
然后分别启动rpcbind和nfs服务:
1 2 |
|
确认NFS服务器启动成功:
1 |
|
检查 NFS 服务器是否挂载我们想共享的目录 /data:
1 2 3 4 |
|
四、在从机上安装NFS 客户端 (群晖需要在控制面板-->文件服务-->NFS勾选支持nfs4)
首先是安裝nfs,同上,然后启动rpcbind服务
先为rpcbind做开机启动:
1 |
|
然后启动rpcbind服务:
1 |
|
注意:客户端不需要启动nfs服务
检查 NFS 服务器端是否有目录共享:
1 |
|
在从机上使用 mount 挂载服务器端的目录/data到客户端某个目录下:
1 2 3 |
|
想在客户机上实现开机挂载,则需要编辑/etc/fstab:
1 2 3 |
|
客户端挂载后,写文件时可能会报一个权限问题:Permission denied。解决这个问题可以修改nfs主服务器/etc/exports文件,改成如下內容:
1 2 3 |
|
查看服务器uid
1 2 |
|
将xx改成65534
重新读取NFS配置文件:
1 |
|
可使用如下命令查看配置
1 |
|
但是你会发现,服务端可以读写客户端的文件,但是客户端的无法读写服务端的。
可以有下面的配置
/testfs 10.0.0.0/8(rw)
重启NFS服务以后,在客户机通过mount -o rw -t nfs 10.214.54.29:/testfs /rd1命令将网络文件mount到本地。执行完成之后,目录是可以访问了,但无法写入。感觉有点奇怪,明明在命令中指定可以写入了。于是到网上搜索资料,发现exports目录权限中,有这么一个参数no_root_squash。其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!。默认情况使用的是相反参数 root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份。
因为我的客户端是使用root登录的,自然权限被压缩为nobody了,难怪无法写入。将配置信息改为:
/testfs 10.0.0.0/8(rw,no_root_squash)
据说有点不安全,但问题是解决了。
另外,在测试NFS文件系统时,会经常mount和umount文件,但有时会出现device is busy的错误提示。你肯定感到很奇怪,我明明没有使用啊,看看你当前所在的目录,是不是在mount的文件目录中?回退到上层目录重新umount,是不是OK了?
1、exports参数说明
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_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
/u01/attachments 10.0.1.155(rw,sync,fsid=0,anonuid=65534,anongid=65534,no_root_squash) 10.0.1.156(rw,sync,fsid=0,anonuid=65534,anongid=65534,no_root_squash)
2、NFS 管理命令
showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷;
showmount -e 192.168.1.100 在NFS Client上执行此命令显示NFS Server上所有共享卷;
exportfs -av 根据/etc/exports导出所有卷;
exportfs -rv 重新导出所有卷,增加/etc/exports中的新项目、删除不存在的项目、更新改变的项目;
参考:https://blog.csdn.net/zzcchunter/article/details/79051718
http://blog.chinaunix.net/uid-26495963-id-3219407.html
https://blog.csdn.net/xiyang_1990/article/details/78284048