• NFS服务部署


    2020年9月15号,13时14分(这个时间秒啊!)
    弱者废话连篇,强者无序多言,嘿嘿!!!
    下面一起学习nfs网络存储部署,有些写得不好请多多指出
    博客同步:www.xiaoxuanzi.top

    1.NFS储存服务

    1.1 概念说明

    NFS是Network File System的缩写中文意思是网络文件共享系统,它的主要功能是通过网络(一般是同域网)让不同的主机系统之间可以共享文件或目录。

    NFS客户端(-般为应用服务器,例如web)可以通过挂载(mount) 的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录- -样,而实际上却是远端的NFS服务器的目录。

    存储服务的种类:

    用于中小型企业存储作用:实现数据共享存储

    1. FTP存储服务:文件传输协议

    运维人员01需要管理服务器01和服务器02,运维人员02需要管理服务器03和服务器04,假设运维人员01需要管理服务器03,怎么办?

    在公司部署FTP共享储存服务器,把可以共享数据放在共享存储服务器,方便公司人员管理查看。

    案例:中小型充值公司(游戏币,QQ币,话费)→ 每日财务对账信息存储数据库服务器 → 每月财务信息文件上传FTP服务器 → 合作公司(移动,腾讯)可以查账

    1. Samba存储服务:实现Linux和Windows之间数据传输存储(Linux部署Samba)

    2. NFS存储服务:实现Linux和Linux之间数据传输存储

      用于大型门户企业(百度,新浪):利用分布式存储

      Moosefs(mfs) 比较落伍,初学学习比较简单

      GlusterFS

      FastDFS 企业应用较

    1.2 NFS储存服务作用

    1、实现企业架构数据的共享存储

    2、便有数据操作管理

    3、节省服务器磁盘使用开销

    2.NFS储存服务部署

    2.1 RPC管理说明

    RPC: 远程过程调用服务程序--- 相当于租房的中介(网络编程支持)

    nfs服务启动流程:

    第一步:启动RPC服务(中介)

    第二步:启动NFS服务进程(房源、房东),把NFS服务端口信息告知RPC服务进程管理

    第三步:客户端访问RPC服务,询问NFS服务端口信息

    第四步:RPC服务返回客户端信息(NFS服务端口)

    第五步:客户端根据端口访问NFS服务器

    2.2 NFS服务-rpc管理流程

    . 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号port、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。

    2.3 NFS服务部署流程

    NFS服务端部署

    第一步:下载安装NFS和rpc软件

    rpm -qa|grep -E "nfs|rpc"
    yum install -y nfs-utils rpcbind
    

    第二步:编写nfs配置文件

    # 1.查看nfs配置参数 man exports	
    exports - NFS server export table		翻译:NFS服务配置导出表
    
    # 2.编写配置文件 /etc/exports
    [root @nfs ~ ]#  vim /etc/exports
    /date   172.16.1.0/24(rw,sync)
    
    配置文件格式:存储目录		网段白名单(参数1,参数2.....)
    第一列:设置数据存储目录 /date
    第二列:设置nfs服务网络白名单(允许哪些网段主机可以连接存储服务器进行数据存储)
    第三列:设置存储目录权限,目录一些功能信息(说明:设置信息需要小括号中,紧跟第二列白名单)
    

    第三步:创建存储目录,对目录进行用户授权(设置存储目录属主属组为nfsnobody)

    # 设置存储目录属主信息
    mkdir -p /date && chown -R nfsnobody.nfsnobody /date
    
    
    # 查看存储目录设置
    [root @nfs ~ ]# ll /date -d
    drwxr-xr-x 2 nfsnobody nfsnobody 6 Sep 30 12:36 /date
    
    说明:nfsnobody是安装nfs-utils服务软件自动创建虚拟用户,用于管理存储目录
    

    第四步:启动nfs服务

    PS:nfs服务端口由rpc服务管理,启动顺序:先启动rpc服务,再启动nfs服务

    # 启动rpc服务
    systemctl restart rpcbind.service
    systemctl enable rpcbind.service 
    
    # 查看服务启动端口
    [root @nfs ~ ]# netstat -lntup| grep rpc
    tcp		0      0 0.0.0.0:111		0.0.0.0:*       	LISTEN	10662/rpcbind       
    tcp6       	0      0 :::111         		:::*                    LISTEN   10662/rpcbind       
    
    # 启动nfs存储服务
    systemctl restart nfs		PS:tab补全可以看到nfs一推服务,systemctl restart nfs可以一块启动
    systemctl enable nfs
    说明:nfs服务端口信息交给rpc服务管理,netstat命令没法查看端口信息
    
    NFS客户端部署

    实现远程挂载共享存储目录

    [root @backup ~ ]# mount -t nfs nfs:/date /mnt/nfs
    mount: wrong fs type, bad option, bad superblock on nfs:/date,
    		错误原因:Linux系统本身不识别nfs文件系统,wrong file system type 无法识别文件类型
    
    # 第一步:安装nfs-utils软件,让Linux识别nfs文件系统
    		yum install -y nfs-utils
    
    # 第二步:实现远程挂载nfs共享存储目录
    		mount -t nfs 172.16.1.31:/date /mnt/nfs
    		参数说明:mount -t 指定挂载文件类型
    

    NFS服务部署完毕,测试客户端存储数据

    # 测试第一步:backup备份服务器在共享目录创建一个文件
    [root @backup ~ ]# touch /mnt/nfs/backup_date.txt
    [root @backup ~ ]# ll /mnt/nfs/
    total 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:09 backup_date.txt
    
    # 测试第二步:web和nfs查看共享数据
    [root @nfs ~ ]# ll /date
    total 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:07 backup_date.txt
    
    [root @web01 ~ ]# ll /mnt/nfs/
    total 0
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:09 backup_date.txt
    
    # 测试第三步:web服务器修改backup_date.txt内容信息,在其他服务器查看
    [root @web01 ~ ]# echo 123456 >/mnt/nfs/backup_date.txt 
    [root @nfs ~ ]# cat /date/backup_date.txt 
    123456
    

    3. NFS服务工作原理

    服务端工作原理

    第一步:启动PRC服务,开启111服务端口

    第二步:启动NFS服务

    第三步:实现NFS服务进程和端口号信息向RPC服务注册

    客户端工作原理

    第一步:客户端和服务端建立TCP网络连接

    第二步:客户端执行挂载命令,进行远程挂载

    第三步:实现数据远程存储共享目录

    补充:查看NFS服务开启,服务进程和端口注册RPC管理信息

    # 停止NFS服务和RPC管理服务
    [root @nfs ~ ]# systemctl stop nfs
    [root @nfs ~ ]# systemctl stop rpcbind.service 
    Warning: Stopping rpcbind.service, but it can still be activated by:
      rpcbind.socket
    [root @nfs ~ ]# systemctl stop rpcbind.socket 
    
    # 重新启动RCP服务,NFS服务没有注册端口。查看RPC本来端口信息
    [root @nfs ~ ]# systemctl restart rpcbind.service 
    [root @nfs ~ ]# 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
    	说明:rpcinfo查看NFS和RPC服务端口信息	-p 指定查看主机信息(localhost表示查看本地主机RPC信息
    
    # 启动NFS服务,查看注册端口信息
    systemctl restart nfs
    rpcinfo  -p 172.16.1.31
    	注意:由于NFS服务端口是随机的,当NFS服务重启,部分服务端口信息会改变!!!   
    

    4. NFS配置文件说明

    1. 配置文件格式

    /etc/exports配置实现多个网段主机可以进行挂载

    第一种方式:
    	/data   172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
    
    格式:NFS存储目录	 NFS服务地址1(参数1,参数2...)NFS服务地址2(参数1,参数2...)
    第一列:/data为要共享的NFS服务器端的目录,注意,被共享的目录一定要用绝对路径
    第二列:10.0.0.0/24表示允许NFS客户端访问共享目录的网段范围。24表示255.255.255.0
    第三列:(rw,sync)中的rw表示允许读写,sync 表示数据同步写入到NFS服务器端的硬盘中
    
    第二种方法:
    	/data   172.16.1.0/24(rw,sync) 
    	/data   10.0.0.0/24(rw,sync)
    

    2. 共享目录的权限问题

    1)和存储目录的本身权限有关 (755 属主:nfsnobody)

    [root @backup ~ ]# ll /mnt/nfs -d
    dr-x-w--w- 2 nfsnobody nfsnobody 47 Sep  2 11:01 /mnt/nfs
    
    [root @backup ~ ]# touch /mnt/nfs/1.txt
    touch: cannot touch ‘/mnt/nfs/1.txt’: Permission denied
    
    	说明:挂载存储目录权限不是755以上,提示没有权限touch
    

    2)和配置文件中的权限配置有关 rw/ro

    # 修改nfs配置参数为 rw → ro ,设置只读目录数据
    [root @nfs ~ ]# cat /etc/exports
    /date	172.16.1.0/24(ro,sync)
    [root @nfs ~ ]# systemctl restart nfs 
    
    
    # 设置ro参数,无法创建文件
    [root @backup ~ ]# touch /mnt/nfs/1.txt
    touch: cannot touch ‘/mnt/nfs/1.txt’: Read-only file system
    

    3)和客户端挂载命令的参数有关 ro/rw 等

    3. NFS配置参数权限

    rw 存储目录是否有读写权限

    ​ ro 存储目录是否时只读权限

    ​ sync 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)

    ​ async 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)

    ​ no_root_squash 不要将root用户身份进行转换 (默认参数)

    ​ root_squash 将root用户身份进行转换

    ​ all_squash 将所有普通用户身份都进行转换

    ​ no_all_squash 不要将普通用户身份进行转换(默认参数)

    操作演示一:all_squash参数功能

    # nfs服务端修改配置文件参数
    [root @nfs ~ ]# cat /etc/exports
    /date	172.16.1.0/24(rw,sync,all_squash)
    
    [root @nfs ~ ]# systemctl restart nfs
    
    # 客户端backup挂载存储目录,创建数据。(需要重新挂载共享目录)
    [root @backup ~ ]# mount -t nfs 172.16.1.31:/date /mnt/nfs
    [root @backup ~ ]# su - xuan
    [xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup.txt
    
    [xuan @backup ~ ]$ ll /mnt/nfs/xuan_backup.txt
    -rw-rw-r-- 1 nfsnobody nfsnobody 0 Sep  3 08:55 /mnt/nfs/xuan_backup.txt
    

    操作演示二:no_all_squash参数功能

    # nfs服务端修改配置文件参数
    [root @nfs ~ ]# cat /etc/exports
    /date	172.16.1.0/24(rw,sync,no_all_squash)
    
    # 客户端操作,没有权限创建。原因:no_all_squash取消其他用户映射nfsnobody身份,以共享目录其他身份权限操作
    [xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup_no_squash.txt
    touch: cannot touch ‘/mnt/nfs/xuan_backup_no_squash.txt’: Permission denied
    
    解决权限问题:
    1.修改目录属主信息
    2.修改目录其他用户权限
    	chmod o+w /date
    

    操作演示三:root_squash参数功能

    # nfs服务端修改配置文件参数
    [root @nfs ~ ]# cat /etc/exports
    /date	172.16.1.0/24(rw,sync,root_squash)
    
    # 客户端使用root用户创建数据 
    [root @backup ~ ]# touch /mnt/nfs/root_date.txt
    [root @backup ~ ]# ll /mnt/nfs/root_date.txt
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  3 09:21 /mnt/nfs/root_date.txt
    

    4. 企业互联网公司如何配置NFS 各种squash参数

    保证存储目录数据的安全性

    配置参数一:no_all_squash 禁止其他用户访问共享目录,可以删除数据或者存储数据

    说明1:当nfs存储目录配置all_squash参数,其他用户会以nfsnobody身份访问共享目录,其他用户可以进入共享目录进行创建删除数据操作

    说明2:配置 no_all_squash 参数,其他用户以共享目录其他用户身份权限操作

    问题:配置no_all_squash,当web服务的站点用户www如何存储数据?

    [root @nfs ~ ]# cat /etc/exports
    /date	172.16.1.0/24(rw,sync,no_all_squash)
    
    
    # 第一步: nfs服务器操作:创建www用户,设置共享目录/date属主属组信息
    [root @nfs ~ ]# useradd www;echo 123456 |passwd --stdin www
    [root @nfs ~ ]# id www
    uid=2001(www) gid=2001(www) groups=2001(www)
    [root @nfs ~ ]# chown -R www. /date
    [root @nfs ~ ]# ll -d /date
    drwxr-xr-x 2 www www 217 Sep  3 11:53 /date
    
    # 第二步:web服务器(客户端)以www用户存储数据
    [root @web01 ~ ]# su - www
    [root @web01 ~ ]# useradd www -u 1001
    [www @web01 ~ ]$ touch /mnt/nfs/www_date.txt
    
    	说明:当让www用户可以管理共享目录,方法是把共享存储目录修改属主信息为www用户,确保客户端www用户必须和服务端www用户uid号码一致,否则没有权限操作目录数据
    

    配置参数二:root_squash

    说明:当修改共享目录属主不是nfsnobody时,root用户也不可以修改共享目录数据。原因:root_squash默认把root用户转换为nfsnobody用户

    此时nfsnobody为共享目录其他用户身份操作,没有权限修改数据

    # 修改nfs配置文件,并且共享目录不是nfsnobody
    [root @nfs ~ ]# vim /etc/exports
    /date   172.16.1.0/24(rw,sync,no_all_squash,root_squash)
    
    
    # 客户端以root用户身份也无法操作
    [root @web01 ~ ]# touch /mnt/nfs/root_date.txt
    touch: cannot touch ‘/mnt/nfs/root_date.txt’: Permission denied
    

    以上默认配置(很多服务默认配置都是从安全角度出发)

    如何查看nfs默认配置 /val/lib/nfs/etab

    [root @nfs ~ ]# cat /var/lib/nfs/etab

    /var/lib/nfs/etab文件作用:只是记录nfs服务默认配置信息,不会对nfs服务产生影响

    nfs服务配置文件参数:no_all_squash,root_squash ,如何让root用户可以管理www属主共享目录?

    root → root_squash → www → 管理/date

    客户端root用户可以映射nfs服务端www = 1001管理数据

    [root @nfs ~ ]# vim /etc/exports
    /date   172.16.1.0/24(rw,sync,no_all_squash,root_squash,anonuid=1001,anongid=1001)
    

    nfs配置参数:

    anonuid = 65534 指定客户端用户映射服务端用户uid号码

    anongid = 65534 指定客户端用户组映射服务端用户组gid号码

    说明:65534用户就是nfs服务创建的nfsnobody用户,但是nfsnobody虚拟用户,也有家目录

    [root @nfs ~ ]# grep 65534 /etc/passwd
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    

    5. 企业中如何编辑nfs配置文件

    ​ 1. 通用方法 *****

    ​ /data 172.16.1.0/24(rw,sync)

    1. 特殊情况 (让部分人员不能操作存储目录 可以看目录中的数据)

    ​ /data 10.0.0.0/24(ro,sync)

    1. 修改默认的匿名用户

    ​ /data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)

    5. nfs服务问题

    nfs服务器重启,挂载后创建数据比较慢

    原因:服务器重启方式不正确

    重启方式一:restart 重启服务 强制断开所有连接 用户感受不好

    ​ 说明:当多台客户端访问服务端建立网络连接时,其中俩台客户端主机向服务端传输数据,服务端突然 restart 重启服务,会把和服务端建立所有连接强制断开,影响数据传输。 再次重新连接连接的冷却时间为90秒(就是TCP的walk_time)

    重启方式二:reload 重启服务(平滑重启) 强制断开没有数据传输的连接 提升用户感受

    ​ 说明:reload 重启服务,先会把没有数据传输连接断开,再等待数据传输完毕之后断开连接

    6. NFS客户端配置详细说明

    客户端挂载共享目录

    	mount -t nfs 172.16.1.31:/date /mnt/nfs
    参数说明:mount -t		指定挂载文件系统类型
    
    # 实现开机自动挂载共享目录
    方法一:利用开机脚本 rc.local
    	echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
    
    方法二. 利用fstab文件
    	vim /etc/fstab
    	172.16.1.31:/data                         /mnt                    nfs     defaults        0 0
    

    问题:编写fstab文件,无法开机自动挂载网络共享存储目录?

    centos6:无法实现网路存储服务自动挂载原因(依赖autofs服务)

    centos6是串行启动服务方式,按照服务启动先后顺序启动对应服务程序,直到最后一个服务启动完毕才算服务器服务开机启动时间

    顺序依次启动 network服务--- sshd服务--- crond服务--- rsync服务--- rpcbind服务--- nfs服务

    实现开机挂载:

    1.先加载fstab文件 ,加载最后一行共享目录挂载时,主机的网络服务还没有启动,导致无法挂载

    2.启动系统其它服务 network

    3.启动 aotufs服务

    作用:开机启动autofs服务,会重新加载fstab配置文件信息。实现开机可以挂载共享目录

    centos7:无法实现网路存储服务自动挂载原因(依赖remote-fs.target服务)

    centos7是并行启动服务方法,把系统所有开机启动服务一并进行启动,开机启动时间取决于最慢启动服务数据

    顺序依次启动

    ​ network服务

    ​ sshd服务

    ​ crond服务

    ​ rsync服务

    实现开机挂载:需要开机启动centos7特殊加载fstab服务 remote-fs.target

    systemctl start remote-fs.target

    systemctl enable remote-fs.target

    客户端mount命令参数

    rw 实现挂载后挂载点目录可读可写 (默认)

    ro 实现挂载后挂载点目录可读可写

    suid 在共享目录中可以让setuid权限位生效 (默认)

    nosuid 在共享目录中可以让setuid权限位失效 提供共享目录的安全性

    exec 共享目录中的执行文件可以直接执行(默认)

    noexec 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性

    auto 可以实现自动挂载 (默认) root用户:mount -a 实现加载fstab文件自动挂载

    noauto 不可以实现自动挂载

    nouser 禁止普通用户可以卸载挂载点(默认)

    user 允许除了root的普通用户可以卸载挂载点 选项隐含了 noexec, nosuid, nodev 选项,除非你特意进行了修改(比如:users,exec,dev,suid

    users 允许任意用户可以卸载挂载点

    # 配置 user参数,普通用户无法卸载??
    [xuan @web01 ~ ]$ tail -1 /etc/fstab 
    172.16.1.31:/date	/mnt/nfs	nfs 	auto,user	0	0
    
    [xuan @web01 ~ ]$ umount /mnt/nfs 
    umount: /mnt/nfs: umount failed: Operation not permitted
    
    # 配置 users参数,可以实现普通用户卸载
    [xuan @web01 ~ ]$ tail -1 /etc/fstab 
    172.16.1.31:/date	/mnt/nfs	nfs 	auto,users	0	0
    
    [xuan @web01 ~ ]$ umount /mnt/nfs 
    	说明:配置参数users配合aotu实现普通用户卸载共享目录挂载
    

    客户端如何卸载

    umount -lf /mnt/nfs 表示:强制卸载挂载点

    参数说明:

    umount -l 表示不退出挂载点目录进行卸载

    umount -f 表示强制进行卸载

  • 相关阅读:
    format的用法

    TADOQuery池
    10分钟了解JSON Web令牌(JWT)
    PHP操作Redis数据库常用方法
    平时在PHP编码时有没有注意到这些问题
    利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
    ORM的详解
    oracle NLS_LANG环境变量设置
    验证选择每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
  • 原文地址:https://www.cnblogs.com/xuanxuan360/p/13672384.html
Copyright © 2020-2023  润新知