天天看点

文件共享之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服务即可

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

[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  //在本机上检查是否共享出来

然后挂载

df -h 检查有哪些磁盘挂载了

mount -t nfs 172.16.10.10:/data /mnt   //挂载  ,当然于Windows的磁盘映射

注意本地目录权限也要可写可读才能真正可读可写

服务端上操作:

[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

--end--

本文转自    探花无情   51CTO博客,原文链接:http://blog.51cto.com/983865387/1917718

继续阅读