文件系统
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 ----- 这里设置的是挂载目录下的文件夹