NFS服务器_weixin_30699235的博客-程序员秘密

技术标签: 网络  操作系统  数据库  

一、NFS是个啥,工作机制

它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。

NFS一般用来存储共享视频,图片等静态数据。

NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。

RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。

 

提示:在启动NFS SERVER之前,首先要启动RPC服务,否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reload或exportfs –rv即可使修改的/etc/exports生效。

 

《客户端NFS和服务端NFS通讯过程》

1)首先服务器端启动RPC服务,并开启111端口

2)启动NFS服务,并向RPC注册端口信息

3)客户端启动RPC,向服务端的RPC服务请求服务端的NFS端口

4)服务端的RPC服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

 

 

二、NFS部署

1、查看系统版本等参数,服务器版本

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[[email protected] ~]# uname -r
3.10.0-327.el7.x86_64
[[email protected] ~]# 

2、两个安装NFS服务软件包的方法

1)[[email protected] ~]# yum groupinstall "NFS file server" -y

2)yum install -y nfs-utils rpcbind

3、启动NFS服务(server端)

1)先启用rpc服务
[[email protected] ~]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]


2)查看服务端的开启的中间服务
[[email protected] ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper


3)启动NFS服务,如果直接启动NFS服务会失败。
[[email protected] ~]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
                                                           [  OK  ]
Starting NFS daemon: rpc.nfsd: address family inet6 not supported by protocol TCP
                                                           [  OK  ]
Starting RPC idmapd:                                       [  OK  ]


4)当开启NFS服务的时候再查看服务端的开启的中间服务,会发现多了很多服务和端口
[[email protected] ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  46787  mountd
    100005    1   tcp  48141  mountd
    100005    2   udp  51029  mountd
    100005    2   tcp  34046  mountd
    100005    3   udp  54267  mountd
    100005    3   tcp  33692  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  49372  nlockmgr
    100021    3   udp  49372  nlockmgr
    100021    4   udp  49372  nlockmgr
    100021    1   tcp  33433  nlockmgr
    100021    3   tcp  33433  nlockmgr
    100021    4   tcp  33433  nlockmgr
[[email protected] ~]# 

5)设置开机启动
[[email protected] ~]# chkconfig rpcbind on
[[email protected] ~]# chkconfig nfs on

4、client端只需要启动RPC服务

[[email protected] ~]# /etc/init.d/rpcbind start
[[email protected] ~]# /etc/init.d/rpcbind status
rpcbind (pid  18859) is running...

[[email protected] ~]# chkconfig rpcbind on

5、NFS的配置文件,在server上

1)[[email protected] ~]# cat /etc/exports 
##test for rpc and nfs
/data 192.168.222.0/24(rw,sync)                    如果这边是ro,就是read only

依次是,共享/data目录,仅仅192.168.222.0/24此网段的主机可以访问,,具有读写权限,将buffer中数据库同步到硬盘上也就是不在内存之中

2)平滑重启
/etc/init.d/nfs reload
如果此时正在使用,那就继续使用,如果没有使用的就不可以使用了

3)查看是否可以共享(服务端检查)
showmount -e localhost

