Day43-1-企业级网络存储NFS02

1. 查看NFS客户端挂载情况说明

/var/lib/nfs/rmtab	#客户端访问服务器exports的信息列表(CentOS6的位置)
(CentOS7的位置)
[root@nfs01 data1]# cat /var/lib/nfs/rmtab
10.0.0.7:/data1:0x00000001
10.0.0.8:/data1:0x00000001

cat /var/lib/nfs/rpc_pipefs/nfsd4_cb/clnt0/info 
cat /var/lib/nfs/rpc_pipefs/nfsd4_cb/clnt1/info 

[root@nfs01 data1]# cat /var/lib/nfs/rpc_pipefs/nfsd4_cb/clnt0/info
RPC server: 172.16.1.7
service: nfs4_cb (1073741824) version 1
address: 172.16.1.7
protocol: tcp
port: 0
[root@nfs01 data1]# cat /var/lib/nfs/rpc_pipefs/nfsd4_cb/clnt1/info
RPC server: 172.16.1.8
service: nfs4_cb (1073741824) version 1
address: 172.16.1.8
protocol: tcp
port: 0

2. NFS客户端mount挂载深入

nfs自动挂载:
方法1:

/etc/rc.local

方法2:

/etc/fstab(remote-fs服务)

方法3;_netdev

[root@web01 ~]# cat /etc/fstab 
# /etc/fstab
# Created by anaconda on Mon Mar  4 11:15:16 2019
UUID=3a3a295f-88f8-456d-94dc-1a3eeb517c02 /                       xfs     defaults        0 0
UUID=fd2e0ca7-32be-425f-86a2-85c02b9ec5ea /boot                   xfs     defaults        0 0
UUID=79a3924b-739e-48dc-ab0c-0444b9ac6591 swap                    swap    defaults        0 0
172.16.1.31:/data                         /data                   nfs     defaults,_netdev        0 0
172.16.1.31:/data                         /data                   nfs     defaults,_netdev        0	

man mount
_netdev
   The  filesystem  resides on a device that requires network access (used to prevent the  system from attempting to mount these filesystems until the network has  been  enabled  on the system).

默认挂载

mount -t nfs 172.16.1.31:/data /data

详细挂载情况:

[root@web02 ~]# grep data /proc/mounts 
172.16.1.31:/data /data nfs4 rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,local_lock=none,addr=172.16.1.31 0 0

查看mount挂载

cat /proc/mounts
df -h

3. mount -o的参数说明

  • async:涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但会降低数据安全。一般情况,生产环境不推荐使用。除非对性能要求很高,对数据可靠性不要求的场合※。
  • sync:该参数和async相反。有I/O操作时,都会同步处理I/O,即把数据同步写入硬盘。此参数会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性。
  • dirsync:目录更新时同步写入磁盘。
  • atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项。
  • noatime:访问文件时不更新文件的inode时间戳,高并发环境下,推荐显式应用该选项,可以提高系统I/O性能※。
  • nodiratime:不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能※。
  • ro:以只读的方式挂载一个文件系统。
  • rw:以可写的方式挂载一个文件系统。※
  • auto:能够被自动挂载通过-a选项。
  • noauto:不会自动挂载文件系统。
  • defaults:这是fstab里第四列挂载参数的默认值,包括rw、suid、 dev、 exec、 auto、 nouser、 and async,默认情况大部分都是默认值。
  • exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全。
  • noexec :在挂载的文件系统中不允许直接执行任何二进制的程序,注意,仅对二进制程序有效,即使设置了noexec、shell,php程序还是可以执行的※。
  • nosuid:不允许特殊权限suid和sgid位生效,提升安全※。
  • suid:允许suid和sgid位生效。
  • nouser:禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。
  • remount:尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变的可写,这个动作不会改变设备或者挂载点。当系统故障时进入single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。具体命令为:mount -o remount,rw /,表示将根文件系统重新挂载使得可写。single或rescue模式修复系统时这个命令十分重要※。

4. NFS客户端mount挂载优化

[root@web02 ~]# grep data /proc/mounts 
172.16.1.31:/data /data nfs4 rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,local_lock=none,addr=172.16.1.31 0 0

2)【安全优化】加【速度优化】的挂载方式如下:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=524288,wsize=524288 172.16.1.31:/data /mnt

[root@web02 ~]# mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=524288,wsize=524288 172.16.1.31:/data /mnt
[root@web02 ~]# grep mnt /proc/mounts 
172.16.1.31:/data /mnt nfs4 rw,nosuid,nodev,noexec,noatime,nodiratime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,local_lock=none,addr=172.16.1.31 0 0

以下是NFS网络文件系统优化挂载的参数建议。

在CentOS7.6 x86_64服务器端和客户端环境下,可使用如下命令参数:

mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=524288,wsize=524288  172.16.1.31:/data  /mnt
#######
mount -t nfs -o noatime,nosuid,noexec 172.16.1.31:/data  /mnt

注意:非性能的参数越多,速度可能会越慢。

5. NFS内核优化建议

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p

