Linux运维第三阶段(九)NFS

nfs

为方便文件有序管理,把磁盘disk空间在内核映射为一种软件结构,通过文件系统FS管理工具(mke2fs)将磁盘格式为某分区格式(ext4),则disk被分为元数据区和数据区

对硬件操作只有内核,函数调用(或过程调用,内核输出的函数read(),write())

一般讲,本地应用程序application实现某个操作,都是本地调用(本地的两个程序间或程序与内核间调用函数完成某种功能的过程)

作为程序员开发某种能与其它模块或其它组件交互的程序,只要其它组件提供了函数,就可与之交互,如shell中的函数就是本地过程调用(LPC,local procedure call)

程序员写的程序需要在两个主机间进行交互,完成程序协作,必须要完成在网络上是如何通信的机制,以web服务为例:客户端client本地程序所请求的内容在另一主机,浏览器browser初始化一个请求,自己定义向内核完成系统请求,由内核封装请求报文转给服务器端server-side,server-side通过内核中tcp/ip协议栈解码将请求转给httpd(http报文)

C/S,B/S,任何一个要通过网络完成client和server协调的应用程序,client要能处理网络请求的机制,server必须能提供解决网络请求的机制(browser:http://IP:port/RESOURCES)

FS本身只是一个内核模块,不具备网络功能,之所以mkdir/touch能完成在远端主机上操作,借助于其它网络功能(RPC,remote procedure call)将两个主机间建立起关联关系,而client和server并不能意识到它是工作在网络上的,整个过程隐藏于RPC背后的机制

client执行mkdir交至内核,内核发现要处理的设备并不是本地设备,于是将请求转给本地RPC-client(stub存根调用),而RPC-client请求RPC-server,RPC-server在它的本地将请求(RPC

-client和RPC-server在中间协调工作)转至相应程序,程序处理完又返回给RCP-server,若操作对象是FS,FS本身也需要某个程序监听在某个套接字socket上

程序员在开发client和server应用程序时不用考虑网络协议报文的封装,RPC在底层已完成此功能

RPC只是个框架,是种编程技术(可理解为协议),为多个不想开发网络功能的程序提供服务,简化分布式应用程序的开发,仅负责帮助封装网络报文,linux提供RPC服务的程序是portmap(111/tcp,111/udp)

注:http服务的程序(httpd,nginx,lighttpd),ftp服务的程序(vsftpd)

两种工作方式:

1、client(mkdir)-->RPC-client(stub)-->RPC-server-->portmap

2、client(mkdir)-->RPC-client(stub)-->RPC-server-->portmap

stub-->portmap(portmap会在RPC-server上注册它的端口,RPC-server接受请求并初始化请求,初始化完成后stub直接与相应应用程序联系完成数据传输,RPC仅完成初始化)

browser-->server(html格式)

NFS-client-->NFS-server

RPC:二进制格式;文本格式(XMLRPC,RPC基于http的实现,用http传输XML格式的报文,建立RPC数据交换通道,实现复杂)-->SOAP(simpleobject access protocol,轻量级的XMLRPC)

在本地主机两个进程间通信或进程与内核间通信,通过进程间通信机制(IPC机制或系统调用(函数调用,本地函数调用));在同一OS内部两个进程间数据交换,交换格式经内核协调后基于进程间通信就可完成数据交换(共享内存的进程间通信);两个进程工作在不同主机上,内核借助于另一应用程序(RPC-client-->RPC-server)交至另一主机的进程对象,处理完返回(RPC-server-->RPC-client)

NFS(network file system,SUN开发,既是文件系统也是协议;NFSv1仅在SUN内部用,目前最新NFSv4(redhat6),NFSv3(redhat5);验证机制简单,仅IP验证)

NFS在用户认证上的功能是薄弱的,NFS服务器仅根据IP来验证,client向nfs-sever说他是谁那他就是谁,NFS仅用在linux间内网共享文件上,不建议在互联网上使用

client-side的jerry(UID:510)在server-side上创建一文件,若server-side上并没有jerry这个用户,则文件的属主显示为jerry的UID号510;若server-side有jerry这个用户且UID与client-side的UID相同,则文件属主为jerry;若server-side端tom的UID与client-side jerry的UID相同,则文件属主显示为tom

#rpm -ql  nfs-utils(有这个包就可配置为nfs-server)

/usr/sbin/{rpc.mountd,rpc.nfsd}(核心程序,rpc.mountd实现server-side认证,认证通过,client拿着mountd给它的令牌找nftd建立通信)

/etc/rc.d/init.d/{nfs,nfslock,rpc*}(每个主机所持有的锁是在自己的内存中,是该主机内核所持有的锁;若由多个主机访问nfs-server,则由nfs服务提供锁,分布式文件锁)

#service portmap  status(确定portmap是运行的)

#service nfs  start(nfs启动会向portmap注册使用一堆端口,quotad,daemon,mountd)

#netstat -tunlp(111/tcp,111udp)

#rpcinfo -p  localhost(本机RPC程序监听的端口;其中nfsd注册使用的端口号固定不变2049/tcp,2049/udp;mountd和quotad注册的端口号每重启服务都变,向RPC服务注册,由portmap选取)

nfs三个进程:nfsd(主服务)、mountd(接受client挂载请求)、quotad(磁盘配额限定)

注:最好给mountd和quotad选取固定端口,否则若portmap随机选取了80或3306,其它服务将不能启动

#vim /etc/sysconfig/nfs

LOCKD_TCPPORT=

LOCKD_UDPPORT=

MOUNTD_PORT=

RQUOTAD_PORT=

#man exports

#vim /etc/exports

每一行包含一个共享出去的FS及哪些client能访问该FS,例如:

/PATH/TO/SOME_DIR  CLIENT_LIST(指定目录或分区    多个客户端可用空格分开)

每个客户端后必须跟一个小括号,里面定义了此客户的访问特性及访问权限,例如:

/var/shared   172.16.0.0/16(ro,async)  192.168.0.0/24(rw,sync)

FS导出属性 :ro,rw,sync,async,root_squash,all_squash,anonuid,anongid

async(一般使用异步)

root_squash(映射root为匿名账号,默认此项启用,root在NFS中自动转为anonymous,否则任何client端的root在服务器端导出的目录下都有管理员权限)

all_squash(所有账号都映射为匿名账号,最安全)

anonuid=#,anongid=#(These  options explicitly  set the uid and gid ofthe anonymous account.)

举例:挂载的所有用户都映射为指定设置

/var/shared  172.16.0.0/16(rw,all_squash,anonuid=510,anongid=510)

#showmount -a  NFS_SERVER(显示服务器上所有导出的FS及客户端的挂载记录)

#showmount -d  NFS_SERVER(服务器上导出的FS中被client挂载的记录)

#showmount -e  NFS_SERVER(查看指定服务器导出的各FS)

#mount -t  nfs  NFS_SERVER:/PATH/TO/SOME_EXPORT  /PATH/TO/SOME_HERE(客户端执行挂载)

#exportfs -arv(此句表示重新输出所有导出的目录,此操作用于/etc/exports文件更改后不用重启服务即可生效(防止已连接的client因重启服务导致断开);-a要与-r或-u同时使用,-a表示输出或取消输出所有导出的目录,-r表示reexport重新输出所有导出的目录,-u表示unexport取消输出导出的目录,-v显示详细信息verbose)

#exportfs -auv(此句表示取消导出所有目录)

#vim /etc/fstab

172.16.100.1:/var/shared   /mnt/nfs    nfs   defaults,_rnetdev   0   0

注:_rnetdev表示开机自动挂载时,若能挂载上则挂载,否则跳过

==================================================================

nfs服务端可通过编辑/etc/exports导出共享的目录,也可通过命令exportfs,如

[root@test-master ~]# man exportfs

NAME

exportfs - maintain table of exported NFS file systems

SYNOPSIS

/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]

