前言
带着问题思考
存储类型
在计算机系统中,存储是指用于存储数据和程序的设备或介质。 1.直连式存储:Direct-Attached Storage,简称DAS 存储和主机是直连的,家用电脑,服务和硬盘直连,存储和主机在一台机器上 使用场景:适合数据 量不大,对磁盘访问速度要求较高的中小企业 2.网络附加存储:Network-Attached Storage,简称NAS 存储在远程,文件系统也在远程,这块空间,你可以直接访问上面的文件,你只能看到文件,文件共享NFS FTP 等都是NAS 通俗可以理解为:通过网络公用一个设备 且设备的数据仅存一份,节省资源. 适用场景:适用于文本服务器,用来存储非结构化数据,虽然受限于以太网速度,但是部署灵活,成本低. 3.存储区域网络:Storage Area Network,简称SAN 有一定距离,主机和存储设备距离相对较远,只提供空间不提供文件系统,管理等其他软件服务,只相当于多了一块硬盘.比如gfs ceph等. 适用场景:大型应用或者数据库系统 成本高 复杂.
NFS简介
NFS(Network File System 网络文件服务)文件系统(软件)文件的权限,基于内核的网络文件系统,是一种基于 TCP/IP 传输的网络文件系统协议 通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 . nfs的端口号是不固定的,随机产生.依赖于 RPC(Remote Process Call,远端过程调用)机制,通过nfs协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源.
工作原理
!!#ffff00 服务端!!-nfs开启后 服务段自己的rpc会注册相关信息 !!#ffff00 客户端!!-想要去连接服务器,需要知道端口号. 通过rpc获取服务端随机产生的端口号,进行访问.
NFS特点
- 端口号随机产生
- 节省本地存储空间
- 使用tcp/ip协议传输文件
NFS相关软件
软件包:nfs-utils(包括服务器端和客户端) 相关软件包:rpcbind(必须) rpc端口号 1111 kenel 支持 :nfs.ko NFS服务主要进程:
- rpc.nfsd 最主要的NFS进程,管理客户端是否可登录 基本的nfs守护进程
- rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
- rpc.lockd 非必要,管理文件锁,避免同时写出错
- rpc.statd 非必要,检查文件一致性,可修复文件 日志位置:日志:/var/lib/nfs/
NFS配置文件 格式
NFS配置文件: /etc/exports.d/*.exports
配置格式
!!#ffff00 nfs服务端!!
[root@xyy1 /]# vim /etc/exports
#共享目录 主机 (权限)
/share * #*代表任意主机
/share 192.168.64.16/24 #网段
!!#ffff00 修改配置文件之后 重启服务。!!
[root@xyy1 /]# systemctl start rpcbind #启动rpc
[root@xyy1 /]# systemctl restart nfs #重启nfs
[root@xyy1 /]# systemctl status nfs #查看服务nfs状态
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Sun 2024-05-05 16:19:34 CST; 16s ago
!!#ffff00 exportfs 管理nfs!! !!#ffff00 exportfs -v!! 显示本机的共享情况 !!#ffff00 exportfs -r!! 重新加载nfs服务配置
[root@xyy1 /]# exportfs -vr #重启nfs 会有提示 是否有错误
exportfs: No options for /share *: suggest *(sync) to avoid warning
exporting *:/share
[root@xyy1 /]# exportfs -v #查看nsf的详细信息。
/share <world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
NFS权限参数详解
| nfs共享参数 | 参数含义 | | ------ | ------ | | rw| 读写权限 (常用) | | ro| 只读权限 | | rootsquash(默认) | 当nfs客户端以超级管理员访问时,映射为nfs服务器的匿名用户 | | norootsquash |当nfs客户端以超级管理员访问时 映射为nfs服务器的管理员 | |allsquash | 无论nfs客户端以什么身份访问,nfs服务器端均映射为匿名用户(常用) | | noallsquash(默认) |无论nfs客户端 以什么账户访问,权限不改变 默认文件权限 | |sync | 数据同时写入硬盘和内存中 性能低 安全性高 | |async |现将数据保存内存,再写入硬盘 性能高,安全性低| | anonuid |可配合allsquash使用,指明匿名用户映射为特定用户UID(常用) | |anongid|可配合allsquash使用,指明匿名用户映射为特定用户GID
!!#ffff00 在生产环境中 权限建议统一管理 all_squash 调整uid统一 anonuid 使用setfacl进行限定 比较安全。!!
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify-acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
--set=acl 设定替换当前的文件访问控制列表
--set-file=file 从文件中读取访问控制列表条目设定
--mask 重新计算有效权限掩码
-n, --no-mask 不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
--restore=file 恢复访问控制列表,和“getfacl -R”作用相反
--test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
NFS客户端
!!#ffff00 showmount -e !! 服务器IP 查看共享
[root@localhost ~]# showmount -e 192.168.64.16
Export list for 192.168.64.16:
/share *
挂载NFS共享文件 临时挂载 !!#ffff00 mount 服务器IP:共享文件 挂载点!! 通俗理解: 共享文件share 是16服务器 / 目录下 就是把16服务器的 /dev/mapper/centos-root 挂载到了 客户端
[root@localhost mnt]# mount 192.168.64.16:/share /mnt/test/
[root@localhost mnt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 39G 3.4G 35G 9% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 18M 895M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 33M 19G 1% /home
tmpfs 183M 4.0K 183M 1% /run/user/42
tmpfs 183M 28K 183M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
192.168.64.16:/share 10G 3.9G 6.2G 39% /mnt/test
永久挂载 编辑/etc/fstab
[root@localhost mnt]# vim /etc/fstab #编辑永久挂载文件
[root@localhost mnt]# mount -a #重新挂载
[root@localhost mnt]# df -h #查看挂载情况
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 39G 3.4G 35G 9% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 18M 895M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 33M 19G 1% /home
tmpfs 183M 4.0K 183M 1% /run/user/42
tmpfs 183M 28K 183M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
192.168.64.16:/share 10G 3.9G 6.2G 39% /mnt/test
客!!#ffff00 户端测试 在该目录下创建文件 只读 无法创建!!
[root@localhost test]# touch 123
touch: 无法创建"123": 只读文件系统
NFS实际应用
场景: {data-type=drawio data-xml=%3CmxGraphModel%20dx=%22871%22%20dy=%22478%22%20grid=%221%22%20gridSize=%2210%22%20guides=%221%22%20tooltips=%221%22%20connect=%221%22%20arrows=%221%22%20fold=%221%22%20page=%221%22%20pageScale=%221%22%20pageWidth=%22827%22%20pageHeight=%221169%22%3E%3Croot%3E%3CmxCell%20id=%220%22/%3E%3CmxCell%20id=%221%22%20parent=%220%22/%3E%3CmxCell%20id=%226%22%20style=%22edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=1;exitY=0;entryX=0.5;entryY=1;jettySize=auto;orthogonalLoop=1;%22%20edge=%221%22%20parent=%221%22%20source=%222%22%20target=%223%22%3E%3CmxGeometry%20relative=%221%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%227%22%20style=%22edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=1;exitY=1;entryX=0.5;entryY=0;jettySize=auto;orthogonalLoop=1;%22%20edge=%221%22%20parent=%221%22%20source=%222%22%20target=%224%22%3E%3CmxGeometry%20relative=%221%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%228%22%20style=%22edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;jettySize=auto;orthogonalLoop=1;%22%20edge=%221%22%20parent=%221%22%20source=%222%22%20target=%225%22%3E%3CmxGeometry%20relative=%221%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%222%22%20value=%22%E7%94%A8%E6%88%B7%22%20style=%22ellipse;whiteSpace=wrap;html=1;aspect=fixed;%22%20vertex=%221%22%20parent=%221%22%3E%3CmxGeometry%20x=%22150%22%20y=%22140%22%20width=%2280%22%20height=%2280%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%223%22%20value=%22%E6%9C%8D%E5%8A%A1%E5%99%A81%22%20style=%22whiteSpace=wrap;html=1;aspect=fixed;%22%20vertex=%221%22%20parent=%221%22%3E%3CmxGeometry%20x=%22360%22%20y=%2240%22%20width=%2280%22%20height=%2280%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%224%22%20value=%22%E6%9C%8D%E5%8A%A1%E5%99%A82%22%20style=%22whiteSpace=wrap;html=1;aspect=fixed;%22%20vertex=%221%22%20parent=%221%22%3E%3CmxGeometry%20x=%22360%22%20y=%22230%22%20width=%2280%22%20height=%2280%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3CmxCell%20id=%225%22%20value=%22%E6%9C%8D%E5%8A%A1%E5%99%A83%22%20style=%22whiteSpace=wrap;html=1;aspect=fixed;%22%20vertex=%221%22%20parent=%221%22%3E%3CmxGeometry%20x=%22580%22%20y=%22140%22%20width=%2280%22%20height=%2280%22%20as=%22geometry%22/%3E%3C/mxCell%3E%3C/root%3E%3C/mxGraphModel%3E}
用户访问网页,如果每一台服务器上都部署一个页面,是比较浪费资源的 这个时候就可以使用nfs 单独拿出一台服务器3 作为共享存储 不论访问哪个服务器 显示的页面都是服务器3页面。