6. 企业生产场景NFS共享存储优化小结

  • 硬件:sas/ssd磁盘,买多块,硬件raid,制作raid5或raid10。网卡吞吐量要大,至少千兆(多块bond)。

  • NFS 服务器端指定特定 uid/gid 配置:/data
    172.16.1.0/24(rw,sync,all squash,anonuid=65534,anongid=65534)。所有访问 NFS 的客户端的进程的用户和 NFS 的用户 UD 相同。

  • NFS 客户端挂载优化配置命令:

    mount -t nfs o nosuid,noexec,noatime 172.16.1.31:/data/ /mnt
    
  • 对 NFS 服务的所有服务器内核进行优化时,执行如下命令:

    cat >>/etc/sysctl.conf<<EOF
    net.core.wmem default =8388608
    net.core.rmem default=8388608
    net.core.rmem max= 16777216
    net.core.wem max= 16777216
    EOF
    

    执行 sysctl -p 生效。

  • 如果卸载的时候提示“umount: /mnt: deviceis busy”,需要退出挂载目录在进行卸载,如果是 NFS Server 宕机了,则需要强制卸载,可执行 umount -lf /mnt。

  • 大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、FastDFS多用于网站共享存储等。GlusterFS、Ceph多用于云的底层存储,HDFS多用于大数据底层存储

  • 阿里云对应的存储服务 NAS 服务,还有 OSS 对象存储。

6.1 从集群架构上解决NFS性能压力方案

1.把【多个文件目录】分配到不同的NFS服务器上,相当于把NFS服务器拆分多台。
2.集群静态服务器弃用NFS方案(只有写挂载NFS,同步到静态服务器本地)。
3.使用分布式文件系统(例如:FastDFS、Mfs)。
4.内网搭建文件缓存服务(squid,nginx,varnish)。
5.使用CDN加速(分布式缓存)

重点见画图及讲解内容
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7. NFS服务端宕机后给NFS客户端带来的问题

前面已讲
多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其NFS服务端出问题后,所有 NFS 客户端都处于挂掉状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS 服务或强制卸载)。

1.NFS服务器宕机后,在客户端访问挂载点会处于挂掉状态,甚至早期系统执行ctrl+c都无法退出,对于Centos7客户端重启还可能无法启动,这个问题的解决方法有:
1)cat /proc/mounts 找到挂载点,然后执行 umount -lf /data 方式卸载即可。
2)在mount挂载时增加soft或者intr,解决不让客户端持续呼叫NFS服务器。
3)如果是fstab里实现的挂载则可在第四列defaults后面增加soft或者intr。

[root@web01 ~]# tail -2 /ete/fstab
172.16.1.31:/data            /data         nfs        defaults,soft       0 0
#172.16.1.31:/data           /data         nfs        defaults,intr       0 0

8. NFS Server端的防火墙(iptables)控制

真正企业生产环境的存储服务器都属于内网环境,无需防火墙,因此,可以不对其进行配置,如果要配置的话就有两种方法,任选其一即可。
方法一,仅允许内部 IP 段访问(最佳)

iptables -A INPUT -s 172.16.1.0/24 -j -ACCEPT

方法二,允许IP段加端口访问。

iptables -A INPUT -i ethl -p tcp -s 172.16.1.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -s 172.16.1.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i ethl -p udp -s 172.16.1.0/24 --dport 2049 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -s 172.16.1.0/24 -j ACCEPT

提示:即使是 Cent0s7,也建议读者使用 iptalbes,这样可以和6兼容,有关 Centos7 firewalld 防火墙,读者可以参考其他书籍或者老男孩新书。

9. NFS服务应用常见故障排查

故障 1:客户端挂载报错“No such file or directory“。

[root@web01 ~]# showount e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/16
[root@web0l ~]# mount -t nfs 172.16.1.31:/data /mnt
mount: 172.16.1.31:/data failed, reason given by server: No such file or directory

解答:原因是NFS服务端没有创建共享目录/data,创建即可。命令如下:

[root@nfs01 ~]# mkdir -p /data
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x. 2 nfsnobody nfsnobody 43 Apr 14 09:37 /data

故障 2:注册 RPC 服务失败,出现failed: RPC Error: Program notregistered 错误。

[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
mount: mount to NFS server '172.16.1.31’ failed: RPC Error: Program not registered

解答:服务端的 NFS没有启动,客户端没有收到服务端发来的随机端口信息。
解决方法如下:

[root@nfs01 ~]# systemctl restart rpcbind
[root@nfs01 ~]# systemctl restart nfs

故障 3:卸载挂载设备时显示 device is busy,或者执行 df -h 卡住。

[root@nfs-client mnt]# umount /mnt
umount:/mnt:device is busy
umount:/mnt:device is busy
[root@web01 ~]# df -h 

解答:有可能是当前目录就是挂载的nfs目录(/mnt),也有可能是nfs server 挂了。对于第一种情况,解决办法为退出挂载的目录/mnt,再执行 umount /mnt 卸载。

[root@web0l mnt]# cd ..
[root@web01 /]# umount /mnt

对于第二种情况,nfs server 挂了,nfs client 就会出问题(df-h 窗口会卡住),

[root@web01 ~]# umount -lf /mnt #<==其中的参数-f 为强制卸载 ,参数-1 为懒惰的卸载
[root@web01 ~]# df -h
文件系统       容量      已用      可用      已用%     挂载点
/dev/sda3     18G       2.1G      16G      12%       /
...省略若干...
tmpfs          98M      0         98M      0%        /run/user/0

10. NFS客户端自动挂载部署方法

11. 企业案例:Linux正在工作呢,突然文件系统只读。

企业生产案例文件系统只读故障/fstab故障。
1、救援模式修复。
2、单用户,mount -o remount,rw /

12)课后作业:项目实践Linux+Apache+PHP+NFS服务+Rsync备份服务集群实战:

