搭建nfs共享(定时)存储服务

nfs:网络文件系统,主要功能是通过网络让不同主机之间可以共享文件或目录。数据重要,需要inotify+rsync实时备份。

NFS在传输数据时,使用的端口会随机选择。那么NFS客户端如何知道NFS服务端使用哪个端口呢?就是通过RPC(远程过程调用)协议来实现。

工作原理:

1、先启动RPC服务(rpcbind):rpc服务一定要在nfs服务之前启动

2、启动NFS服务

3、客户请求NFS服务

4、RPC返回端口到客户

5、客户拿着地址端口请求传输服务

一、nfs服务端配置

1、查看nfs和rpc的软件包是否安装

rpm -qa nfs-utils rpcbind
如果没有安装,vi /etc/yum.conf,把keepcache改成1,保留yum仓库
yum install nfs-utils rpcbind -y

2、启动rpc

/etc/init.d/rpcbind start
netstat -lntup|grep rpc
rpcinfo -p localhost  --查看有无nfs服务,确定有端口

3、启动nfs(主端口:2049) id nfsnobody

/etc/init.d/nfs start
rpcinfo -p localhost
若rpc服务关掉,执行rpcinfo -p localhost会报错

4、设置开机自启动

chkconfig nfs on
chkconfig rpcbind on
chkconfig --list rpcbind
chkconfig --list nfs
ls /etc/init.d/rc.d/rc3.d/|grep -E "nfs|rpc"  --查看启动顺序

 5、查看一下进程

ps -ef|egrep "rpc|nfs"

    服务的作用:

        1、rpc.statd --检查文件一致性

        2、rpc.rquotad --磁盘配额进程

        3、rpc.mountd --权限管理验证等

        4、nfsd --nfs主进程,管理登入、ID身份判别

        5、rpc.idmapd --名称映射

NFS服务端配置文件: /etc/exports (可通过man查看配置文件参数)

NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。

NFS客户端地址:这里所谓的客户端一般是前端的业务服务器,例如web服务。

权限参数集:对授权的NFS客户端的访问权限设置。

客户端地址

具体地址

说明

授权单一客户端访问NFS

10.0.0.30

一般情况,生产环境基本不用

授权整个网段可访问NFS

10.0.0.0/24

生产环境常见配置

/etc/exports配置说明:

1、创建/data
mkdir /data -p
2、改变属组,有写权限(必须授权)
chown -R nfsnobody:nfsnobody /data
3、编辑vi /etc/exports
#share /data by oldboy for kaifa at 20180925
/data 172.16.1.0/24(rw,sync)   加sync意思是直接写到磁盘,高并发用async(异步)
一定要是公司内网网段
4、重启nfs
/etc/init.d/nfs reload
相当于exportfs -rv,用于使加载的配置文件生效,还可管理当前NFS共享的文件系统目录列表
5、自我检测
showmount -e 172.16.1.31
如果屏幕输出出现/data 172.16.1.0/24,表示服务端配好了
也可以 mount -t nfs 172.16.1.31:/data /mnt,如果成功,证明服务端服务ok
记得卸载  umount /mnt 

 二、nfs客户端配置

检查系统版本:cat /etc/redhat-relese (uname -r)

1、首先安装服务

rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y

2、启动rpc,加入开机自启动

/etc/init.d/rpcbind start
chkconfig rpcbind on
chkconfig --list rpcbind

3、showmount -e 172.16.1.31

排错:

a、ping 172.16.1.31

b、telnet 172.16.1.31 111 --防火墙是否阻挡

4、挂载

mount -t nfs 172.16.1.31:/data /mnt
df -h  --检查挂载是否成功
cat /proc/mounts --查看挂载
挂载成功后,客户端的mnt目录和服务端的data目录同步共享。

5、放入rc.local,开机自启动

echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
tail -1 /etc/rc.local

三、生产中配置nfs的技巧

