NFS存储服务概述及部署


NFS概述

NFS是什么

NFS(Network File System,网络文件系统)是一种基于远程过程调用(RPC)协议,采用客户端\服务器结构实现的分布式文件系统。NFS允许系统在网络上与他人共享文件系统。主要功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器共享的目录就好像自己的磁盘分区和目录一样。
NFS
NFS网络文件系统很像Windows系统的网络共享,安全功能,网络驱动器映射,这也和Linux系统的Samba服务相似。但一般情况下,Windows网络共享服务或Samba服务常用于办公室局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享。

  • Samba服务:Linux部署Samba服务实现Windows和Linux之间的数据共享存储
  • NFS服务:Linux部署NFS服务实现Linux与Linux之间的数据共享存储

如果大型网站,还可能用到更为复杂的分布式文件系统,如Moosefs(mfs)、GlusterFS、FastDFS等。

  • FastDFS:企业应用较多
  • Moosefs:早期分布式存储,适合初学者
    Moosefs

NFS的作用

  1. 实现数据的共享存储
  2. 便于数据操作管理
  3. 节省购买服务器磁盘开销

RPC是什么

由于NFS服务支持的功能很多,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口无法固定,而是随机采用未被使用的端口作为传输之用,这样就造成了客户端与服务端连接的困扰。

为了方便客户端和服务端的连接,需要使用RPC(Remote Procedure Call,远程过程调用)服务。RPC服务最主要的功能就是指定每个NFS功能对应的端口号,并且将该信息传递给客户端,让客户端能够连接到正确的端口。

为了让RPC知道NFS的端口信息,需要在启动NFS服务之前就启动RPC服务。而后服务器在启动NFS服务时会随机取用数个端口,并主动向RPC服务注册,因此RPC知道每个端口对应的NFS功能。RPC固定使用111号端口监听客户端的需求并且回应给客户端正确的端口。

NFS工作流程

NFS部署

NFS主机规划

IP主机名功能系统版本
172.16.1.31nfs01存储服务器CentOS 7.x
172.16.1.7web01web服务器CentOS 7.x

服务端部署

下载安装软件

检查nfs和rpc软件是否安装,如果没有,yum -y install nfs-utils rpcbind进行安装

[root@nfs01 ~]# rpm -qa | grep -E "nfs|rpc"
nfs4-acl-tools-0.3.3-14.el7.x86_64
xmlrpc-c-1.32.5-1905.svn2451.el7.x86_64
libnfsidmap-0.25-12.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64
libtirpc-0.2.4-0.6.el7.x86_64
xmlrpc-c-client-1.32.5-1905.svn2451.el7.x86_64
rpcbind-0.2.0-32.el7.x86_64

编写配置文件

[root@nfs01 ~]# vim /etc/exports
/share  172.16.1.0/24(rw,sync)
NFS配置文件格式

NFS服务的配置文件为/etc/exports(NFS的主配置文件,该文件不一定存在,需要vim手动建立),配置文件格式:

NFS共享目录   NFS客户端地址(参数1,参数2,… )
NFS共享目录   NFS客户端地址1(参数1, 参数2,…)  NFS客户端地址2(参数1,参数2,…)

NFS共享目录:NFS服务器共享给客户机使用的目录

客户端地址:网络中可以访问这个NFS共享目录的主机

  • 指定ip地址的主机
  • 指定子网中的所有主机
  • 指定域名的主机
  • 指定域中的所有主机
  • 所有主机

参数:设置共享目录的访问权限/用户映射等参数

NFS配置参数权限
访问权限参数作用
rw共享目录是否有读写权限
ro共享目录是否是只读权限
存储方式参数作用
sync同步方式存储数据(存入磁盘,保证数据可靠性,但数据传输慢)
async异步方式存储数据(存入内存,传输数据快,减缓磁盘压力,但容易丢失)
用户映射参数作用
root_squash将root用户的访问映射为匿名用户nfsnobody的uid和gid(默认配置)
no_root_squash不要将root用户映射为匿名用户的uid和gid(对共享文件仍拥有权限)
all_squash将远程访问的所有普通用户的访问都映射为匿名用户nfsnobody的uid和gid
no_all_squash不要将普通用户映射为匿名用户的uid和gid(默认配置)
anonuid=xxx将远程访问的所有用户都映射为指定uid的匿名用户
anongid=xxx将远程访问的所有用户组都映射为指定gid匿名组用户

