网络综合架构-NFS存储服务及部署

欢迎你们访问个人博客:blog.54newpower.topweb

NFS存储服务及部署

NFS存储服务简介:

NFS=Network File System=网络文件系统。
主要功能是经过网络(通常是局域网)让不一样的主机系统之间能够共享文件或目录。
NFS客户端(通常为应用服务器,例如web)能够经过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端本身的磁盘分区或者目录同样,而实际上倒是远端的NFS服务器的目录。
NFS属于本地文件存储服务。
NFS主要用于存储web服务器上用户上传的数据信息(图片 附件 头像 视频 音频)。shell

NFS优缺点:

优势:

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

缺点:

  • 没有认证功能 分布式存储/ftp/samba
  • 没法支持高并发存储 日PV 2000万
  • 没法实现高可用 分布式存储/keepalived

NFS工做方式:

  1. 在nfs服务端建立共享目录vim

  2. 经过mount 网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。centos

  3. NFS客户端挂载目录上建立、删除、查看数据操做,等价于在服务端进行建立、删除、查看数据操做。

NFS的两个重要服务

因为NFS服务启动产生的进程服务端口号都是随机的,所以NFS的各项功能都须要向RPC服务(rpcbind服务)注册,因此只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能经过向RPC服务询问才能找到正确的端。也就是说,NFS须要有RPC服务的协助才能成功对外提供服务。说白了,PRC至关与一个中介,NFS至关与是房东,当有新的租房信息发布时,房东会告诉中介,房客通常是联系中介来租房的。安全

NFS工做原理

服务端:服务器

  1. 启动rpc服务,开启111端口
  2. 启动nfs服务
  3. 实现nfs服务进程和端口好的注册
    ps:产看nfs服务的注册信息
    rpcinfo -p 172.16.1.31
    [root@web01 /mnt]#rpcinfo -p 172.16.1.31
    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  43152  status
    100024    1   tcp  60675  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  40594  nlockmgr
    100021    3   udp  40594  nlockmgr
    100021    4   udp  40594  nlockmgr
    100021    1   tcp  41770  nlockmgr
    100021    3   tcp  41770  nlockmgr
    100021    4   tcp  41770  nlockmgr

    客户端:网络

  4. 创建TCP网络链接
  5. 客户端执行挂载命令,进行远程挂载
  6. 能够实现数据远程传输存储

NFS服务的安装与部署

服务端的配置

检查软件是否安装

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

注意:nfs和rpc的软件名并发

编写配置文件

vim /etc/exports
#输入如下内容
/data   172.16.1.0/24(rw,sync)
#/data 共享目录
#容许存储数据网段信息
#rw 读写
#rsync同步存储数据

建立共享目录并受权

mkdir /data
chown nfsnobody.nfsnobody /data
ls -ld /data

启动服务

先启动rpc服务app

systemctl start rpcbind.service 
systemctl enable rpcbind.service
systemctl status rpcbind.service 
systemctl is-enabled rpcbind.service
[root@nfs01 ~]#systemctl start rpcbind
[root@nfs01 ~]#systemctl enable rpcbind
[root@nfs01 ~]#systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-05-03 23:28:06 CST; 7h left
 Main PID: 964 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─964 /sbin/rpcbind -w

May 03 23:28:05 nfs01 systemd[1]: Starting RPC bind service...
May 03 23:28:06 nfs01 systemd[1]: Started RPC bind service.
[root@nfs01 ~]#systemctl is-enabled rpcbind
enabled

再启动nfs服务异步

systemctl start nfs
systemctl enable nfs
systemctl status nps
systemctl is-enabled nfs
[root@nfs01 ~]#systemctl start nfs
[root@nfs01 ~]#systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs01 ~]#systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Sun 2020-05-03 15:45:02 CST; 19s ago
 Main PID: 1779 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

May 03 15:45:02 nfs01 systemd[1]: Starting NFS server and services...
May 03 15:45:02 nfs01 systemd[1]: Started NFS server and services.
[root@nfs01 ~]#systemctl is-enabled nfs
enabled

客户端的配置

安装nfs-utils,使客户端能够识别nfs挂载方式

yum install -y nfs-utils
rpm -qa|grep "nfs-utils"

实现远程挂载共享目录

mount -t nfs 172.16.1.31:/data  /mnt

nfs服务端详细配置说明

实现多个网段主机能够进行挂载

第一种方法:

/data   172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)

第二种方法:

/data   172.16.1.0/24(rw,sync) 
/data   10.0.0.0/24(rw,sync)

影响NFS 服务存储权限的因素

(1)服务端配置文件参数 exports文件里ro/rw参数
(2)服务端自己目录权限
(3)服务端共享目录权限存在继承关系 例如:/data,/data/r
PS:建议设置共享目录时,不要存在父级与子级关系
(4)客户端挂载参数是否为 ro

