• 【Linux网络】典型NAS存储方式:NFS网络共享存储服务


    一、关于存储的分类

    二、NFS的介绍

    nfs的相关介绍:

    1、原理

    2、nfs的特点

    3、nfs软件学习

    4、共享配置文件的书写格式

     关于权限,学习:

    5、关于命令的学习:

    三、实验操作

    1、nfs默认共享权限(服务端设置)

    2、客户端进行挂载 

    ​编辑 3、客户端测试:

    4、调优

    ①修改共享配置文件,添加写的权限

    ②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限

    四、总结


    一、关于存储的分类

    存储类型分为三种

    1、直连式存储:Direct-Attached Storage,简称DAS

    特点:存储和主机直接连接,比如家用的电脑,服务和硬盘直接连接,存储和主机在一台机器上

    适用范围:适用于那些数据量不大,对磁盘访问速度要求较高的中小企业

    2、网络附加存储:Network-Attached Storage,简称NAS

    特点:存储在远程,文件系统也在远程,这块空间是你可以直接访问上面的文件,如ftp、nfs都属于NAS(可以理解为通过网络共用一个设备,且设备的数据仅存了一份)

    适用范围:适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低

    3、存储区域网络:Storage Area Network,简称SAN

    特点:有一定的距离,主机距离存储设备相对较远,只提供空间不提供文件系统,管理等其他软件服务,比如ceph,gfs等

    适用范围:适用于大型应用或数据库系统,缺点是成本高、较为复杂

    二、NFS的介绍

    nfs的相关介绍:

    nfs是一种NAS存储,NFS也是一种网络文件系统基于内核的文件系统

    nfs端口号不固定,早期喜欢说是2049,但是实际上是不固定的,它依赖于rpc(Remote Process Call,远程过程调用协议),通过nfs协议,客户机可以像访问本地目录一样远程访问服务器的共享资源。

    1、原理

    首先,服务端:nfs开启以后,服务端自己的rpc会注册相关信息;

    然后,客户端:想要去连接服务端,会先找一下rpc注册中心,获取nfs的端口号(因为nfs的端口号是随机的,由rpc来进行管理) ;

    最后,rpc会告诉客户端关于服务端的nfs端口号,客户端实现访问

    2、nfs的特点

    • 使用tcp/ip传输网络文件(rpcbind的端口号是111,nfs的端口号不固定)
    • 比较适合局域网环境,内部操作
    • 安全性低

    3、nfs软件学习

    软件包:nfs-utils(包括服务器端和客户端)

    相关软件包:rpcbind(必须)(centos7的rpcbind由systemd直接管理,不需要启动,会有叫醒服务,在centos7之前都需要先启rpcbind再启动nfs)

    nfs端口号不固定 RPC端口号111(tcp和udp都是)

    NFS服务主要进程:

    • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

    • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

    • rpc.lockd 非必要,管理文件锁,避免同时写出错

    • rpc.statd 非必要,检查文件一致性,可修复文件

    日志:/var/lib/nfs/

    4、共享配置文件的书写格式

    /etc/exports

    1. 共享目录 共享给哪些主机(权限)
    2. /dir 192.168.20.0/24(rw.....等)
    3. 举例:最简单的:/opt *
    4. 可获取的主机可以是一台,也可以是网段等

     关于权限,学习:

    1. 默认选项:(ro,sync,root_squash,no_all_squash)
    2. ro,rw 只读和读写(如果允许客户端创建文件夹,写内容等,需要调为rw)
    3. async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
    4. ##但是异步的速度快,因为缓存在内存了
    5. sync1.0.0后为默认)同步 ##数据在请求时立即写入共享存储磁盘,性能低,安全性高
    6. root_squash ##(默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS
    7. 7以前的版本为nfsnobody
    8. no_root_squash ##远程root映射成NFS服务器的root用户
    9. all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
    10. no_all_squash (默认)保留共享文件的UID和GID(这里注意是id号)
    11. anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
    12. /data/nfs1 *(rw,all_squash,anonuid=1002,anongid=1002)
    13. ##以后在生产环境中,为了调优和统一化部署,建议映射为id号相同的用户

    5、关于命令的学习:

    服务端:

    1、软件的配置文件不需要修改,需要修改共享配置文件:/etc/exports

    2、修改完以后,先重启一下nfs服务,有两种方法:exportfs -r和systemctl  reload nfs

    3、查看本机的共享配置文件信息:exportfs -v

    客户端:

    1、需要知道服务端是否开启了共享服务:showmount -e 服务端的ip

    2、服务端需要挂载:

    临时挂载:mount 服务端ip:/共享目录  挂载点

    永久挂载:vim /etc/fstab;服务端ip:/共享目录   挂载点 nfs defaults,_netdev 0 0

    注意:因为是通过网络共享,那么需要知道,万一服务器不在线,那么永久挂载的配置文件会在开机的时候加载,那么如果没有“_netdev”则开不了机。这个“_netdev”的意思是能够ping通才行,没ping通不生效

    三、实验操作

    1、nfs默认共享权限(服务端设置)

    1. [root@localhost ~]#mkdir /data
    2. [root@localhost ~]#vim /etc/exports
    3. ##exportfs -r和systemctl reload nfs用法一样
    4. [root@localhost ~]#exportfs -r
    5. exportfs: No options for /data 192.168.20.0/24: suggest 192.168.20.0/24(sync) to avoid warning
    6. [root@localhost ~]#exportfs -v
    7. /data 192.168.20.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

    2、客户端进行挂载 

    1. [root@localhost ~]#systemctl start nfs
    2. [root@localhost ~]#showmount -e 192.168.20.30

    1. [root@localhost ~]#mkdir /nfsdir
    2. ##临时挂载
    3. [root@localhost ~]#mount 192.168.20.30:/data /nfsdir/
    4. [root@localhost ~]#df -hT
    5. ##永久挂载
    6. [root@localhost ~]#vim /etc/fstab
    7. [root@localhost ~]#mount -a
    8. [root@localhost ~]#df -hT

     

     3、客户端测试:

    4、根据实验来学习权限配置

    想要客户端有写的权限:

    ①修改共享配置文件,添加写的权限

    ②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限

     

     

    5、关于文件的属主

    1、默认情况下,是root_squash,no_all_squash,即:root压榨为匿名用户,普通用户只是保留uid与名称无关

    2、添加完rw权限以后,客户端可以写内容也可以删除内容

    6、客户多台客户机使用nfs

    7、比较常用的选项配置:

    1. 共享配置文件的常用选项
    2. /data *(rw,all_squash,anonuid=2000,anongid=2000)

    测试结果 

    建议在使用的时候,将所有主机的uid=2000的用户使用同一个人,这样比较方便 

    拓展 

    在这个使用的基础上,指定uid为2000的用户使用,这样更加安全!!

    验证  在服务端和客户端只是认识uid为2000的用户,换个名字也是一样的 

     

     8、验证rpcbind是tcp和udp的111端口:

    四、总结

    1、服务端添加共享目录的写的权限的时候,需要注意给软件添加权限,然后还得给共享的目录添加权限,目录权限添加有两种办法:直接用chmod 777;或者使用setfacl 只给指定的用户或uid给rwx权限;

    2、rpcbind用了tcp协议也用了udp协议,都是111端口,tcp用于建立可靠的客户端连接,udp用于管理注册信息nfs的端口号;

    3、要知道如果系统默认是进行root压榨为nfsnobody和普通用户不压榨,但是是以uid记录,所有属主和属组都是看uid的,与用户名无关;

    4、在生产环境中,建议使用全部压榨,调整为uid为统一的用户,使用setfacl限定,这样数据更安全

    5、最后,nfs是一种nas存储方式,nfs本身就是一种网络文件系统,所以直接挂载就可以使用

  • 相关阅读:
    百度飞浆环境安装
    【基于React-Native做位置信息获取,并展示出来】
    git 提交
    查题系统API无限搜题接口搭建
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wcsncmp
    【web-攻击会话管理】(4.2.1)会话令牌生成过程中的薄弱:令牌含义、加密令牌
    js调用android 方法
    【P No. 1739】 括号匹配
    Linux OOM killer
    redis的原理和源码-Lua环境的源码解析&各命令的介绍
  • 原文地址:https://blog.csdn.net/liu_xueyin/article/details/134431202