CentOS 7.9: NFS服务搭建与配置
Posted 琦彦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7.9: NFS服务搭建与配置相关的知识,希望对你有一定的参考价值。
本文讲解在CentOS 7.9 环境下,如何安装与部署 NFS 服务。
注意:一台机器不要同时做 NFS 的服务端和 NFS 的客户端。如果同时作了 NFS 的服务端和客户端,那么在关机的时候,会一直夯住,可能十分钟之后甚至更久才能关闭成功。
NFS 工作原理简介
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类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 SERVER 之前,首先要启动 RPC 服务(CentOS 5.x 下为 portmap 服务,CentOS 6.x 和 CentOS 7.x 下为 rpcbind 服务,下同),否则 NFS SERVER 就无法向 RPC 服务注册了。
另外,如果 RPC 服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时 RPC 服务管理的NFS程序也需要重新启动以重新向RPC注册。
要特别注意的是:一般修改NFS配置文件后,是不需要重启NFS的,
- 直接在命令行执行 /etc/init.d/nfs reload 「针对CentOS 5.x 或 CentOS 6.x」
- 或 systemctl reload nfs.service 「针对CentOS 7.x」
- 或 exportfs -rv 即可使修改的 /etc/exports 生效。
环境说明
CentOS 7.9
[root@node1 data]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
根据官网说明 Chapter 8. Network File System (NFS) - Red Hat Customer Portal,CentOS 7.4 以后,支持 NFS v4.2 不需要 rpcbind 了,但是如果客户端只支持 NFC v3 则需要 rpcbind 这个服务。
NFS 服务所需的安装包
可以在linux系统的k8s集群中任意一个node节点做nfs服务端。
检查防火墙和SELinux
# 1. 检查防火墙服务
[root@node2 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# 若防火墙未关闭,使用如下命令进行关闭
systemctl stop firewalld`
systemctl disable firewalld`
# 2. 检查SELinux
[root@node2 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
# 若未关闭禁用,使用如下命令:
`$ setenforce 0`
`$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config`
NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的。
nfs-utils-*
:包括基本的NFS命令与监控程序rpcbind -*
:支持安全NFS RPC服务的连接
2、如果当前系统中没有安装NFS所需的软件包,需要手工进行安装。nfs-utils
和rpcbind
两个包的安装文件在系统光盘中都会有。
安装 NFS 和 RPC 「服务端、客户端都安装」
# 查看系统是否已安装NFS
rpm -qa | grep nfs
rpm -qa | grep rpcbind
# 安装nfs相关服务软件包
yum install -y nfs-utils rpcbind
# 验证系统是否成功安装NFS
[root@node2 ~]# rpm -qa | grep nfs
libnfsidmap-0.25-19.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@node2 ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-49.el7.x86_64
查看用户信息
[root@node1 ~]# tail /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin #yum安装rpc服务时创建的
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin #yum安装rpc服务时创建的
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin #yum安装nfs服务时创建的
NFS服务端搭建
配置exports
# 创建共享存储文件夹
mkdir /nfs
# 配置nfs
# 输入以下内容,格式为:nfs共享目录 nfs客户端地址1(param1, param2,...) nfs客户端地址2(param1, param2,...)
# 如: /nfs 10.0.0.200/24(rw,async,no_root_squash)
# 固定网段所有IP可挂载
echo "/data/nfs 10.0.0.*(rw,sync,no_root_squash)" >> /etc/exports
# 固定网段固定IP区间可挂载
echo "/data/nfs 10.0.0.200/24(rw,sync,no_root_squash)" >> /etc/exports
# 所有客户端可挂载
echo "/data/nfs *(rw,sync,no_root_squash)" >> /etc/exports
# 启动服务
# 先启动rpc服务,再启动nfs服务
systemctl start rpcbind
# 加入开始自启动
systemctl enable rpcbind
systemctl enable nfs && systemctl restart nfs
# 查看服务状态
systemctl status rpcbind
systemctl status nfs
# rpcinfo -p ,如果显示rpc 服务器注册的端口列表(端口:111),则启动成功。
[root@node2 ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 47154 status
100024 1 tcp 58827 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 37135 nlockmgr
100021 3 udp 37135 nlockmgr
100021 4 udp 37135 nlockmgr
100021 1 tcp 42480 nlockmgr
100021 3 tcp 42480 nlockmgr
100021 4 tcp 42480 nlockmgr
配置文件/etc/exports
权限配置的说明:
- rw:可读写
- ro: 只读,但最终能不能读写,还是与文件系统的 rwx 及身份有关
- no_root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
- root_squash: 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名(nobody)用户
- all_squash: 不论登入 NFS 的使用者身份为何, 均被映射为匿名用户,通常就是 nobody(nfsnobody)
- insecure: 允许从客户端过来的非授权访问
- sync: 数据会同步写入到内存与硬盘中
- async: 数据会先暂存于内存当中,而非直接写入硬盘
- anonuid: 指定uid的值,此uid必须存在于/etc/passwd中
- anongid:指定gid的值
exportfs的参数说明:
- -a:全部mount 或unmount /etc/exports中的内容
- -r: Reexport all directories: 重新导出所有目录
- -u:umount目录
- -v: verbose,输出详情
如: 使nfs配置生效
exportfs -r
查看是否成功和可用的nfs地址:
# 查看可用的nfs地址
# showmount -e 127.0.0.1或showmount -e localhost
[root@node2 ~]# showmount -e localhost
Export list for localhost:
/nfs 10.0.0.200/24
看有哪些参数生效
[root@node2 ~]# cat /var/lib/nfs/etab
/nfs 10.0.0.200/24(rw,async,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
参数说明:
- ro:只读设置,这样 NFS 客户端只能读、不能写(默认设置);
- rw:读写设置,NFS 客户端可读写;
- sync:将数据同步写入磁盘中,效率低,但可以保证数据的一致性(默认设置);
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘;如果服务器重新启动,这种行为可能会导致数据损坏,但效率
- root_squash:当客户端用 root 用户访问该共享文件夹时,将 root 用户映射成匿名用户(默认设置);
- no_root_squash:客户端的 root 用户不映射。这样客户端的 root 用户与服务端的 root 用户具有相同的访问权限,这可能会带来严重的安全影响。没有充分的理由,不应该指定此选项;
- all_squash:客户端所有普通用户及所属组都映射为匿名用户及匿名用户组;「推荐设置」
- no_all_squash:客户端所有普通用户及所属组不映射(默认设置);
- subtree_check:如果共享,如:/usr/bin之类的子目录时,强制NFS检查父目录的权限;
- no_subtree_check:即使共享 NFS 服务端的子目录时,nfs服务端也不检查其父目录的权限,这样可以提高效率(默认设置)
- secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
- wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
- no_wdelay:若有写操作则立即执行,当使用async时,无需此设置;
- anonuid=xxx:将远程访问的所有用户主都映射为匿名用户主账户,并指定该匿名用户主为本地用户主(UID=xxx);
- anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组为本地用户组(GID=xxx);
NFS客户端配置
配置挂载
#创建挂载的文件夹
mkdir -p /nfs/data
# 挂载nfs
mount -t nfs 10.0.0.200:/nfs /nfs/data
# 其中:
# mount:表示挂载命令
# -t:表示挂载选项
# nfs:挂载的协议
# 10.0.0.200:nfs服务器的ip地址
# /nfs:nfs服务器的共享目录
# /nfs/data:本机客户端要挂载的目录
# 查看挂载信息df -Th 或 cat /proc/mounts
[root@node1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 67M 7.7G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 488G 3.6G 484G 1% /
/dev/sda1 xfs 497M 144M 354M 29% /boot
10.0.0.200:/nfs nfs4 488G 4.2G 484G 1% /nfs/data
#测试挂载
#可以进入本机的/nfs/data目录,上传一个文件,然后去nfs服务器查看/nfs目录中是否有该文件,若有则共享成功。反之在nfs服务器操作/nfs目录,查看本机客户端的目录是否共享。
cat <<EOF >>/nfs/data/index.txt
welcome to use nfs
EOF
# 取消挂载
umount /nfs/data
测试挂载
在客户端和服务端之间测试 「2个客户端,1个服务端」
1、任意客户端创建文件夹或创建文件并且输入数据,在服务端是否可以查看;
2、服务端创建文件夹或创建文件并且输入数据,在任意客户端是否可以查看;
3、在客户端A 删除客户端B 创建的文件
4、在客户端B 删除客户端A 创建的文件
挂载方式
除了上述通过mount -t nfs
命令指定的方式进行目录挂载以外,还可以通过vim /etc/fstab
文件进行挂载。
10.0.0.200:/nfs /nfs/data nfs defaults 1 1
其中:
- 第一列
10.0.0.200:/nfs
:(Device)磁盘设备文件或该设备的Label或者UUID,此处即为nfs服务器的地址和共享目录 - 第二列
/nfs/data
:(Mount point)是设备的挂载点,即本机挂载目录 - 第三列
nfs
:(Filesystem)是磁盘文件系统的格式,如ext2、nfs、vfat等。 - 第四列
defaults
:(parameters)是文件系统的参数,defaults
即具有rw,suid,dev,exec,auto,nouser,async
等默认参数。 - 第五列
1
:(Dump)能够被dump备份命令作用,一般是0或者1,0表示不用做dump备份,1表示每天进行dump操作,当然还有2,表示不定期进行dump操作。 - 第六列
1
:是否检验扇区,0表示不要检验,1表示最早检验(根目录一般会设置),2表示1级别检验完成之后进行检验。
NFS 常用命令
#服务端版本查看
nfsstat -s
# 客户端版本查看
nfsstat -c
[root@node1 data]# nfsstat --help
Usage: nfsstat [OPTION]...
-m, --mounts Show statistics on mounted NFS filesystems # 客户端版本查看
-c, --client Show NFS client statistics # 客户端版本查看
-s, --server Show NFS server statistics #服务端版本查看
-2 Show NFS version 2 statistics
-3 Show NFS version 3 statistics
-4 Show NFS version 4 statistics
-o [facility] Show statistics on particular facilities.
nfs NFS protocol information
rpc General RPC information
net Network layer statistics
fh Usage information on the server's file handle cache
rc Usage information on the server's request reply cache
all Select all of the above
-v, --verbose, --all Same as '-o all'
-r, --rpc Show RPC statistics
-n, --nfs Show NFS statistics
-Z[#], --sleep[=#] Collects stats until interrupted.
Cumulative stats are then printed
If # is provided, stats will be output every
# seconds.
-S, --since file Shows difference between current stats and those in 'file'
-l, --list Prints stats in list format
--version Show program version
--help What you just did
以上是关于CentOS 7.9: NFS服务搭建与配置的主要内容,如果未能解决你的问题,请参考以下文章