1、确保所有客户端服务器对NFS共享目录具备相同的用户访问权限

(客户端服务器用户uid相同,与服务端一致)

a、all_squash把所有客户端都压缩成固定的匿名用户(uid相同)

b、就是anonuid,anongid指定的uid和gid的用户

2、所有客户端和服务端都需要有一个相同的uid和gid的用户,即nfsnobody(uid必须相同)

了解--netfs服务开启后,可把它挂载到fstab文件里,正常挂载,否则不会成功

四、NFS客户端mount挂载深入

在NFS服务端通过cat /var/lib/nfs/etab查看NFS服务端配置参数的细节

在NFS客户端可以通过cat /proc/mounts 查看mount的挂载参数细节

如果追求挂载的性能,可以用如下参数

mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072,noexec,nosuid 10.0.0.7:/data/ /mnt

-noexec 不许执行 -nosuid 不加suid -fg 后台 -hard 响应延时 -instr 协助停止响应延时

-noatime 高并发时加此项,以提升I/O性能

##禁止更新目录及文件时间戳挂载,命令如下:

mount -t nfs -o noatime,nodiratime 10.0.0.7:/data /mnt

但是如果不考虑,选择默认值即可

mount -t nfs 10.0.0.7:/data/ /mnt

umount -lf /mnt --有suid时无法卸载,加lf可强制卸载

案例:

1、fstab修改错误导致系统无法启动故障

维护模式或救援模式:

mount -o rw,remount /

然后修改 /etc/fstab

2、文件系统只读故障修复(a、rsync的bug b、文件系统内部一致性导致)

维护模式或救援模式:

mount -o rw,remount /

1. 重启系统看是否可以自动修复。

2. 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)

    添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)

   (-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)

3. 如果fsck修复完成后,启动系统依然自读。

   查看分区结构:

   [root@localhost ~]# more /etc/fstab

   [root@localhost ~]# more /proc/mounts

   [root@localhost ~]# mount

   /dev/sda2 on / type ext3 (rw)

    proc on /proc type proc (rw)

   sysfs on /sys type sysfs (rw)

   查看ro挂载的分区,如果发现有ro,就重新mount

   umount /dev/sda1

   mount /dev/sda1 /boot

   如果发现有提示“device is busy”,找到是什么进程使得他busy(直接umount -lf)

   fuser -m /boot 将会显示使用这个模块的pid

   fuser -mk /boot 将会直接kill那个pid

   然后重新mount即可。

4. 直接remount

   [root@localhost ~]# mount -o rw,remount /dev/sda1

五、NFS内核优化建议

以下是优化选项说明:

/proc/sys/net/core/rmem_default:该文件指定了接收套接字缓冲区大小的默认值,默认设置:124928

/proc/sys/net/core/rmem_max:该文件指定了接收套接字缓冲区大小的最大值,默认设置:124928

/proc/sys/net/core/wmem_default:该文件指定了发送套接字缓冲区大小的默认值,默认设置:124928

/proc/sys/net/core/wmem_max:该文件指定了发送套接字缓冲区大小的最大值,默认设置:124928

上述文件对应的具体内核优化命令如下(服务器端):

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

企业生产场景NFS共享存储优化小节:

1、 硬件:sas/ssd硬盘,买多块,raid5/raid10.网卡吞吐量要大,至少千兆(多块bond)

2、NFS服务端配置:

/data 10.0.0.2(rw,sync,all_squash,anonuid=65534,anongid=65534)

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

mount -t nfs -o noexec,nosuid,nodev,noatime,nodiratime,rsize=131072,wsize=131072 10.0.0.7:/data/ /mnt --兼顾安全性能

4、对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生效

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

6、大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS(大片之类的大文件)、FastDFS

应用建议:

       大中小型网站(访问量2000万/日pv以下)线上应用,都可以。门户网站也有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存或者架构不好,存储服务器数量再多也扛不住,且用户体验很差。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值