zoukankan      html  css  js  c++  java
  • 第09章文件系统选型-NFS网络文件及排错

    第09章文件系统选型及NFS网络文件

    9.1文件系统知识详解

    9.1.1什么是文件系统

           文件系统是对一个存储设备上的数据和元数据进行组织的一种机制。文件系统是在一个磁盘或分区上的组织文件方式的方法,是组织储存文件或者数据的方式,目的是易于查询和存储数据,因此,如果磁盘上没有文件系统也就无法储存数据,再磁盘分区后能够使用之前必须建立对应的文件系统才行。

           文件系统是基于存储设备的,比如硬盘或者光盘,并且包含文件物理位置的维护,文件系统也可以说是虚拟数据或者网络数据的存储方法。

    文件系统的分区格式创建文件系统才能存放数据,不同的分区。

          Linux下常见的文件系统ext2,ext3,ext4,zfs,xfs和Reiserfs.

          Windows下常见的NTFS,FAT32

    9.1.2文件系统选型简单介绍

    1)SAS/SATA硬件文件系统选择:

    Reiserfs 大量小文件业务首选reiserfs

    Xfs 数据库业务。

    xt4 视频下载,流媒体,数据库,小文件业务选择。

    Ext2 蓝汛的cache业务,cdn网站加速业务,有缓存,没有日志,所以可以用。

    9.2NFS的介绍

    什么是NFS?NFS是Network File System的缩写,他的主要功能是通过网络让不同的主机系统之间乐意彼此共享文件或者目录,NFS客户端(一般为应用服务器,如web)可以通过挂载的方式将NFS服务器共享的数据文件目录挂载在NFS客户端本地系统中(股灾在某个点上。)从NFS客户端的机器本地来看,NFS服务器端共享的目录就好像客户端自己的磁盘分区者目录一样,而实际上是远程的服务器目录。

    9.2.1NFS在企业中的应用场景

    在企业中群架构的工作背景中,NFS网络文件系统一般被用来存储共享文件视频,图片等附件动静态资源文件。

    NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型企业公司应用频率很高,大公司或者门户除了使用NFS外,还会使用MFS,GFS,FASTFS,TFS等文件分布式文件系统。

    为什么要需要NFS?

     

    9.2.2NFS服务的工作原理

    1)NFS的挂载原理

       挂载的格式: mount 源 目标

       挂载NFS  :mount 192.168.1.15:/video /video   (192.168.1.15为nfs server的ip地址)

    查看(df-h)

     

    2)      NFS使用的端口和RPC(Remote Procedure Call)服务

    经过前面的介绍,我妈知道NFS系统是通过网络来进行数据数据传输的,因此,NFS需要使用一些端口来传输数据,接下来是NFS使用的端口。

    NFS传输的端口是不固定的,就会导致客户端无法知道哪个端口是传输NFS的,所以NFS出现一个RPC服务。

    NFS的RPC服务最主要的功能是记录每个NFS功能所对应的信息传递给请求数据的NFS客户端,从而可以确保客户端可以连接到正确的NFS端口上去,达到实现传输交互数据的目的,RPC服务类似于NFS服务和NFS客户端之间的一个中介。

     

     

    9.2.3NFS配置

    1.环境准备:

    NFS server (192.168.170.133)与 NFS client(192.168.170.134) 两台服务器

     

    申明版本号

    [root@server ~]# cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)
    [root@server ~]# uname -r
    3.10.0-327.el7.x86_64
    [root@server ~]# uname -m
    x86_64

    2.NFS需要的软件包

    l   Nfs-utils:NFS服务主程序

    包括rpc.nfsd,rpc.mountd两个daemons和相关文档说明及执行命令文件等。

    l  Rpcbind

    NFS可以作为一个RPC的程序,在启动任何一个RPC程序前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind做的。,因此,在提供NFS服务之前必须先启动portmap服务

    3. NFS软件包(两台都要安装)

    [root@server ~]# rpm -aq nfs-utils portmap rpcbind     è查看是否安装
    [root@server ~]#  

    我们来用yum进行安装一下

    [root@server ~]# yum groupinstall "NFS file server" -y    è安装组包
    

      

    指定组中没有可安装或升级的软件包 (我这里无法安装组包,换下一个方法)

    [root@server ~]# yum install nfs-utils rpcbind -y         è安装
    [root@server ~]# rpm -aq nfs-utils portmap rpcbind     è检查安装成功
    rpcbind-0.2.0-48.el7.x86_64
    nfs-utils-1.3.0-0.65.el7.x86_64

      

    4.服务端的配置

    重启服务器后进行检查

    [root@server ~]# ps -ef|grep rpc
    root        987      2  0 03:32 ?        00:00:00 [rpciod]
    rpc        1009      1  0 03:32 ?        00:00:00 /sbin/rpcbind -w
    root       2836   2813  0 03:35 pts/0    00:00:00 grep --color=auto rpc
    [root@server ~]# service rpcbind restart  è启动rpc服务
    [root@server ~]# rpcinfo -p localhost   è查看本机的IP地址有没有房源
       program vers proto   port  service
        100000    4   tcp    111  portmapper  è对外使用111房源(端口),只有自己,无房源
        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
    [root@server ~]# systemctl stop rpcbind.socket  è立即关闭rcp服务
    [root@server ~]# rpcinfo -p localhost          è检查rcp服务是否开启
    rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
    [root@server ~]# service nfs restart            è启动nfs服务
    Redirecting to /bin/systemctl restart  nfs.service
    [root@server ~]# 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  47566  status
        100024    1   tcp  58747  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  46284  nlockmgr
        100021    3   udp  46284  nlockmgr
        100021    4   udp  46284  nlockmgr
        100021    1   tcp  58986  nlockmgr
        100021    3   tcp  58986  nlockmgr
    100021    4   tcp  58986  nlockmgr
    1. 设置两个服务为开机自启动并检查
    [root@server /]# systemctl enable rpcbind.service  è开机自启动rpcbind
    [root@server /]# systemctl enable nfs-server.service è开机自启动nfs

    检查有三种方法(以nfs为例)

    1、通过进程查看nfs服务是否运行

    1

    2

    ps -aux|grep -v grep|grep nfs 或者ps -ef|grep nfsd

    #有该进程即为开启状态

    2、通过命令查看nfs服务的状态

    1

    /etc/init.d/nfs status

    3、chkconfig命令查询系统服务

    1

    chkconfig --list nfs

    4、systemctl status nfs-server.service

    [root@server /]# ps -ef|grep nfsd             è用第一种方法检测nfs
    root       3348      2  0 04:19 ?        00:00:00 [nfsd4]
    root       3349      2  0 04:19 ?        00:00:00 [nfsd4_callbacks]
    root       3355      2  0 04:19 ?        00:00:00 [nfsd]
    root       3356      2  0 04:19 ?        00:00:00 [nfsd]
    root       3357      2  0 04:19 ?        00:00:00 [nfsd]
    root       3358      2  0 04:19 ?        00:00:00 [nfsd]
    root       3359      2  0 04:19 ?        00:00:00 [nfsd]
    root       3360      2  0 04:19 ?        00:00:00 [nfsd]
    root       3361      2  0 04:19 ?        00:00:00 [nfsd]
    root       3362      2  0 04:19 ?        00:00:00 [nfsd]
    root       4745   2813  0 04:28 pts/0    00:00:00 grep --color=auto nfsd
       [root@server /]# systemctl status rpcbind.service   è用第四种检测rpcbbind
    ● rpcbind.service - RPC bind service
       Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
       Active: active (running) since 六 2019-09-28 03:48:08 CST; 29min ago
     Main PID: 2996 (rpcbind)
       CGroup: /system.slice/rpcbind.service
               └─2996 /sbin/rpcbind -w
     
    9月 28 03:48:08 server systemd[1]: Stopped RPC bind service.
    9月 28 03:48:08 server systemd[1]: Starting RPC bind service...
    9月 28 03:48:08 server systemd[1]: Started RPC bind service.
    1. 客户端配置
    [root@client ~]# systemctl start rpcbind è启动rpcbind服务
    [root@client ~]# systemctl status rpcbind è检查rpcbind是否开启
    ● rpcbind.service - RPC bind service
       Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
       Active: active (running) since 六 2019-09-28 03:13:49 CST; 1h 29min ago
     Main PID: 2940 (rpcbind)
       CGroup: /system.slice/rpcbind.service
               └─2940 /sbin/rpcbind -w
     
    9月 28 03:13:49 client systemd[1]: Starting RPC bind service...
    9月 28 03:13:49 client systemd[1]: Started RPC bind service.
    [root@client ~]#  
    1. 配置服务(服务端)
    [root@server /]# ll /etc/exports  è查看配置文件
    -rw-r--r--. 1 root root 0 6月   7 2013 /etc/exports
    [root@server /]# cat  /etc/exports è默认为空
    [root@server /]# mkdir /data   è创建共享/data目录,要将目录共享给客户端
    mkdir: 无法创建目录"/data": 文件已存在
               [root@server /]# cat /etc/exports è将共享文件写入目录
    #shared data for bbs by server at 20190927 è注释,好习惯
    /data 192.0.0.0/24(rw,sync)        è共享目录 共享的网段(权限,写入磁盘)
    //rw为读和写,没有x权限 ro为只读,这里为rw
    systemctl restart/reload nfs.service     è重启服务
    [root@server /]# showmount -e localhost  è本机检查是否可以共享
    Export list for localhost:
    /data 192.0.0.0/24
     [root@client ~]#  showmount -e 192.168.170.133

    得到错误提示为

    clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

    解决方法:

    查询发现有相关服务nfs和rpc-bind

    firewall-cmd --get-service | grep -E (nfs|rpc)

    故在防火墙对服务予以放行

    firewall-cmd --add-service=nfs
    firewall-cmd --add-service=rpc-bind

    在客户端再次尝试showmount命令得到不一样的错误提示

    rpc mount export: RPC: Unable to receive; errno = No route to host
    

    再使用firewall-cmd --get-service查询到预设服务中有mountd,在防火墙对其放行

    firewall-cmd --add-service=mountd

    至此问题解决

    [root@client ~]#  showmount -e 192.168.170.133
    Export list for 192.168.170.133:
    /data 192.0.0.0/24

    添加项目:其他报错

      clnt_create: RPC: Program not registered    è报错

    1. 检查是否能ping通
    [root@client ~]# ping 192.168.170.134
    PING 192.168.170.134 (192.168.170.134) 56(84) bytes of data.
    64 bytes from 192.168.170.134: icmp_seq=1 ttl=64 time=0.021 ms
    64 bytes from 192.168.170.134: icmp_seq=2 ttl=64 time=0.040 ms

           2.检查telnet

       

         [root@client ~]# telnet 192.168.170.134
    Trying 192.168.170.134...
    telnet: connect to address 192.168.170.134: Connection refused
    

      

    现在遇到的问题是telent失败,查询百度解决telnet: connect to address 127.0.0.1: Connection refused拒绝连接

    1、检查telnet是否已安装:

      rpm -qa telnet1
    

      

    没有输出则需要进行安装

    yum -y install telnet1
    

      

    2、检查telnet-server是否已安装:

    rpm -qa telnet-server1

    没有则进行安装

    yum -y install telnet-server1

    3、重新启动xinetd

    由于telnet服务是由xinetd守护的

    在这步时候,重启失败了,我找到了结绝重启xinetd失败的原因:

    1. CentOS7.0 telnet-server 启动的问题。
    解决方法:
        ①、先检查CentOS7.0是否已经安装以下两个安装包:telnet-server、xinetd。命令如下:

    [root@server ~]#  rpm -qa telnet-server
    [root@server ~]# rpm -qa xinetd

    没有安装,安装命令如下:

    [root@server ~]# yum list |grep telnet
    telnet.x86_64                 1:0.17-64.el7               @base    
    telnet-server.x86_64           1:0.17-64.el7              @base   
    [root@server ~]# yum install telnet.x86_64
    [root@server ~]# yum install telnet-server.x86_64
    [root@server ~]# yum list |grep xinetd
    xinetd.x86_64                2:2.3.15-13.el7            @base    
                      [root@server ~]# yum install xinetd.x86_64
    

      

                      安装完成后,将xinetd服务加入开机自启动,将telnet服务加入开机自启动: 最后,启动以上两个服务即可:

    [root@server ~]#  systemctl enable xinetd.service
    [root@server ~]#  systemctl enable telnet.socket
    [root@server ~]# systemctl start telnet.socket
    [root@server ~]# systemctl start xinetd
    [root@server ~]

    结果:解决成功

    [root@server ~]# service xinetd restart
    Redirecting to /bin/systemctl restart  xinetd.service

    4、查看xinetd的运行情况

    netstat -tnlp 1

    结果:

    [root@client ~]#  telnet 192.168.170.134
    Trying 192.168.170.134...
    Connected to 192.168.170.134.

     

    1. 挂载及查看成功
    [root@client ~]# mount -t nfs 192.168.170.133:/data /mnt

    CentOS7系统-服务(以NFS为例)开机启动/重启/查看状态

    第一、启动、终止、重启

    systemctl start nfs.service #启动

    systemctl stop nfs.service #停止

    systemctl restart nfs.service #重启

    第二、设置开机启动/关闭

    systemctl enable nfs.service #开机启动

    systemctl disable nfs.service #开机不启动

    第三、检查状态

    systemctl status nfs.service 

  • 相关阅读:
    CCF-CSP认证 C++题解目录
    LeetCode周赛#205
    LeetCode双周赛#34
    Codeforces Round #667 (Div. 3) B、C、D、E 题解
    Codeforces Round #656 (Div. 3) 题解
    牛客小白月赛#26 题解
    LeetCode周赛#204 题解
    LeetCode周赛#203 题解
    牛客小白月赛#27 题解
    N阶上楼梯问题——动态规划(递推求解)
  • 原文地址:https://www.cnblogs.com/hanjiali/p/11634048.html
Copyright © 2011-2022 走看看