centos7.9:nfs服务搭建与配置(代码片段)

琦彦 琦彦     2023-01-20     777

关键词:

 

本文讲解在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)



参数说明:

  1. ro:只读设置,这样 NFS 客户端只能读、不能写(默认设置);
  2. rw:读写设置,NFS 客户端可读写;
  3. sync:将数据同步写入磁盘中,效率低,但可以保证数据的一致性(默认设置);
  4. async:将数据先保存在内存缓冲区中,必要时才写入磁盘;如果服务器重新启动,这种行为可能会导致数据损坏,但效率
  5. root_squash:当客户端用 root 用户访问该共享文件夹时,将 root 用户映射成匿名用户(默认设置);
  6. no_root_squash:客户端的 root 用户不映射。这样客户端的 root 用户与服务端的 root 用户具有相同的访问权限,这可能会带来严重的安全影响。没有充分的理由,不应该指定此选项;
  7. all_squash:客户端所有普通用户及所属组都映射为匿名用户及匿名用户组;「推荐设置」
  8. no_all_squash:客户端所有普通用户及所属组不映射(默认设置);
  9. subtree_check:如果共享,如:/usr/bin之类的子目录时,强制NFS检查父目录的权限;
  10. no_subtree_check:即使共享 NFS 服务端的子目录时,nfs服务端也不检查其父目录的权限,这样可以提高效率(默认设置)
  11. secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  12. insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  13. wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  14. no_wdelay:若有写操作则立即执行,当使用async时,无需此设置;
  15. anonuid=xxx:将远程访问的所有用户主都映射为匿名用户主账户,并指定该匿名用户主为本地用户主(UID=xxx);
  16. 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

其中:

  1. 第一列10.0.0.200:/nfs:(Device)磁盘设备文件或该设备的Label或者UUID,此处即为nfs服务器的地址和共享目录
  2. 第二列/nfs/data:(Mount point)是设备的挂载点,即本机挂载目录
  3. 第三列nfs:(Filesystem)是磁盘文件系统的格式,如ext2、nfs、vfat等。
  4. 第四列defaults:(parameters)是文件系统的参数,defaults即具有rw,suid,dev,exec,auto,nouser,async等默认参数。
  5. 第五列1:(Dump)能够被dump备份命令作用,一般是0或者1,0表示不用做dump备份,1表示每天进行dump操作,当然还有2,表示不定期进行dump操作。
  6. 第六列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

nfs服务器搭建与配置(代码片段)

NFS服务器搭建与配置前言一、nfs介绍:1.什么是nfs?2.为什么需要nfs服务器?3.nfs服务器是否是最佳的解决方法?4.存储服务器的优缺点5.nfs解决了什么问题?有什么优缺点?二、具体实验操作:1.环境准备:2.安装nfs的相关软件3.启动nfs-s... 查看详情

centos中apache服务的搭建与配置(代码片段)

Apache服务的搭建与配置Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且... 查看详情

nfs服务搭建与配置(代码片段)

NFS介绍NFS是NetworkFileSystem的缩写NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本NFS数据传输基于RPC协议,RPC为RemoteProcedureCall的简写。NFS应用场景是:A,B,C三台机器上需要... 查看详情

samba服务端搭建与配置(代码片段)

...层级passdbbackend=tdbsam##使用TDB数据库格式loadprinters=no##打印服务printing=bsdprintcapname=/dev/nulldisablespoolss=yes============================ShareDefini 查看详情

zookeeper介绍与环境搭建(代码片段)

...?  zookeeper是一个开放源码的分布式应用程序协调服务,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。  zookeeper不适合存储大量数据,通常存储一些配置信息,动态的监听服务器的变更并且反... 查看详情

lamp环境搭建与配置(代码片段)

...HP的简写,LAMP一般用来组件Web应用平台Apache是最常用的Web服务软件。MySQL是小型的数据库软件。PHP是主要用于服务器端的应用程序软件,是一种脚本语言。注意:Apache和PHP必须装在一台机器上,因为PHP是作为Apache的一个模块存在... 查看详情

华为云hadoop与spark集群环境搭建(代码片段)

