1、安装
首先下载离线安装包,两个分别是:
nfs-utils-2.5.4-4.oe2203.x86_64.rpm,
rpcbind-1.2.6-3.oe2203.x86_64.rpm
1.1 下载方式:
1.2 安装
rpm -ivh nfs-utils-2.5.4-4.oe2203.x86_64.rpm
rpm -ivh rpcbind-1.2.6-3.oe2203.x86_64.rpm
2、配置端口
NFS除了主程序端口2049和rpcbind的端口111是固定端口以外,其他的还会有一些随机端口,这些端口是NFS向rpcbind注册产生的,
由于端口是随机的,不方便防火墙管理,所以在nfs的配置文件中,可以绑定这些端口
# vim /etc/sysconfig/nfs
#追加端口配置
MOUNTD_PORT=40001
STATD_PORT=40002
LOCKD_TCPPORT=40003
LOCKD_UDPPORT=40003
RUEOTAD_PORT=40004
端口随便自己绑定,建议用后面一点的端口,前面的端口系统有定义服务,避免端口冲突,并将这些端口加入防火墙,总共7个端口
启动服务和设置开机自启动,
CentOS7,openeuler也一样
# systemctl start rpcbind.service
# systemctl enable rpcbind.service
# systemctl start nfs.service
# systemctl enable nfs.service
客户端也需要安装以上服务,但是只需要启动rpcbind服务
配置完成后,就可以开始在服务端创建共享目录,NFS的共享目录配置在/etc/exports文件中
3、配置共享目录
3.1 准备要共享的目录
没有的话就创建,例如 /data
mkdir -p /data
chown -R nobody.nobody /data
# nfs默认的用户是id为65534的用户
# 在centos7中这个用户叫做nfsnobody,在8版本之后,nfsnobody和nobody用户合并了
3.2 配置导出目录
/etc/exports文件
/etc/exports 文件是NFS服务器的核心配置文件,它用于定义哪些目录将被导出(即共享)以及导出的目录可以被哪些客户端访问,以及访问权限和选项。每一行都代表一个共享配置。
使用/etc/exports 文件,其实就是在systemctl启动nfs时,调用了exportsfs这个文件。
/etc/exports格式
假设我们有一个共享目录 /data,我们可以为不同的客户端设置不同的访问权限:
/data 192.168.1.188(rw) 192.168.1.189(ro)
# data 是本地要共享的目录。
# 192.168.1.188 和 192.168.1.199 是允许访问此共享目录的客户端IP地址。(也可以是网段、域名)
# rw 表示读写权限,ro 表示只读权限。
/var/lib/nfs/etab文件
实际上/etx/exports文件的选项特别多,但是我们最少仅需写共享目录 IP/网段(ro/rw)即可工作,这是因为,nfs有一个默认配置文件。
对于在/etc/exports中的共享目录权限设置,会自动映射到/var/lib/nfs/etab中,并补全默认配置。
假设对所有网段均可以访问/data目录
cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
NFS常用选项
在上一部分,我们可以看到nfs的选项实际特别多,那么常用的选项及其解释如下:
rw:允许客户端读写访问共享目录。
ro:客户端只能读取共享目录。
sync:同步写操作,数据会在写入请求完成后立即写入到磁盘。
async:异步写操作,数据可能会被缓存在内存中,提高性能但可能在系统崩溃时导致数据丢失。
no_subtree_check:禁用子目录检查,可以提高性能。
subtree_check:启用子目录检查,确保NFS服务器只允许访问被导出的目录,而不是其子目录。
no_root_squash:保留根用户权限,客户端上的root用户在服务器上依然是root用户。
root_squash:将客户端上的root用户映射为匿名用户,默认选项,提高安全性。
all_squash:将所有客户端用户都映射为匿名用户。
anonuid 和 anongid:指定匿名用户的UID和GID。
3.3 配置/etc/exports重启服务效果
#配置/etc/exports
echo "/data *(rw)" >> /etc/exports
cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
#重启服务
#reload-已连接nfs服务的用户端不会断开连接
#restart-已连接nfs服务的用户会被强制断开连接
systemctl reload nfs
4、服务器自测
mount -t nfs 192.168.1.190:/data/ /mnt/
#查看挂载情况
df -h /mnt
Filesystem Size Used Avail Use% Mounted on
10.0.0.124:/data 40G 3.8G 37G 10% /mnt
#查看nfs挂载情况
showmount -e
Export list for ecm:
/data *
5、客户端连接测试
#想使用nfs服务的客户端,同样需要安装nfs-utils
yum install -y nfs-utils
#不需要启动nfs服务
#挂载方式如上<服务端测试>
mount -t nfs 192.168.1.190:/data/app /data
6、实际案例
6.1文件服务器:
[root@localhost data]# cd /
[root@localhost /]# ll
总用量 28
lrwxrwxrwx. 1 root root 7 3月 16 2023 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 16 2023 boot
drwxrwxrwx. 5 root root 109 10月 19 2023 data
drwxr-xr-x 21 root root 3580 12月 5 02:47 dev
drwxr-xr-x. 146 root root 8192 12月 26 09:40 etc
drwxrwxrwx. 5 root root 52 3月 29 2023 fileserver
drwxr-xr-x. 3 root root 18 5月 10 2023 home
lrwxrwxrwx. 1 root root 7 3月 16 2023 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 3月 16 2023 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxrwxrwx 4 root root 87 12月 6 2023 mnt
drwxr-xr-x. 4 root root 36 10月 19 2023 opt
dr-xr-xr-x 529 root root 0 12月 5 02:47 proc
dr-xr-x---. 15 root root 4096 12月 5 16:12 root
drwxr-xr-x 41 root root 1260 12月 5 16:10 run
lrwxrwxrwx. 1 root root 8 3月 16 2023 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x 13 root root 0 12月 26 09:33 sys
drwxrwxrwt. 11 root root 4096 12月 26 09:32 tmp
drwxr-xr-x. 13 root root 155 3月 16 2023 usr
drwxr-xr-x. 21 root root 4096 3月 16 2023 var
[root@localhost /]# cd data
[root@localhost data]# ll
总用量 30648
drwxrwxrwx. 3 root root 33 6月 25 2023 dbdata
drwxrwxrwx. 2 root root 6 3月 30 2023 indexdata
drwxrwxrwx. 4 root root 87 12月 6 2023 webdata
[root@localhost data]#
/etc/exports
/data/dbdata *(insecure,rw,sync,no_root_squash)
/data/indexdata *(insecure,rw,sync,no_root_squash)
/data/webdata *(insecure,rw,sync,no_root_squash)
#重启服务
#reload-已连接nfs服务的用户端不会断开连接
#restart-已连接nfs服务的用户会被强制断开连接
systemctl reload nfs
其他的服务器分别挂载即可
mount -t nfs 192.168.1.100:/data/webdata /data
mount -t nfs 192.168.1.101:/data/dbdata /data
mount -t nfs 192.168.1.102:/data/indexdata /data
df -h 可以查看挂载
umount -f /data 删除挂载
如果设备正忙,你可以使用 lsof 命令查找正在使用该设备的进程,并结束这些进程:
sudo lsof /mnt/data
找到相关的进程 ID 后,可以使用 kill 命令结束这些进程:
sudo kill -9 <进程ID>
然后再次尝试卸载:
sudo umount /data
挂载点要是空目录
7、相关服务
systemctl status nfs-server.service
systemctl start nfs-server.service
systemctl status firewalld
systemctl start rpcbind.service
systemctl status rpcbind.service
systemctl status nfs.service