老男孩Linux运维77期-LAPN(Linux+Apache+PHP+NFS)网盘【集群】项目案例实战
在这里插入图片描述

1.搭建Web服务(Linux+Apache+PHP)。
在这里插入图片描述
web01服务器操作:

1)创建用户
[root@web01 ~]#  groupadd -g 1111 www
[root@web01 ~]# useradd -u 1111 -g www www

2)安装apache+php软件
[root@web01 ~]#  yum install httpd php php-mbstring php-gd -y

3)修改httpd.conf的配置,将用户运行的进程修改为www
[root@web01 ~]# sed -i '/^User/c User www' /etc/httpd/conf/httpd.conf
[root@web01 ~]# sed -i '/^Group/c Group www' /etc/httpd/conf/httpd.conf
[root@web01 ~]# egrep -i "^user|^group" /etc/httpd/conf/httpd.conf
User www
Group www

4)重启Httpd进程
[root@web01 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# systemctl enable httpd
[root@web01 ~]# lsof -i :80

5)下载网盘软件代码
[root@web01 ~]#  cd /var/www/html/
[root@web01 html]# wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip
[root@web01 html]# unzip kodexplorer4.40.zip
[root@web01 html]# ls
app  ChangeLog.md  config  data  index.php  kodexplorer4.40.zip  plugins  README.MD  static
[root@web01 html]# chown -R www.www /var/www/html/
[root@web01 html]#  ls -ld /var/www/html/
drwxr-xr-x 7 www www 153 220 17:39 /var/www/html/

2.用无痕模式分别打开10.0.0.7 10.0.0.8进行设置

3.设置登陆密码,登录后创建文件夹上传测试数据,设置后退出。
web02同理

4.捕获上传的静态资源所存放的位置。

[root@web01 html]# ls /var/www/html/data/User/admin/home/
老男孩Linux77期视频

/var/www/html/data/User/admin/home/路径就是web服务器本地的挂载点

5.安装配置NFS服务。

1)安装nfs服务端
[root@nfs01 ~]# yum install nfs-utils rpcbind -y

2)启动nfs及rpcbind服务
[root@nfs01 ~]# systemctl restart rpcbind
[root@nfs01 ~]# systemctl restart nfs
[root@nfs01 ~]# systemctl enable nfs
[root@nfs01 ~]# systemctl enable rpcbind

3)检查服务启动是否OK
[root@nfs01 ~]# lsof -i :111
[root@nfs01 ~]# rpcinfo -p 127.0.0.1

4)配置nfs配置文件
[root@nfs01 ~]# tail -2 /etc/exports
#设置共享目录/data,为web01,02网盘项目
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
#重新加载NFS
[root@nfs01 ~]# exportfs -rv
#检查挂载
[root@nfs01 ~]# showmount -e 172.16.1.31

5)创建UID、GID为1111的用户(最好在前面操作)
[root@nfs01 ~]# groupadd -g 1111 www
[root@nfs01 ~]# useradd -u 1111 -g www www

6)创建对外共享的目录
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R www.www /data

6.web服务器挂载NFS,并且迁移数据

web01,web02:
1)安装并启动nfs
[root@web01 html]# yum install nfs-utils rpcbind -y
[root@web01 html]# systemctl restart rpcbind
[root@web01 html]# systemctl enable rpcbind
[root@web01 html]# showmount -e 172.16.1.31
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

解答:进入nfs01,然后关闭防火墙
[root@nfs01 ~]# systemctl stop firewalld
[root@nfs01 ~]# systemctl disable firewalld
[root@web01 html]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

2)迁移本地网站数据到nfs01服务器端/data目录
迁移数据:将数据迁移到nfs01 /data(web02不需要操作)
[root@web01 html]# rsync -avz /var/www/html/data/User/admin/home/ 172.16.1.31:/data/

3)将nfs01 /data挂载到web本地,挂载点为数据目录
mount -t nfs 172.16.1.31:/data /var/www/html/data/User/admin/home/

4)永久挂载
##方法1 写入/etc/rc.local
##方法2 写入/etc/fstab
[root@web01 html]# tail /etc/rc.local
mount -t nfs 172.16.1.31:/data /var/www/html/data/User/admin/home/

7.在nfs01 server上对迁移的数据授权

1)修改/data下面文件的权限
chown -R www.www /data/

8.此时打开10.0.0.8 测试
用无痕打开10.0.0.8(此次一定要无痕),登陆到后台(登陆账号默认:admin),如果能看到web01上传的数据,说明配置成功

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值