...p与Spark集群环境搭建流程Hadoop2.7.1环境搭建1、购买华为云服务器2、修改服务器相关配置3、配置ssh免密登录4、JDK安装5、Hadoop集群搭建Spark3.2.0集群环境搭建1、Spark安装2、Spark文件配置3、启动Spark集群4、关闭Spark集群所使用安装包... 查看详情

centos中apache服务的搭建与配置(代码片段)

Apache服务的搭建与配置Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且... 查看详情

centos中apache服务的搭建与配置(代码片段)

Apache服务的搭建与配置Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且... 查看详情

[转帖]nfs服务搭建与配置(代码片段)

NFS服务搭建与配置https://blog.csdn.net/zhengyshan/article/details/81058164自己搞过这一块感觉这个文章比自己写的要好. 原创zhengyshan发布于2018-07-1522:49:28阅读数4226收藏展开NFS介绍NFS是NetworkFileSystem的缩写NFS最早由Sun公司开发,分2,3,4三... 查看详情

mycat的搭建以及配置与启动(代码片段)

1、首先开启服务器相关端口firewall-cmd--permanent--add-port=9066/tcpfirewall-cmd--permanent--add-port=8066/tcp重启:firewall-cmd--reload2、安装JDK2.1、安装方式一2.1.1、使用yum安装JDKyuminstall-yjava-1.8.0-openjdk.x8 查看详情

hadoop3.x搭建详细教程|历史服务器的配置与日志聚合(代码片段)

🚀作者:“大数据小禅”🚀简介:随着版本的迭代,Hadoop也在不断的进行更新与增加新特性,根据生产与业务的需求,掌握最基础的环境搭建是比较重要的,之前的文章已经进行了Hadoop2的安装ÿ... 查看详情

hadoop3.x搭建详细教程|历史服务器的配置与日志聚合(代码片段)

🚀作者:“大数据小禅”🚀简介:随着版本的迭代,Hadoop也在不断的进行更新与增加新特性,根据生产与业务的需求,掌握最基础的环境搭建是比较重要的,之前的文章已经进行了Hadoop2的安装ÿ... 查看详情

hadoop3.x搭建详细教程|历史服务器的配置与日志聚合(代码片段)

🚀作者:“大数据小禅”🚀简介:随着版本的迭代,Hadoop也在不断的进行更新与增加新特性,根据生产与业务的需求,掌握最基础的环境搭建是比较重要的,之前的文章已经进行了Hadoop2的安装ÿ... 查看详情

2021=>手把手搭建dhcp服务(详细)(代码片段)

架构解析dhcp服务器配置配置实验环境关闭VMware的dhcp服务给虚拟机添加网卡为VMnet1安装与配置dhcp服务给新添的网络配置IP配置dhcp服务在真实的主机系统上查看dhcp配置为真实主机系统分配固定的IP修改dhcp配置文件再次重启真实主... 查看详情

阿里云mqtt服务器搭建与测试(全图文,非常详细)(代码片段)

阿里云MQTT服务器搭建与测试一、MQTT概念二、阿里云MQTT服务器搭建1阿里云平台注册及认证2添加平台2创建产品与设备获取MQTT连接相关信息三、MQTT.fx测试1MQTT.fx下载及安装2配置登录信息3从MQTT.fx上报数据到阿里云服务器4阿里云下... 查看详情

jenkins的搭建与配置(代码片段)

文章目录搭建jenkinsjenkins页面介绍主页配置主页系统配置全局工具配置插件管理主机管理全局安全配置用户管理日志管理jenkins命令行脚本控制台搭建jenkins将Jenkins的war包移动到tomcat的webapps下[root@localhost~]#mvjenkins.war/usr/local/tomca... 查看详情

linux❀nginx基础解释与服务部署搭建(代码片段)

文章目录1、基础概念2、安装Nginx3、Nginx主配置文件4、Nginx常用命令1、基础概念反向代理负载均衡动静分离2、安装Nginx查看NginxRPM安装包信息;[root@localhost~]#yumlist|grepnginxnginx.x86_641:1.14.1-9.module+el8.0.0+4108+af250afe@A 查看详情