文件系统NFS

文件系统

reiserfs
    大量小文件业务首选reiserfs(几十到上百K)

xfs
    数据库MySQL业务,门户案例

ext4
    视频下载,流媒体,数据库,小文件业务也OK

ext2(数据恢复困难)
    蓝汛的cache业务,CDN网站加速服务

ext3(centos5.x的默认文件系统)
    日志功能,常规应用

jfs

Centos5.x常规选用ext3文件系统
Centos6.x常规选用ext4文件系统
xfs,reiserfs这两个文件都需要单独安装,默认不支持,维护可能不方便

文件系统选择

维护成本
性能
可靠

NFS服务端

1.打印系统版本
    cat /etc/redhat-release
    uname -r
    uname -m

2.检查并安装NFS服务
    rpm -aq nfs-utils portmap rpcbind
    LANG=EN
    yum grouplist
    yum install nfs-utils rpcbind -y
    rpm -aq nfs-utils portmap rpcbind

3.启动RPC服务
    /etc/init.d/rpcbind start
    ps -ef | grep rpc
    /etc/init.d/rpcbind status
    rpcinfo -p localhost

4.NFS服务
    /etc/init.d/nfs start
    rpcinfo -p localhost

5.设置开机自启动
    chkconfig nfs on
    chkconfig rpcbind on

6.检查开机自启动
    chkconfig --list nfs
    chkconfig --list rpcbind

7.配置共享数据目录
    vim /etc/exports
    添加如下内容:
        /data 10.0.0.0/24(rw,sync)
    cat /etc/exports

8.创建共享目录
    mkdir /data
    chown -R nfsnobody.nfsnobody /data

9.加载NFS
    /etc/init.d/nfs reload
    showmount -e localhost

NFS客户端

1.检查系统版本
    hostname nfsclient
    uname -r
    uname -m

2.安装rpc服务
    rpm -aq nfs-utils portmap rpcbind
    yum groupinstall "NFS file server" -y
    rpm -aq nfs-utils portmap rpcbind

3.启动rpc服务
    /etc/init.d/rpcbind start
    /etc/init.d/rpcbind status

4.设置开机自启动
    chkconfig rpcbind
    chkconfig --list rpcbind

5.检查服务端的NFS
    showmount -e 10.0.0.7

    故障排查:
        ping 10.0.0.7
        telnet 10.0.0.7 111

6.挂载
    mount -t nfs 10.0.0.7:/data /mnt

7.测试
    可以创建删除编辑文件,看是否同步

8.卸载
    umount /mnt                 注意要不要在/mnt目录下,否则需要强制卸载:umount -lf /mnt

服务及进程说明

nfsd(rpc.nfsd)              管理NFS客户端是否能够登入NFS服务端主机,包含登入者的ID判别
mountd(rpc.mountd)          管理NFS文件系统,当NFS客户端顺利通过rpc.nfsd登入NFS服务端之后,在它使用NFS服务器数据之前,与NFS配置文件/etc/exports进行对比权限,验证完成后,还会和服务端本地的文件系统的使用权限进行认证.
lockd(rpc.lockd)            锁定文件,进行并发控制

NFS配置文件路径

/etc/exports                NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为空,以行为单位   eg:/data1/ 172.16.17.0/24(rw,async) *(ro)
/usr/sbin/exportfs          NFS服务管理命令. eg:exportfs -r == /etc/init.d/nfs reload
/usr/sbin/showmount         在客户端产看NFS配置及挂载结果的命令
/var/lib/nfs/etab           NFS配置文件的完整参数设定的文件
/var/lib/nfs/xtab           记录NFS挂载过的客户端的信息

配置文件书写

/data 10.0.0.0/24(rw,sync)              -- 挂载/data目录到10.0.0的网段,改网段的所有机器都具有读写权限
10.0.0.30                               单个机器可以访问
10.0.0.0/24                             整个网段都可以访问
10.0.0.*                                整个网段都可以访问
rw                                      读写权限
ro                                      只读权限
sync                                    同步请求或写入数据
async                                   异步请求或写入数据
no_root_squash                          如果访问者是root的话,对共享目录具有root权限
root_squash                             访问者是root的话,权限压缩成匿名用户,同时UID和GID都以nobody或nfsnobody的账号身份
all_squash                              所有访问者,权限都被压缩成匿名用户的权限
anonuid                                 所有的匿名用户它的UID的值通常为nobody或nfsnobody的UID值.
anongid                                 所有的匿名用户它的GID的值通常为nobody或nfsnobody的GID值.

查看挂载参数

grep mnt /proc/mounts

挂载参数

安全优化
    nosuid,noexec              不能在共享目录执行脚本,包括脚本,程序命令,二进制程序(不限制指定解释器执行,例如:sh /mnt/demo.sh这样的形式执行)
    mount -t nfs -o nosuid,noexec,rw 10.0.0.7:/data /mnt

性能优化
    rsize                       设置单次读取文件的大小
    wsize                       设置单词写入文件的大小
    noatime                     不设置文件的修改时间
    nodiratime                  不设置目录的修改时间
    mount -t nfs -o rsize=1024,wsize=1024,noexec,rw 10.0.0.7:/data /mnt

测试命令
    time dd if=/dev/zero of=/mnt/testfile bs=9k count=20000

内核优化
    查看:
    cat /proc/sys/net/core/rmem_default                     接收套接字缓冲区大小的缺省值
    cat /proc/sys/net/core/rmem_max                         接收套接字缓冲区大小的最大值

    设置:
    echo 8388608 /proc/sys/net/core/rmem_default
    echo 16777216 /proc/sys/net/core/rmem_max
    或者:
    vim /etc/sysctl.conf
    net.core.wmem_default = 8388608                         发送套接字缓冲区大小的缺省值
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216                            发送套接字缓冲区大小的最大值

    查看结果:
    sysctl -p

NFS共享存储优化

1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好
2.服务器端/data 10.0.0.0/24(rw,async,all_squash,async,anonuid=555,anongid=555参数设置)
3.客户端挂载:rsize,wsize,noatime,nodirtime,nosuid,noexec,soft(hard,intr)

NFS故障

showmount -e                           报错:clnt_create: RPC: Program not registered                                                     原因:在服务器端查看挂载情况,应该在客户端查看挂载情况
shoymount -e 10.0.0.7                  报错:clnt_create: RPC: Port mapper failure - Unable to receive: errno 111(Connection refused)     原因:rpc服务没起来
先
mount -t nfs 10.0.0.7:/data /data      报错:mount.nfs:access denied by server while mounting 10.0.0.7:/data/
再
showmount -e                           报错:clnt_create: RPC: Program not registered
判断nfs未注册,先启动rpc再启动nfs

NFS优点

简单,容易上手,容易掌握,数据在文件系统之上的
方便,快速部署,维护简单
可靠,从软件层面来看,数据可靠性高,经久耐用
稳定

NFS缺点

存在单点故障
在高并发场景中,NFS效率性有限(2千万一下pv/天没有问题)
客户端认证时基于ip和主机名,权限根据IP识别,安全性一般
NFS数据是明文的,对数据完整性不做验证
多台机器挂载NFS服务器时,连接管理维护麻烦(可用autofs解决)

配置autofs

yum install autofs
vim /etc/auto.master
/misc   /etc/auto.misc                                      ----- 这里设置的是挂载目录

vim /etc/auto.misc
nfsdata         -fstype=nfs             172.16.17.11:/data1 ----- 这里设置的是挂载目录下的文件夹
坚持原创技术分享,您的支持将鼓励我继续创作!