一. NFS简介
 
NFS---Network File System:主要功能是通过网络让不同的linux主机系统间可以彼此共享文件和目录。NFS客户端可以通过挂载的方式将NFS服务器端共享的数据文件目录挂载到NFS客户端本地系统中
注意:NFS是应用在内网的,没有外部IP地址,安全性还是有保证的
 
NFS支持的功能很多,不同的功能就要使用不同的程序来启动,每个程序都要有一些端口与之对应来传送数据,因此,NFS功能所对应的端口不能固定,而是随机取用一些没被使用的端口,因为端口不固定,那么NFS客户端和服务端就会有通信障碍,因为客户端需要知道服务端的数据传输端口才能通信,交互数据。
既然NFS在传输数据的时候使用的端口是随机选择的,那么NFS客户端是怎么知道NFS服务端使用的是哪个端口呢?是通过RPC(remote procedure call)协议/服务来实现的,在大型网站,如淘宝,百度要用RFC;
 
RPC主要功能:记录每个NFS功能对应的端口号,并且在客户端请求时将端口号和对应的功能发送回客户端,从而保证客户端连接到正确的端口。
 
 
 
二. 安装NFS相关软件,然后启动服务
 
1. 安装
yum install nfs-utils rpcbind -y   #在客户端和服务端都要安装
rpm -aq nfs-utils  rpcbind  #检查是否安装成功
 
2. 启动
 
服务端,执行如下命令
service rpcbind start    #启动RPC
rpcinfo -p localhost    # 查看本机的rpc有没房源 (相当于房屋中介),localhost为本机的IP地址;rpc服务对外使用111端口,如果rcp服务没开,会显示错误异常
service nfs start       #启动NFS,再用rpcinfo -p locallost命令查看输出信息,对比一下没启动nfs服务前的信息。
chkconfig nfs on 
chkconfig rpcbind on  #设置nfs, rpc为开机自启动  
 
客户端
只需要启动rpc服务:/etc/init.d/rpcbind start;   检查启动状态:/etc/init.d/rpcbind status
开机启动rpc服务: chkconfig rpcbind on;           检查状态: chkconfig --list rpcbind
注意:cenos7中这样的启动,检查命令无效,可以用上面的service命令,或者systemctl
 
 
 
三.  配置NFS
首先在服务端进行配置,NFS的配置文件:/etc/exports;默认为空
假设在服务端创建一个 data目录来让客户端共享使用:mkdir /data
 
1. 配置/etc/exports
/data 10.0.0.0/24(rw,sync)
10.0.0.0/24是允许/data目录被共享的网段,也可以只写一个IP地址,表示只允许这个主机有访问权限;
rw表示以读写权限来访问data共享目录,ro表示只读权限,
sync表示数据直接同步到磁盘,async表示先暂时写入缓存中,不是直接写入磁盘,可以提高性能;
no_root_squash表示root用户具有完全的管理权限;
no_all_squash表示保留共享文件的UID和GID,此项是默认不写也可以;
 
2. 重启nfs服务
/etc/init.d/nfs reload (centos6) 或者 systemctl restart nfs.service(centos7)
说明:
reload表示平滑重启,等当前的服务结束后再重启,可以增强用户体验,等价于exportfs -r;而restart是强制性的立即重启
如果想刷新配置使生效,而不重启,可执行命令:exportfs -a
 
3. 检查是否可以共享
服务端执行:showmount -e localhost
客户端执行:showmount -e 10.0.0.7(服务端地址)
假设在客户端不显示内容,检查问题方法是先ping 10.0.0.7看是否通,然后telnet 10.0.0.7 111看能否连接上server
 
4. 挂载目录
客户端挂载服务端data目录到本机的/mnt目录,使用df -h查看挂载信息。
mount -t nfs 10.0.0.7:/data /mnt
然后在客户端进入/mnt目录就可以随意读取服务端data目录的数据了
 
5. 解决写操作问题
写操作的时候会出现权限的问题,在服务端 ll /data -ld 发现data目录对其他人来说不可写,怎么办?
方法一:把服务端的data目录权限改成777后就可以在客户端进行写操作了
 
方法二:貌似只能在centos6中使用,操作如下(了解就好)
在客户端使用ls -l 查看共享文档的时候,会发现文件所属是nfsnobody,那么这个用户名能否改呢?
在服务端 cat /var/lib/nfs/etab,来查看nfs的默认用户
使用命令 grep 65534 /etc/passwd来查看65534对应的用户是谁
 

所以另外一种客户端可以进行写操作的方法是chown -R nfsnobody:nfsnobody /data;  使用ls -ld /data来检查。

6. 永久挂载
客户端重启后挂载就会消失,解决方法如下:
echo "mount -t nfs 10.0.0.7:/data /mnt" >> /etc/rc.local  在mount前也可以加/bin/试试
NFS文件最好不要放到fstab文件中,因为fstab优先于网络启动,此时还连不上NFS服务端

四. export常用参数说明

 
man exports查看
同步(sync):发送端等待接收端接收,只有接受完,才断开连接。就是等数据写到磁盘中,才告知客户端数据写成功。
 
