首页 > 代码库 > 文件共享之nfs
文件共享之nfs
在服务器共享中常用的服务有:
ftp服务器端:linux windows 客户端:linux windows 范围:内网 外网
nfs服务器端:linux客户端:linux范围:内网 外网
samba服务器端:linux windows 客户端:linux windows范围:内网
文件系统:
文件系统是对一个存储设备上的数据和元素进行组织的一种机制
nfs作用:共享存储,保证数据一致性
优点:简单,容易上手,数据是在文件系统之上的
2方便,部署快速,维护简单
3可靠,从软件层面上,数据可靠性高,经久耐用
局限;
1存在单点故障,要用负载均衡高可用方案弥补
2在高并发的场合,nfs效率性有效,一般几千万pv的网站都不是瓶颈
3客户端认证事基于ip和主机名的,安全性一般
4nfs数据是明文的,对数据完整性不作验证
5多台机器挂载nfs服务器时候,链接管理维护麻烦,尤其nfs服务端出问题后,所有客户端都挂载状态
etc/exports文件配置格式
nfs共享目录 nfs客户端地址1(参数1,参数2....)客户端地址2(参数1..参数2)
nfs一定要用绝对路径,注意权限,nfs地址可以是单独ip,网段,域名,也可以用*匹配
同步:发送端等待接收端收到消息后才会锻掉
异步:发送端不会等接收端来接收,生产中必须用到的,门户网站中必须用到
配dfs生产重要技巧
1确保所有服务器对nfs共享目录具备相同的权限
a all——squash把所有客户端都压缩成匿名用户
b所有的客户端和服务端都需要有一个相同的uid和gid ,即nfsnobody
实现多台客户端同时候挂一台server端,server用户和组都是同一个名称lushneg,操作步骤
1建立一个nfs共享用户,所有机器都存在并且uid gid相同
2cat >>/etc/exports <<eof
/tmp/data 172.16.10.0/24(rw,sync,all_squash,anonuid=555,anongid=555)
3showmount -e 172.16.10.10
df -h
mount -t nfs 172.16.10.10:/tmp/data /mnt/data
挂载开机自启动:
echo "/bin/mount -t nfs 172.16.10.10:/tmp/data mnt/data" >>/etc/rc.local
缺点:偶尔开机挂载不上,工作中除了开机自启动配置,对挂载点监控
nfs网络文件系统不要放到fstab里
1fstab优先于网络启动,此时还连不上nfs服务器
2即使是本地文件系统,也要注意,那么客户端开机后可能会导致无法启动的风险,fstab最后
两列,要设置0 0,否则会有导致无法启动服务器的问题
nfs rpc服务的启动命令和挂载命令都放入/etc/rc.local.然后用监控软件监控开机后的状态
经验:为什么要把所有开机当做服务器的档案,所有服务器启动配置都放在档案里,做好注释,
或者写好启动脚本都用chkconfig管理
现实生活中太多这多没交接好,根本就不知道这台电脑是做什么用的,连重启都不敢,更别说更改了
fstab修改错误导致系统无法启动故障修复案例
维护模式
mount -o rw,remount
然后修改/etc/fstab
实际挂载优化
mount -t nfs -o noatime,nodiratime,nosuid,noexec 172.16.10.10:/tmp/data /mnt/data
非性能参数越多,速度会越慢
需要退出挂载目录在进行卸载,或者是nfs server宕机了,需要强制卸载 mount -lf/mnt/dev
故障解决步骤
1)服务端一定要开启两个服务 rpc ,nfs
2)客户端一定要开启rpc服务
nfs 至少启动两个进程,一个rpc服务,一个nfs服务
1)先开启rpc服务(中介)
2)再启动nfs服务,启动后会向rpc服务注册启动的端口(房源)
3)客户向rpc请求nfs服务
4)rpc返回端口给租客
5)拿着地址端口请求传输数据
Nfs实操演示
服务端环境准备
nfsserver 172.16.10.10
nfsclient 172.16.10.20
服务端和客户端都要安装
nfs服务需要安装下面的软件包
nfs-utils portmap rpcbind
写文档一定要有这几步基本信息
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.5 (Final) 操作系统版本信息
[root@localhost ~]# uname -r\
[root@localhost ~]# uname -r 内核版本信息
2.6.32-431.el6.x86_64
[root@localhost ~]# uname -m
x86_64
[root@localhost ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-1.2.3-39.el6.x86_64
如果没有,yum -y install nfs-utils rpcbind
服务端操作:
[root@localhost ~]# /etc/init.d/rpcbind start
[root@localhost ~]# ps -ef |grep rpc
rpc 977 1 0 Mar26 ? 00:00:00 rpcbind
rpcuser 995 1 0 Mar26 ? 00:00:00 rpc.statd
root 2167 2115 0 02:52 pts/0 00:00:00 grep rpc
[root@localhost ~]# rpcinfo -p localhost //查看rpc有无房源
[root@localhost ~]# /etc/init.d/nfs start //相当于向中介提供房源
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd:
#设nfs rpc为开机自启动,设置好之后记得检查开机自启动状态
[root@localhost ~]# chkconfig nfs on
[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# chkconfig --list nfs
nfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@localhost ~]# chkconfig --list rpcbind
rpcbind 0:关闭 1:关闭 2:启用 3:启用 4:启用 5
客户端操作,只需要启动rpc服务即可
[root@localhost ~]# /etc/init.d/rpcbind start
[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# chkconfig --list nfs
nfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
sync表示把数据从缓存写到磁盘里面 async数据写入到缓存
服务端操作配置服务
[root@server ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 1月 12 2010 /etc/exports
[root@server ~]# cat /etc/exports
[root@server ~]# mkdir /data //创建共享目录
[root@server ~]# vim /etc/exports //编辑配置文件,往里面写配置
#shared data for bbs luliechu at 20170327 //这一行注释
/data 172.16.10.0/24(rw,sync)
data表示要共享的目录 172.16.10.0表示可以访问的网段 rw读写 sync表示把数据从缓存写到磁盘里面
[root@server ~]# cat /etc/exports //检查
#shared data for bbs luliechu at 20170327
/data 172.16.10.0/24(rw,sync)
[root@server ~]# /etc/init.d/nfs reload //配置完配置文件后平滑重启(提高用户体验)nfs服务
[root@server ~]# showmount -e localhost //在本机上检查是否共享出来
Export list for localhost:
/data 172.16.10.0/24 //表示共享成功
在客户端上检查
[root@server ~]# showmount -e 172.16.10.10 //在本机上检查是否共享出来
Export list for localhost:
/data 172.16.10.0/24 //表示共享成功
然后挂载
df -h 检查有哪些磁盘挂载了
mount -t nfs 172.16.10.10:/data /mnt //挂载 ,当然于Windows的磁盘映射
df -h 检查有哪些磁盘挂载了
注意本地目录权限也要可写可读才能真正可读可写
服务端上操作:
[root@localhost ~]# cat /var/lib/nfs/etab //查看这个文件可以看到nfs用户id号
/data 172.16.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
[root@localhost ~]# grep 65534 /etc/passwd //查看对应id号的用户名
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@localhost ~]# ls -ld /data //查看共享目录权限
drwxr-xr-x. 2 root root 4096 3月 28 06:13 /data
[root@localhost ~]# chown nfsnobody -R /data //属于属于nfsnobpdy,让远端用户可写
[root@localhost ~]# ls -ld /data
drwxr-xr-x. 2 nfsnobody root 4096 3月 28 06:13 /data
测试效果:
[root@server ~]# ls /data
test1 test3 北大青鸟第2章学习资料
test2 北大青鸟第1章学习资料 北大青鸟第3章学习资料
[root@server ~]#
[root@client ~]# ls /mnt
test1 test3 北大青鸟第2章学习资料
test2 北大青鸟第1章学习资料 北大青鸟第3章学习资料
--end--
本文出自 “快乐学习” 博客,请务必保留此出处http://983865387.blog.51cto.com/9838888/1917718
文件共享之nfs