/usr/sbin/exportfs -r [-v]

/usr/sbin/exportfs [-av] -u [client:/path ..]

/usr/sbin/exportfs [-v]

/usr/sbin/exportfs -f

方法一:

[root@test-master ~]# exportfs -o rw,sync,all_squash,anonuid=65534,anongid=65534,mp,fsid=210.96.20.0/24:/drbd

方法二:

[root@test-master ~]# vim /etc/exports

/drbd  10.96.20.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534,mp,fsid=2)

[root@test-master ~]# exportfs -arv

exporting 10.96.20.0/24:/drbd

无论使用哪种方式都会将设置的内容保存到/var/lib/nfs/etab中,该文件被nfs client的rpc.mountd进程使用(rhel5中client挂载使用后的状态在nfs server-side是保存在/var/lib/nfs/rmtab这个文件中,而到rhel6中此文件不再保存client状态)

[root@test-master ~]# cat /var/lib/nfs/etab

/drbd 10.96.20.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,fsid=2,mountpoint,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)

linux分区方案 arv,Linux运维 第三阶段 (九)NFS相关推荐

  1. Linux运维 第三阶段 (二) DHCP

    Linux运维 第三阶段 (二) DHCP服务 dhcp(dynamic host configuration protocol) 前期bootp(无盘工作站)-->dhcp(引入租约lease ...

  2. Linux运维 第三阶段 (十八) varnish

    Linux运维 第三阶段 (十八) varnish 数据: 结构化数据,RDBMS: 非结构化数据,FS,存海量小文件,NAS.SAN.DFS可提供较好的性能: web cache: 程序具有局部性( ...

  3. Linux运维 第三阶段 (一) 网络配置及openssl加密

    Linux运维 第三阶段 (一) 网络配置及openssl加密 主机接入网络:IP,netmask,gateway,hostname,DNS1,DNS2,DNS3,route,dhcp(dynamic ...

  4. linux分区方案 500g,Linux分区方案最节省的分区方案

    想知道到Linux分区方案的真相么,想知道Linux分区方案中藏有的内在奥义么,只有我来给大家全面讲解介绍Linux分区方案 ***Linux分区方案 我的服务器是500G.最重要的是/var分区一定 ...

  5. linux分区方案 1t,linux CentOS WEB服务器分区方案

    分区类型 分区的实际大小 解析 SWAP分区 2G (内存为1G,一般为内存的2倍) / 1G-2G (最少要150–250MB) /boot 32M-100M (启动分区,最多只要100M左右) / ...

  6. linux分区方案 500g,linux系统分区建议

    linux系统分区建议 linux系统中对于怎么分区现在做一个小的经验总结. 可以大致把服务器用途分为三类:虚拟空间服务器.大型系统服务器.常规服务器. 由于这三种服务器的主要应用场景和功能不同所以针 ...

  7. Linux运维 第三阶段 (五) DNS(主从,rndc远程控制,子域授权,视图,压力测试)

    一.相关概念: DNS(domain name server),软件bind(berkleyinternet name domain),由www.isc.org维护(internetsystems c ...

  8. linux分区方案6,linux (centos 6.4)安装自定义分区方案(转载)

    css的命名规则 本文转载自谈笑涧 操作系统版本:Windows 7 浏览器版本:IE6,IE7,IE8,Firefox 3.6.2,Safari 4.0.4,Chrome 5.0.35 ... 三元 ...

  9. linux分区方案探讨

    Linux分区方案深度讨论 2010-03-01 16:38 佚名 51CTO 我要评论(0) 字号:T | T Linux学习肯定会首先遇到安装的问题,在系统安装时不可避免地会涉及到Linux分区方 ...

最新文章

  1. Android零基础入门第25节:最简单最常用的LinearLayout线性布局
  2. Spark性能相关参数配置详解
  3. Java演示手机发送短信验证码功能实现
  4. matlab如何求矩阵的转置矩阵,怎么用MATLAB程序求转置矩阵?急需,高手帮忙………………...
  5. 企业数字化转型:数字化江湖的六大门派
  6. 第一个python解释器哪年问世_Python即Python解释器的发展史
  7. 微软power bi_Microsoft Power Platform快速概述
  8. 解决办法:无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
  9. IP协议与MAC地址详解
  10. RS232串口与RS485串口的区别
  11. Robotframework之下拉列表select
  12. actions的使用详解
  13. 跳一跳python源码下载_微信跳一跳游戏python脚本
  14. Heartbeat 与Corosync对比分析
  15. QT 使用QZXing生成,解析二维码跟条码
  16. 名帖367 邓文原 章草《临皇象急就章》
  17. webrtc在服务器端通信协议,一种基于WebRTC通信的Web协议WebTorrent
  18. matlab 图像仿射做差分,基于MATLAB的等差分纬线多圆锥投影变换
  19. Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法
  20. [react] 《深入浅出React和Redux》 读书笔记

热门文章

  1. php 的cookie设置时间,php cookie时间设置的方法
  2. python中intersection用法_Python Set intersection() 方法
  3. 雷达的正交波形设计matlab源码,雷达系统设计MATLAB仿真
  4. 计算机操作员高级工试题一,计算机操作员高级工操作题复习资料
  5. uniapp 表单提交图片跟其他填写数据_记录第一次实现表单数据提交到数据库
  6. fastjson中@JSONType的使用-排除字段
  7. js中判断数组中是否包含某元素的方法
  8. MYSQL8.0 排序查询报错 this is incompatible with sql_mode=only_full_group_by
  9. Android开发笔记(一百七十六)借助FileProvider发送彩信
  10. ORACLE虚拟索引(Virtual Index)