异步(async):发送端不等待接收端接受,数据发送到一个指定的地方就不管是否接收了。一个例子是选择异步时,客户端在写数据时,不用把数据写入到磁盘中,而是保存在缓存中就告知客户端数据已写入,优点是快,缺点是如果这个时候服务端重启,数据就丢失了,所以不太可靠
异步的另外一个例子,淘宝双11活动,搞秒杀抢货,就需要用到异步。此时客户端就是咱老百姓,一秒钟可能会有数百万的请求发起,淘宝服务端不可能一秒内同步处理这么多的数据,那么就用异步的方法慢慢消化,比如一秒有100万的客户端请求,而服务端1秒只有50万的处理能力,那么这些剩余的请求就只能排着队慢慢处理。
 
all_squash:不管访问NFS Server共享目录的用户身份是什么,它的权限都被设为匿名用户的权限,并且UID,GID设为noboby或者nfsnobody. 目的是用户不管是通过A1服务器还是A2服务器访问共享目录,都能有相同的权限处理数据;在多个NFS客户端同时读写NFS Server数据时,这个参数很有用。
 
 
注意:经验证,NFS貌似不能部署在版本不同的系统上,我在centos6和7上实验不成功。

centos下部署NFS的更多相关文章

  1. Linux CentOS下部署Java Web项目

    本文讲解如何在Linux CentOS下部署Java Web项目的步骤. 一.环境准备: (1)Linux CentOS (2)apache-tomcat-9.0.10 (3)XShell 二.启动t ...

  2. java部署系列:CentOS下部署Java7/Java8

    一.前言 1.本文主要内容 CentOS下部署OracleJDK CentOS下部署OpenJDK 2.适用范围与本篇环境 适用范围 1.CentOS 6+2.Java 7+ 本篇环境 1.CentO ...

  3. Centos下部署Flask

    尝试在Centos6.5下部署Flask应用并成功,记录一下步骤,参数为什么这样配置还需要再研究uwsgi和Nginx才能回答. Python版本升级2.7 测试机器centos6.5默认自带的pyt ...

  4. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  5. LINUX 系统下部署 NFS服务

    NFS服务 NFS,是Network File System的简写,即网络文件系统.也被称为NFS: NFS允许一个系统在网络上与他人共享目录和文件. NFS通常运行于2049端口. 部署NFS 前提 ...

  6. Centos下部署DRBD+NFS+Keepalived高可用环境记录

    使用NFS服务器(比如图片业务),一台为主,一台为备.通常主到备的数据同步是通过rsync来做(可以结合inotify做实时同步).由于NFS服务是存在单点的,出于对业务在线率和数据安全的保障,可以采 ...

  7. 【服务器】CentOS下部署运行NodeJs Web App

    NodeJs Web App测试完成后,要怎么部署呢?介绍两个不错的方案 已知以下情景: 我要为 「kenniu」这个项目做配置 它的入口文件在 「/path/to/entry.js」 运行的User ...

  8. 在centos下部署docker内网私服

    Docker内网私服:docker-registry with nginx & ssl on centos docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已 ...

  9. centos下部署NTP时间服务器同步环境记录

    1)服务端部署 安装所需软件包 [root@test ~]# yum -y install ntp ntpdate 服务端自己先手工同步一次时间. [root@test ~]# ntpdate ntp ...

随机推荐

  1. book pile SGU - 271

    有n本书从上到下摞在一起,有两种操作.ADD(C)表示把一本新书C放到这一摞书的最顶上,ROTATE表示将前K本书进行反转.在一系列操作后输出最后书的顺序 分析: 当时听别人讲这个题的时候很懵逼,后来 ...

  2. VMWare windows找不到microsoft软件许可条款

    提示如下错误: windows找不到microsoft软件许可条款.请确保安装源有效,然后重新启动安装. 解决方案: 把该虚拟机中的系统硬件配置中的软盘去掉. 程序员的基础教程:菜鸟程序员

  3. catkin_make与gtest出现冲突的问题与解决

    gtest是测试时调用的,把测试禁止掉试试 catkin_make --pkg pkgname -DCATKIN_ENABLE_TESTING=0

  4. leetcode - database - 177. Nth Highest Salary (Oracle)

    题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...

  5. Docker for mac安装

    Mac安装Docker docker下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac docker for m ...

  6. ServletRequest面试题

    使用request获得请求行:String getmethod():获得请求的资源:String getcontextpath():----web应用名称request是一个域对象request完成请 ...

  7. MySQL InnoDB的一些参数说明

    参考:http://addls.com/mysql-innodb-%E4%B9%8B-ibdata1-%E7%98%A6%E8%BA%AB%E5%A4%A7%E6%B3%95.html # 备份数据库 ...

  8. C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享

    下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...

  9. 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无 ...

  10. ERROR: from PIL import Image ImportError: No module named PIL

    ERROR: from PIL import Image ImportError: No module named PIL 到 http://www.pythonware.com/products/p ...