(NFS服务器)
[[email protected] ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/data 10.0.0.0/24

(客户端)
showmount -e 服务端的ip地址(服务端检查)
[[email protected] ~]# showmount -e 192.168.222.140
Export list for 192.168.222.140:
/data 192.168.222.0/24

6、在客户端挂在共享的目录,/data是共享目录,/mnt是挂在在本地的目录,这个是临时挂在,重启之后就没了,然后要在/etc/fstab下面挂载或者在rc.local里面开机启动执行

[[email protected] ~]# mount -t nfs 192.168.222.140:/data /mnt
[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_weiwei-lv_root
                       18G  5.1G   12G  31% /
tmpfs                 932M   80K  932M   1% /dev/shm
/dev/sda1             477M   43M  410M  10% /boot
/dev/sr0              1.9G  1.9G     0 100% /media/CentOS-6.7-x86_64-LiveDVD
192.168.222.140:/data
                       17G  2.4G   14G  16% /mnt
[[email protected] ~]# 


[[email protected] ~]# cd /mnt
[[email protected] mnt]# ls
a.txt
[[email protected] mnt]# cat a.txt 
niamadafjoiewfwe
[[email protected] mnt]# 


###挂载,两种方式
/etc/fstab
192.168.222.140:/data   /mnt                    ext4    defaults        0 0

/etc/rc.local
mount -t nfs 192.168.222.140:/data /mnt 

a、/etc/rc.local里面

  缺点:偶尔开机挂载不上,工作中除了开机自启动配置,对挂载点监控。

b、/etc/fstab里面

  缺点:NFS网络文件系统不要放到fstab。

    1、fstab优先于网络启动。此时还连不上NFS服务器端。

    2、即使是本地文件系统,也要注意,fstab最后两列,要设置 0 0 ,否则导致无法启动服务器的问题。

7、此时读是同步了,但是如果我想写却出现了问题

[[email protected] mnt]# touch b.txt
touch: cannot touch `b.txt': Permission denied
[[email protected] mnt]# 


此时就要去服务器上去看看共享目录的其他用户的权限,此时的用户是nfsnobody
[[email protected] /]# ls -l data
total 4
-rw-r--r--. 1 root root 17 Aug 14 07:00 a.txt

[[email protected] /]# chmod -R 777 data			此时就可以了


查看其他用户
[[email protected] ~]# cat /var/lib/nfs/etab 
/data	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

  

可以参考:http://atong.blog.51cto.com/2393905/1343950 

 

 

例题:

实现当多台客户端同时挂载一台NFS SERVER时,无论从哪个客户端写入数据,其他客户端同样也可以读写,即让所有NFS客户端写入到NFS SERVER的文件或目录在NFS SERVER上的用户和组都是同一个名称oldgirl。

下面只有简述过程,相当于优化

1、服务端和客户端都创建oldgirl用户,客户端和服务器的uid和gid都要同步,,共享用户

[[email protected] ~]# id oldgirl
uid=555(oldgirl) gid=555(oldgirl) groups=555(oldgirl)
[[email protected] ~]# 

[[email protected] ~]# id oldgirl
uid=555(oldgirl) gid=555(oldgirl) groups=555(oldgirl)
[[email protected] ~]# 

2、配置文件

[[email protected] ~]# vim /etc/exports

##test for rpc and nfs
##/data 192.168.222.0/24(rw,sync)
/data 192.168.222.0/24(rw,sync,all_squash,anonuid=555,anongid=555)           将所有的用户都压缩成oldgirl

配NFS生产重要技巧
1、确保所有服务器对NFS共享目录具备相同的权限
  a.all_squash把所有客户端都压缩成匿名用户。
  b.就是anonuid,anongid指定的UID和GID的用户。
2、所有的客户端和服务端都需要有一个相同的UID和GID的用户,及nfsnobody(UID必须相同)

3、生效

[[email protected] ~]# systemctl reload nfs
[[email protected] ~]# cat /var/lib/nfs/etab 
/data	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=555,anongid=555,sec=sys,rw,secure,root_squash,all_squash)

4、设置/data文件的用户和组

[[email protected] /]# chown -R oldgirl.oldgirl data

 

 unmount -lf /mnt,,,此时就在挂载的目录,然后卸载挂载目录

===============================================mount参数的优化,高并发,读写数据块。

客户端安全优化的参数用的较多的:nosuid,noexec,nodev,rw

mount -t nfs -o nosuid,noexec,nodev,rw ********:/data    /mnt

服务器端性能优化的参数用的较多的:sync

客户端的性能优化:noatime.nodiratime(高并发的环境)

[[email protected] ~]# cat /proc/mounts
……

192.168.222.140:/data/ /mnt nfs4 (协议越新,性能越高)rw,relatime,vers=4,rsize=262144,wsize=262144(这个目前完善的很不错),namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.222.138,minorversion=0,local_lock=none,addr=192.168.222.140 0 0

 

noatime:

当文件被创建,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操作频繁时,记录文件最近一次被读取的时间信息,将是一笔不少的开销。所以,为了提高系统的性能,我们可以在读取文件时不修改文件的atime属性。可以通过在加载文件系统时使用notime选项来做到这一点。当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。由于写操作相对读来说要更消耗系统资源,所以这样设置可以明显提高服务器的性能。

nodiratime:

Do not update directory inode access times on this filesystem.

 


 

NFS官方优化可以修改,官方建议  内核优化
[[email protected] ~]# cat /proc/sys/net/core/rmem_default    //该文件指定了接收套接字缓冲区大小的缺省值(单位字节)
212992
[[email protected] ~]# cat /proc/sys/net/core/rmem_max       //该文件指定了接收套接字缓冲区大小的最大值(单位字节)
212992

可以将数值改大
echo 262144 >/proc/sys/net/core/rmem_default


[[email protected] ~]# cat /proc/sys/net/core/wmem_default    //发送
212992
[[email protected] ~]# cat /proc/sys/net/core/wmem_max 
212992

  

通过命令行来修改共享目录

exportfs -o rw,sync,all_squash,anonuid=555,anongid=555 192.168.222.0/24:/data

  

[[email protected] ~]# cd /var/lib/nfs/
[[email protected] nfs]# ls
etab  export-lock  nfsdcltrack  rmtab  rpc_pipefs  statd  state  v4recovery  xtab
[[email protected] nfs]# cat etab   //查看默认参数
/data	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=555,anongid=555,sec=sys,rw,secure,root_squash,all_squash)

[[email protected] ~]# cat /etc/exports   //这个是配置的参数
##test for rpc and nfs
##/data 192.168.222.0/24(rw,sync)
/data 192.168.222.0/24(rw,sync,all_squash,anonuid=555,anongid=555)

  

mount -a 用来检测挂载是否正确

 

[[email protected] ~]# cat /proc/mounts
//查看详细的挂载参数(文件系统),包括未显示的重要的挂载项.如:/dev/pts

转载于:https://www.cnblogs.com/bill2014/p/7360608.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30699235/article/details/95661594

智能推荐

2015 年蓝桥杯C++B组国赛 密文搜索_Qingo呀的博客-程序员秘密

标题:密文搜索福尔摩斯从X星收到一份资料,全部是小写字母组成。他的助手提供了另一份资料:许多长度为8的密码列表。福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。数据格式:输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024紧接着一行是一个整数n,表示以下有n行密码...

Python爬取ALIEXPRESS电商网站_一超S的博客-程序员秘密_速卖通爬虫

首先,这里使用的是简单的方法——“requests”模块。这种方法适合初学者使用,如果你想挑战更高级别的你可以自学scrapy爬虫框架,里面有一个“crawlscrapy”分支更是强大;下面就简单的介绍一下爬取这个电商网站。主要还是知道大概的流程之后写爬虫就很简单了。可能在写完爬虫代码运行一小段后会出现让你登录的情况,这个你可以手动登录,也可以使用python支持的自动点击模块pyautogui...

浅谈Struts2与Webwork的不同和相同点_Hustudent20080101的博客-程序员秘密_webwork和struts2

浅谈Struts2与Webwork的不同和相同点2011-06-28 09:14 honeymoose OSS社区 字号:T |T本文介绍的两大开发框架,Struts 2和WebWork。希望能够给你带来帮助,一起来看。AD:51CTO网+ 首届中国APP创新评选大赛>>Struts 2是Struts的下一代产品。是在

小学计算机课程科学与计算机,浅谈小学科学与信息技术的整合_诡道荒行的博客-程序员秘密

浅谈小学科学与信息技术的整合世界科学技术正在发生新的重大突破,以信息技术和生命科学为代表的现代科技突飞猛进。人们面临着以教育信息化带动教育的现代化实现基础教育跨越式发展的机遇,国家基础教育课程改革纲要(试行)指出:“教学过程中要大力推进信息技术在教学中的普遍应用,促进信息技术与学科课程整合,逐步实现教学内容呈现方式、学生学习的方式、教师教学方式和师生互动方式的改革,充分发挥信息技术的优势,为学生的...

发布源码及依赖到网络maven仓库_chichou9946的博客-程序员秘密

目的: 通过eclipse工具,使用maven命令,将maven工程编译后的jar、源码、依赖环境,都发布到网络maven仓库; 方便其他工程引用,查看源码,及自动下载依赖环境; maven关键命令 deploy -- 发布到远程仓库 ...

matlab 二进制写入文件,在Matlab中读取/写入二进制文件_花菌子的博客-程序员秘密

如Bill the Lizard所写,您可以使用fread将数据加载到向量中.我只想扩大一点他的答案.阅读数据>> fid=fopen('data.bin','rb') % opens the file for reading>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them ...

随便推点

BZOJ4552 - [TJOI2016]排序_ayw1069的博客-程序员秘密

PortalDescription给出一个\(1..n(n\leq10^5)\)的排列,进行\(m(m\leq10^5)\)次操作:升序排列\([L,R]\)中的数。降序排列\([L,R]\)中的数。所有操作完成后,求位置\(q\)上的值。Solution居然是二分答案...!对于可能的答案\(x\),将所有小于\(x\)的数视为\(0\),大于等于\(x\)的数视为...

WINDOWS环境下CloudCompare2.11.3+VS2019+QT5.15+cmake配置错误解决方案_Echo_Echo_.的博客-程序员秘密

WINDOWS环境下CloudCompare2.11.3+VS2019+QT5.15+cmake配置错误解决方案今天在用cmake编译CloudCompare2.11.3时,出现了一个问题点击configure后一直报如下的错误:解决方案:在CloudCompare2.11.3的安装路径下新建文件夹命名为prefix,然后在cmake编译界面找到CMAKE下的CMAKE_INSTALL_PREFIX。如图所示,将刚刚新建的文件夹路径添加进入再次configure就能.

面试官:说一下公平锁和非公平锁的区别?_程序猿微刊的博客-程序员秘密

前言上次我们提到了乐观锁和悲观锁,那我们知道锁的类型还有很多种,我们今天简单聊一下,公平锁和非公平锁两口子,以及他们在我们代码中的实践。正文开始聊之前,我先大概说一下他们两者的定义,帮大家回顾或者认识一下。公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多...

【ESP32】【ESP32-PICO 系列】_iMr_Stone的博客-程序员秘密_esp32 pico

ESP32-PICO-D4ESP32 系统级封装 (SiP),3.3V 4 MB flash,无内置 PSRAM,双核 MCU,Wi-Fi & 蓝牙双模工作电压 3.0 ~ 3.6VLGA48-pin,7x7x0.94 mm–40 °C ~ +85 °C有以下几点需要注意:嵌入式 flash 连接至 VDD_SDIO,由 VDD3P3_RTC 通过约 6 Ω 电阻直接供电。因此,VDD_SDIO 相对 VDD3P3_RTC会有一定电压降IO16、IO17、CMD、CLK、S.

量子计算机的定义,量子信息的基本概念_weixin_39927799的博客-程序员秘密

《量子信息的基本概念》由会员分享,可在线阅读,更多相关《量子信息的基本概念(35页珍藏版)》请在人人文库网上搜索。1、Chapter One Ocean University of China Content: 量子信息简介量子信息简介 1.1 量子隐形传态量子隐形传态 1.5 量子克隆量子克隆 1.4 量子计算量子计算 1.3 量子比特量子比特 1.2 量子算法量子算法 1.6 Ocean Un...

推荐文章

热门文章

相关标签