NFS服务器故障排错日记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS服务器故障排错日记相关的知识,希望对你有一定的参考价值。

参考技术A 1.问题场景:

周末回来第一天上班,发现服务器被重启了,但是nfs文件挂载出现问题。具体表现如下:

1)在nfs客户端,挂载目录下不能ls或者ll;

2)输入strace dh -f 后,文件挂载状况不能全部显示,在某个挂载目录终止了。

2.解决问题的方法:

1)重启nfs服务器的服务(先启动rpcbind再启动nfs)

service rpcbind start(启动nfs服务)

service nfs start

2)查看nfs启动状态

# service rpcbind status

# service nfs status 

3) 查看nfs服务器上的可挂载共享目录

# showmount -e localhost    //默认查看自己共享的服务

4)在客户端启动rpc

# service rpcbind start

5)在客户端安装nfs相关软件,使用yast2

# yast2

6)在客户端查看服务器的可挂载目录

#showmount -e 服务器IP/域名

7)在客户端手动mount挂载

 mount 192.168.1.108:/opt/centos6/ /app/web/labs/nfs/

8)问题解决,共享目录挂载到客户端上

注意:1)nfs是依靠rpc来实现文件共享,所以启动服务的时候要先启动rpc,再启动nfs;

            2)nfs网路文件共享,需要先验证网络是否通畅,如果客户端与nfs服务器不通,nfs不生效。

            3)启动自动挂载nfs文件系统,在启动nfs服务的时候会自动加载/etc/fstab中的内容,如果有nfs相关,则自动挂载。

            # vi /etc/fstab

            格式:

            <server>:</remote/export> </local/directory> nfs < options> 0 0

            4)服务端口查看netstat

            5)测试挂载状况

               # strace df -h

            以上就是我nfs服务器挂掉后,重启、排查故障的相关内容,分享给大家

            

nfs存储

排错思路:

1.环境问题
    SElinux
    firewalld
    网络是否能通

2.配置问题    
    所有的故障只会出现在你曾经修改过的文件中
    /etc/rsyncd.conf
    /etc/rsyncd.password
         文件名不匹配
         语法问题
         权限问题
    掘地蜂

引出扩展:
一台Rsync服务端提供备份,并根据客户端提交备份校验,校验结果以邮件的方式通知管理员
一台Rsync客户端自己收集需要备份内容,通过定时任务定期推送至服务端
如果多加一台Rsync客户端,这时我们应该怎么做才能最高效

实现思路:
1.安装rsync
2.将客户端的备份脚本拉过来就可以了


1.NFS基础概述

NFS:Network File System 网络文件系统
     通过局域网络让不同的主机系统之间可以共享文件或目录
     主要实现Linux系统之间的文件共享(早期)
     

小文件存储系统:(Moosefs,FastDFS)
大文件存储系统:(glusterfs,HDFS)

文件系统:ext4 xfs

为什么要使用NFS服务器进行数据共享
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据的一致

 

2.NFS应用场景

场景1:

用户A上传一张图片至Web1服务器
B用户访问该图片时,B用户的访问请求被分发到了Web2上面,结果无法看到A用户上传的图片

技术图片

 

场景2:

用户A上传一张图片至Web1服务器,然后web1上传至共享服务器上面
B用户访问该图片时,无论B用户的访问请求被分发到了Web1或Web2上面,都能看到A用户上传的图片

技术图片

 

3.NFS实现原理

NFS守护进程
     RPC.nfsd
         守护进程,管理NFS服务     
     RPC.mount
         管理文件系统 

本地文件操作方式
1.当用户执行mkdir命令,该命令会通过shell解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。

NFS实现原理(需要先了解[程序|进程|线程])

1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS服务端
3.NFS服务端接收到请求后,辉县调用portmap进程进行端口映射
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务器
5.Rpc.mount进程判断客户端是否有对应的权限进行验证
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件

rpc是一个远程过程调用,那么使用nfs必须有rpc服务
pc过程调用

 

4.NFS服务实践部署

1).环境准备:
角色        外网IP(NAT)     内网IP(LAN)       主机名
Rsync服务端 eth0:10.0.1.51  eth1:172.16.1.51  backup 
Rsync客户端 eth0:10.0.1.41  eth1:172.16.1.41  nfs
防火墙、SElinux关闭

2).安装nfs
[root@nfs ~]# yum install -y nfs-utils rpcbind

3).配置
主配置文件/etc/exports,默认空
格式:
共享目录的路径 允许访问的NFS客户端(共享权限参数)

共享目录的路径:服务端本地目录路径
允许访问的客户端:ip或域名
    网段:172.16.1.0/24
    主机:172.16.1.41/32
    域名:*.oldboy.com