用户映射

如何改变默认的映射用户?

在/etc/exports配置文件中将anonuid和anongid设置为要映射的用户uid和gid即可:

[root@nfs01 ~]# vim /etc/exports
/share  172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)
Web+NFS+Rsync结合看用户映射

用户映射
企业如何配置NFS各种squash参数保证网站存储服务器的数据安全?

  • no_all_squash:若设置all_squash参数使所有普通用户可以映射到nfsnobody虚拟用户获取共享目录权限.倘若有黑客获取Web服务器的任何一个普通用户身份, 就会对NFS服务器的数据造成威胁.
  • NFS服务器设置一个UID和GID都与Web服务器的www用户相同的www用户, 并且将共享目录的所有者和所属组设置为该www用户:chown www.www /share, 因此Web服务器的www用户无需经过身份映射即可对共享目录进行操作.
  • root_squash:使root用户的访问映射为nfsnobody用户, 但是共享目录的所有者和所属组已经设置为与Web服务器的www用户uid和gid相同的用户, 因此即使root用户映射为nfsnobody虚拟用户,也无法对共享目录进行操作.

no_all_squash和root_squash都是NFS的默认配置, NFS的默认配置的记录文件/var/lib/nfs/etab:

[root@nfs01 ~]# cat /var/lib/nfs/etab 
/share	172.16.1.0/24(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虚拟用户

nfsnobody用户由NFS服务自动创建

[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
创建共享目录

创建配置文件/etc/exports中设置的共享存储目录并将目录所有者和所属组属性改为NFS虚拟用户nfsnobody

[root@nfs01 ~]# mkdir -p /share
[root@nfs01 ~]# chown nfsnobody.nfsnobody /share 
[root@nfs01 ~]# ll /share/ -d 
drwxr-xr-x 2 nfsnobody nfsnobody 6 Jul 23 14:27 /share/

启动服务程序

RPC服务

首先启动RPC服务

[root@nfs01 ~]# systemctl start rpcbind.service     # 启动rpcbind服务
[root@nfs01 ~]# netstat -lntup|grep 111    # 通过端口号查看rpcbind服务是否成功启动
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5090/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      5090/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           5090/rpcbind        
udp6       0      0 :::111                  :::*                                5090/rpcbind  

设置RPC服务开机自启

[root@nfs01 ~]# systemctl enable rpcbind.service     # 开机自启不起作用
[root@nfs01 ~]# systemctl is-enabled rpcbind.service     
indirect

[root@nfs01 ~]# systemctl add-wants multi-user rpcbind.service    # 强制使rpcbind服务由目标(例如多用户)启动
Created symlink from /etc/systemd/system/multi-user.target.wants/rpcbind.service to /usr/lib/systemd/system/rpcbind.service.
[root@nfs01 ~]# systemctl is-enabled rpcbind.service 
enabled
NFS服务

启动RPC服务后启动NFS服务

[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# netstat -lntup | grep nfs    # 通过netstat无法查询到nfs,因为nfs直接将信息注册到rpc,未必会告诉系统
[root@nfs01 ~]# systemctl status nfs
......
   Active: active (exited) since Fri 2021-07-23 14:44:52 CST; 23s ago
  Process: 6530 
......

通过查看rpc服务注册信息可以看到NFS服务的一些信息

[root@nfs01 ~]# rpcinfo -p localhost
   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  58132  status
    100024    1   tcp  60221  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  47593  nlockmgr
    100021    3   udp  47593  nlockmgr
    100021    4   udp  47593  nlockmgr
    100021    1   tcp  36643  nlockmgr
    100021    3   tcp  36643  nlockmgr
    100021    4   tcp  36643  nlockmgr

设置NFS开机自启

[root@nfs01 ~]# systemctl enable nfs
[root@nfs01 ~]# systemctl is-enabled nfs
enabled

客户端部署

安装NFS服务软件

[root@web01 ~]# yum install -y nfs-utils.x86_64 

远程挂载共享目录

临时挂载
[root@web01 ~]# mkdir /share                    
[root@web01 ~]# mount -t nfs 172.16.1.31:/share /share
[root@web01 ~]# df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  4.8G   13G  28% /
devtmpfs                 898M     0  898M   0% /dev
tmpfs                    913M   84K  913M   1% /dev/shm
tmpfs                    913M  8.9M  904M   1% /run
tmpfs                    913M     0  913M   0% /sys/fs/cgroup
/dev/sda1                497M  158M  340M  32% /boot
tmpfs                    183M   16K  183M   1% /run/user/42
tmpfs                    183M     0  183M   0% /run/user/0
172.16.1.31:/share        18G  4.8G   13G  28% /share
自动挂载
  1. 利用rc.local文件

    echo “mount -t nfs 172.16.1.31:/share /share” >> /etc/rc.local

  2. 利用fstab文件(想要fstab实现开机自动挂载,需要保障remote-fs服务开机自启)

    # vim /etc/fstab
    172.16.1.31:/share /share nfs defaults

mount命令参数
参数作用
rw挂载后挂载点目录可读可写(默认)
ro挂载后挂载点目录只读
suid挂载点目录setuid权限位生效(默认)
nosuid挂载点目录setuid权限位不生效 , 提高目录的安全性
exec挂载点目录中的可执行文件可以直接执行(默认)
noexec挂载点目录中的可执行文件无法直接执行,提高目录的安全性
auto可以实现自动挂载, 配合mount -a命令使用 ,实现加载fstab文件自动挂载(默认)
noauto不可以实现自动挂载
user允许普通用户执行mount/umount操作
nouser禁止普通用户执行mount/umount操作(默认)

共享目录存储测试

[root@web01 ~]# touch /share/test_web.txt
[root@web01 ~]# ls /share/             
test_web.txt

[root@nfs01 ~]# ls /share/
test_web.txt

总结

NFS共享目录权限相关因素

  1. 共享目录本身权限 (755 nfsnobody nfsnobody)
  2. 配置文件权限参数(rw/ro *squash anonuid/anongid)
  3. 客户端挂载命令参数 (rw/ro)

企业如何编辑NFS配置文件

  1. 通用方法

    /share  172.16.1.0/24(rw,sync)

  2. 只能看共享目录的数据而不能操作

    /share  172.16.1.0/24(ro,sync)

  3. 修改默认的虚拟用户

    /share 172.16.1.0/24(rw,sync,anonuid=xxx,anongid=xxx)

NFS服务可能遇到的问题

  1. nfs服务重启, 挂载后创建数据较慢
    原因: 重启方式不正确
      restart: 重启服务. 强制断开所有连接, 不管是否有数据传输, 直接将与客户端的连接断开, 用户感受不好
      reload: 重启服务(平滑重启). 强制断开没有数据传输的连接, 有数据传输的连接先将数据传输完毕再断开, 提升用户感受

NFS服务挂载不上排查方法

服务端排查:

  1. 检查nfs进程信息是否注册:rpcinfo -p localhost
    问题原因:rpc与nfs服务启动顺序不对,或没有启动nfs服务
  2. 检查有无可用共享目录:showmount -e localhost
    问题原因:配置文件编写有问题,或重启nfs服务
  3. 在服务端进行挂载测试,是否能够在共享目录中创建或删除数据

客户端测试:

  1. 检查nfs进程信息是否注册:rpcinfo -p localhost
    问题原因:rpc与nfs服务启动顺序不对,或没有启动nfs服务
  2. 检查有无可用共享目录:showmount -e localhost
    问题原因:配置文件编写有问题,或重启nfs服务
  3. 网络问题:ping 172.16.1.31 / telnet 172.16.1.31 111

NFS/RPC启用的进程

[root@nfs01 ~]# ps -ef | grep -E "nfs|rpc"
root        747      2  0 10:02 ?        00:00:00 [rpciod]
avahi       889      1  0 10:02 ?        00:00:00 avahi-daemon: running [nfs01.local]
rpc         899      1  0 10:02 ?        00:00:00 /sbin/rpcbind -w
rpcuser    1225      1  0 10:03 ?        00:00:00 /usr/sbin/rpc.statd    — — 检查数据存储一致性
root       5431      1  0 10:54 ?        00:00:00 /usr/sbin/rpc.idmapd    — — 用户映射转换
root       5434      1  0 10:54 ?        00:00:00 /usr/sbin/rpc.mountd   — — 权限管理验证等
root       5441      2  0 10:54 ?        00:00:00 [nfsd4]
root       5442      2  0 10:54 ?        00:00:00 [nfsd4_callbacks]
root       5453      2  0 10:54 ?        00:00:00 [nfsd]    — — NFS主进程
root       5455      2  0 10:54 ?        00:00:00 [nfsd]
root       5456      2  0 10:54 ?        00:00:00 [nfsd]
root       5458      2  0 10:54 ?        00:00:00 [nfsd]
root       5460      2  0 10:54 ?        00:00:00 [nfsd]
root       5461      2  0 10:54 ?        00:00:00 [nfsd]
root       5463      2  0 10:54 ?        00:00:00 [nfsd]
root       5465      2  0 10:54 ?        00:00:00 [nfsd]
root       5620   5197  0 10:59 pts/0    00:00:00 grep --color=auto -E nfs|rpc
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 项目背景 3 二、 工程概述 3 三、 数据中心网络设计 5 (一) 网络结构 5 1、 链路接入区 6 2、 互联网接入区 6 3、 互联网服务资源区 7 4、 专网接入区 7 5、 专网服务资源区 8 6、 核心网络区 8 7、 内网服务资源区 9 8、 存储资源区 9 9、 运维管理区 10 10、 指挥中心接入区 10 11、 物理整合区 11 (二) 虚拟化组网 11 四、 云计算平台系统设计 13 (一) 资源池设计 14 1、 计算资源池架构设计 14 2、 存储资源池设计 14 3、 资源池部署设计 15 4、 设备选型 17 (二) 云计算资源管理系统 19 1、 云计算资源管理系统设计概述 19 2、 云计算资源管理系统设计思路 20 3、 云计算资源管理系统框架设计 21 4、 云计算资源管理系统功能设计 25 (三) 云存储资源管理系统设计 27 1、 云存储资源管理系统设计概述 27 2、 云存储资源管理系统设计思路 28 3、 云存储资源管理系统框架设计 30 4、 云存储资源管理系统功能设计 30 (四) 云平台运行监控系统设计 31 (五) 云平台运维管理系统设计 32 (六) 云平台管理支撑系统设计 33 1、 资源设备管理 34 2、 资源基本管理 35 3、 资源综合管理 35 4、 资源功耗管理 35 (七) 云平台运营管理系统设计 36 (八) 云应用服务平台(PaaS)设计 37 1、 云路由 37 2、 云负载 38 3、 云代理节点 38 五、 数据中心安全系统设计 40 (一) 云平台安全总体设计 40 (二) 云安全等保定级分析 42 (三) 云安全系统需求分析 43 1、 安全技术需求分析 43 2、 安全管理需求分析 51 (四) 安全技术体系设计 52 (五) 云区域边界安全设计 57 1、 实现边界的访问控制 59 2、 实现网络边界入侵检测 60 3、 实现边界病毒防护 60 4、 实现边界完整性保护 61 5、 实现边界安全审计保护 61 6、 实现网站安全防护 61 (六) 云计算环境安全设计 62 1、 虚拟机访问控制 62 2、 主机安全管理 63 3、 日志集中审计 63 4、 脆弱性管理 64 (七) 云安全管理中心设计 64 1、 集中安全管控 64 2、 安全策略集中管理 65 3、 云安全集中管理 66 (八) 安全管理体系设计 66 1、 安全管理组织 66 2、 人员安全管理 67 3、 安全管理策略 67 (九) 安全运维体系设计 68 六、 数据中心机房工程 68 (一) 机房布局与布线 68 (二) 机房装饰装修 69 1、 地面工程 70 2、 天花吊顶工程 72 3、 墙面工程 73 4、 门窗工程设计 74 (三) 机房电气系统 74 1、 配电系统 74 2、 电源插座设计 75 3、 照明系统设计 75 4、 接地系统设计 76 5、 防雷系统 78 6、 不间断电源系统 78 (四) 机房空调系统 80 1、 机房环境设计标准 80 2、 机房环精密空调容量设计 80 3、 空调送风方式的设计 81 4、 空调上下水设计 81 (五) 动力环境监控系统系统 81 (六) KVM系统 84 1、 方案说明 84 2、 方案拓扑图及说明 84 3、 方案特点 85 (七) 机房消防报警和气体灭火系统 86

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值