NFS服务配置参数

NFS配置参数权限
rw   -- 存储目录是否有读写权限
ro   -- 存储目录是否时只读权限
sync   -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
async  -- 异步方式存储数据 直接将数据保存到内存(提升数据存储效率)
no_root_squash  -- 不要将root用户身份进行转换   
root_squash     -- 将root用户身份进行转换
all_squash      -- 将全部用户身份都进行转换 
no_all_squash   -- 不要将普通用户身份进行转换

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

保证网站存储服务器用户数据安全性:
no_all_squash  须要进行配置   共享目录权限为www(确保客户端用户 服务端用户 uid数值一致)
root_squash    须要进行配置   root---nfsnobody    data目录---www

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

如何查看nfs默认配置
cat /var/lib/nfs/etab    --- 记录nfs服务的默认配置记录信息
[root@nfs01 ~]#cat /var/lib/nfs/etab
/data   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)
如何让root用户能够操做管理www用户管理的data目录
anonuid=65534,anongid=65534    --- 能够指定映射的用户信息
#修改映射用户:www=1002
/data   172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)

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

  1. 通用方法
    /data   172.16.1.0/24(rw,sync)
  2. 特殊状况 (让部分人员不能操做存储目录 能够看目录中的数据)
    /data   10.0.0.0/24(ro,sync)
  3. 修改默认的匿名用户
    /data   10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
    #注:服务端普通用户的uid要与客户端普通用户的uid相同

    nfs服务问题:

    nfs服务器重启,挂载后建立数据比较慢
    服务器重启方式不正确
    服务重启:
    restart 重启服务 强制断开全部链接 用户感觉很差
    reload 重启服务(平滑重启) 强制断开没有数据传输的链接 提高用户感觉

    nfs客户端详细配置说明

    挂载命令:

    mount -t nfs 172.16.1.31:/data  /mnt

    如何实现自动挂载:

  4. 利用rc.local
    echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
    #文件要有执行权限
  5. 利用fstab文件
    vim /etc/fstab
    172.16.1.31:/data /mnt nfs defaults 0 0
    #实现fstab文件挂载自动加载nfs存储目录 必须让remote-fs.target服务开机自启
    #centos7  必须启动   remote-fs.target 
    #centos6  必须启动   netfs

    客户端如何卸载

umount -lf /mnt  
#-l  不退出挂载点目录进行卸载  
#-f  强制进行卸载操做
#PS:需求问题:如何找到一台服务器开机运行了哪些服务
ll /etc/systemd/system/multi-user.target.wants/

挂载参数

rw --- 实现挂载后挂载点目录可读可写 (默认)
ro --- 实现挂载后挂载点目录可读可写
suid --- 在共享目录中可让setuid权限位生效 (默认)
nosuid --- 在共享目录中可让setuid权限位失效 提供共享目录的安全性
exec --- 共享目录中的执行文件能够直接执行
noexec --- 共享目录中的执行文件能够没法直接执行 提供共享目录的安全性
auto --- 能够实现自动挂载 mount -a 实现加载fstab文件自动挂载
noauto --- 不能够实现自动挂载
nouser --- 禁止普通用户能够卸载挂载点设定此文件系统是否容许让普通用户使用 mount 执行实现挂载,默认是不容许(nouser),仅有 root 能够
user --- 容许普通用户能够卸载挂载点

挂载常见错误

ls: cannot open directory .: Stale file handle (文件句柄错误)
出现缘由: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,可是客户端仍是处于挂载状态
问题解决: 将和父级目录有关的全部挂载点所有卸载,从新挂载

Cannot register service: RPC: Unable to receive;
出现缘由: 服务启动顺序不正确
问题解决: 关闭全部服务,按顺序进行启动

出现挂载卡死状况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现缘由: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙

NFS服务挂载不上排查方法:

服务端进行排查:

  1. 检查nfs进程信息是否注册
    rpcinfo -p localhost/172.16.1.31
    问题缘由:
    服务启动顺序不对,没有启动nfs服务
  2. 检查有没有可用存储目录
    showmount -e 172.16.1.31
    问题缘由:
    配置文件编写有问题,重启nfs服务
  3. 在服务端进行挂载测试
    是否可以在存储目录中建立或删除数据

    客户端测试:

  4. 检查nfs进程信息是否注册
    rpcinfo -p localhost/172.16.1.31
    问题缘由:
    服务启动顺序不对,没有启动nfs服务
  5. 检查有没有可用存储目录showmount -e 172.16.1.31问题缘由: 配置文件编写有问题,重启nfs服务网络问题ping 172.16.1.31 telnet 172.16.1.31 111
相关文章
相关标签/搜索