共享权限:
参数              参数作用
rw                读写权限  ***
ro                只读权限
root_squash       当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash    当NFS客户端以root管理员访问时,映射为NFS服务器的root用户
all_squash        无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 ***
sync              同时将数据写入到内存与硬盘中,保证不丢失数据 ***
async             优先将数据保存到内存,然后在写入硬盘,这样效率更高,但可能丢失数据
anonuid           配置all_squash使用,指定NFS的用户UID,必须存在系统 ***
anongid           配置all_squash使用,指定NFS的用户UID,必须存在系统 ***

参考写法:
/data 172.16.1.0/24(rw,sync,all_squash),0.0.0.0/0(ro)
/backup 172.16.1.41/32(rw)
/backup *.oldboyedu.com(rw)

[root@nfs ~]# echo "/data 172.16.1.0/24(rw,sync,all_squash)" > /etc/exports

4).创建相关环境
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data

5).启动服务
[root@nfs ~]# systemctl restart nfs-server rpcbind
[root@nfs ~]# systemctl status nfs-server rpcbind

6).验证是否生效
[root@nfs ~]# showmount -e
Export list for nfs:
/data 172.16.1.0/24

 

5.NFS客户端挂载

1)安装工具包
[root@backup ~]# yum install -y rpcbind nfs-utils

2)客户端使用showmount -e查看远程服务器rpc提供的可挂载nfs信息
[root@backup ~]# showmount -e 172.16.1.41
Export list for 172.16.1.41:
/data 172.16.1.0/24

如果本地hosts文件有解析记录,可以使用主机名查询
[root@backup ~]# showmount -e nfs
Export list for nfs:
/data 172.16.1.0/24

3)在NFS客户端创建一个挂载目录,然后使用mount命令挂载
mkdir /nfsdir
mount 172.16.1.31:/data /nfsdir

挂载前的目录权限
[root@backup ~]# ll -ld /nfsdir/
drwxr-xr-x 2 root root 6 1月  19 19:35 /nfsdir/
挂载后的目录权限
[root@backup ~]# mount 172.16.1.41:/data /nfsdir
[root@backup ~]# ll -ld /nfsdir/
drwxr-xr-x 2 nfsnobody nfsnobody 6 1月  19 19:04 /nfsdir/

注意:目录的共享权限与本地权限必须全部能读写,才能对目录里面内容进行操作


永久挂载:
chattr +a /etc/fstab
vim /etc/fstab
172.16.1.41:/data        /var/www/html          nfs     defaults        0 0 
echo "172.16.1.41:/data /var/www/html nfs defaults,_netdev  0 0" >> /etc/fstab  #注意用追加输出

[root@web01 html]# cat /etc/fstab 
....
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=19ad14dc-26ff-4b14-86e7-c4e2182e820a /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
172.16.1.41:/data        /var/www/html          nfs     defaults,_netdev       0 0  

出现网络故障时,强制卸载umount -lf

 

练习
1).环境准备:
角色 外网IP(NAT) 内网IP(LAN) 主机名
Rsync服务端 eth0:10.0.1.7 eth1:172.16.1.51 web01
Rsync服务端 eth0:10.0.1.8 eth1:172.16.1.51 web02
Rsync客户端 eth0:10.0.1.41 eth1:172.16.1.41 nfs
要求,访问web01,web02的页面是一样的,修改nfs的共享页面内容,两台web一致

 服务端:

1).安装nfs
[root@nfs ~]# yum install -y nfs-utils rpcbind

2).修改配置文件
echo "/data 172.16.1.0/24(rw,sync,all_squash)" > /etc/exports

3).创建目录,并修改所属
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data

4).启动服务
systemctl restart nfs-server rpcbind

5).使用showmount命令验证是否生效
[root@nfs ~]# showmount -e
Export list for nfs:
/data 172.16.1.0/24

 客户端:

1.部署apache,并启动apache服务
yum install -y httpd
systemctl start httpd

2.安装工具包nfs-utils,并启动rpcbind
yum install -y nfs-utils rpcbind
systemctl restart rpcbind

3.使用showmount -e 查看nfs服务端共享信息
showmount -e 172.16.1.41

4.挂载共享目录到网页文档根目录/var/www/html
mount 172.16.1.41:/data /var/www/html

5.验证
echo "hello wordasdasdas" > index.html
[root@web01 html]# curl 172.16.1.7
hello wordasdasdas
[root@web01 html]# curl 172.16.1.8
hello wordasdasdas

以上是关于NFS服务器故障排错日记的主要内容,如果未能解决你的问题,请参考以下文章

排错思路

centos7 DNS主从服务搭建及问题故障排错

SSH 远程连接原理及故障排错详解

nfs存储

NFS服务的简介及常见故障解决方法

集群实战NFS服务常见故障排查和解决方法