#####################################
Local Procedure Call为开发带来的不便
Remote Procedure Call的引入
Network File System
NFS在LAMP架构下的应用
本地两个进程或进程和内核之间调用函数完成某种功能的过程叫做本地过程调用。
<a href="http://blog.51cto.com/attachment/201309/202804732.png"></a>
远程过程调用,不同主机上的两个进程直接依赖于二进制协议通信,它是编程技术及协议,简化分布式应用程序的开发,它一种开发框架,在这种框架下,程序员开发程序无需再考虑网络报文的封装,有RPC底层机制负责完成,RPC本身只是一种协议,它的实现是Portmap。
一、NFS简介
和ext3、ext2等一样,也位于内核空间作为内核模块工作的,它基于RPC基础实现,不同主机上的两个进程直接依赖于二进制协议通信,它可以让远程文件系统挂载到本地一个目录。nfs-utils是NFS的安装包,包含了三个主进程:
nfsd (文件传输主进程) 固定端口为TCP/UDP 2049端口
mountd (接收客户端挂载请求) 动态向portmap注册端口
quotad (磁盘配额进程) 动态向portmap注册端口
/etc/exports 主配置文件
<a href="http://blog.51cto.com/attachment/201309/220006605.png"></a>
注意:由于nfs是基于RCP协议实现,所以请确保portmap服务开启
二、NFS工作机制
<a href="http://blog.51cto.com/attachment/201309/204942939.png"></a>
三、NFS使用方法
文件系统导出属性
1
2
3
4
5
6
7
8
<code>ro 只读</code>
<code>rw 读写</code>
<code>sync</code> <code>同步</code>
<code>async 异步</code>
<code>root_squach 将root用户映射为来宾账号</code>
<code>no_root_squach 非常不安全,客户端管理员此时等于服务器端管理员权限。</code>
<code>all_squash 把用户全部映射为来宾用户,最安全</code>
<code>anonuid,anongid 指定映射的来宾账号UID和GID</code>
简单的通过映射用户ID来标识文件属主和属组,客户端只要有用户ID号跟服务器端一样,就可以具有相应权限,相当不安全,因此通常可以把一个目录或文件锁定为一个服务器端能控制的用户,而所有用户的权限等于此用户的权限,例如:
<code>NFS服务端</code>
<code>useradd</code><code>-u 510 nfstest</code>
<code>touch</code><code>/shared/nfstest</code>
<code>chownnfstest.nfstest </code><code>/shared/nfstest</code>
<code>vim </code><code>/etc/exports</code> <code>修改主配置文件</code>
<code>/shared192</code><code>.168.1.0</code><code>/24</code><code>(rw,all_squash,anonuid=510,anongid=510)</code>
<code>exportfs -ra</code>
客户端重新挂载并看结果
<a href="http://blog.51cto.com/attachment/201309/222108899.png"></a>
showmount命令
<code>mount</code><code>-t nfs 192.168.1.30:</code><code>/shared/tmp/nfs</code> <code>挂载远程NFS共享目录至本地</code>
<code>showmount -a 192.168.1.30 显示NFS服务器所有文件系统挂载情况</code>
<code>showmount -e 192.168.1.30 显示NFS服务器已被挂在的文件系统和客户端列表</code>
<code>showmount -d 192.168.1.30 显示NFS服务器已被挂在的文件系统列表</code>
exportfs命令(无需重启服务让配置文件生效)
<code>-a</code>
<code>-r 重新导出</code>
<code>-u 取消导出</code>
<code>-</code><code>v</code> <code>显示过程</code>
<code>-arv 重新导出配置文件内容</code>
<code>-auv (取消所有导出文件系统)</code>
开机自动挂载
<code>vim </code><code>/etc/fstab</code>
<code>192.168.1.30:</code><code>/shared</code> <code>/tmp/nfs</code> <code>nfs defaults,_rnetdev 0 0</code>
让mountd和quotad等进程监听在固定端口
<code>vim </code><code>/etc/sysconfig/nfs</code>
<code>MOUNTD_PORT=892</code>
<code>RQUOTAD_PORT=875</code>
<code>LOCKD_TCPPORT=32803</code>
<code>LOCKD_UDPPORT=32769</code>
<a href="http://blog.51cto.com/attachment/201309/121701931.png"></a>
一、NFS服务器端
部署LAMP平台
9
10
11
12
13
14
15
16
17
<code>##########################安装LAMP##########################</code>
<code>yum installhttpd httpd-develhttpd 安装httpd</code>
<code>yum installmysql mysql-server mysql-devel mysql 安装mysql</code>
<code>yum installphp53 php53-mbstring php53-mysqlphp 安装php</code>
<code>##########################httpd#############################</code>
<code>#AddDefaultCharset UTF-8 修改字符集</code>
<code>unzip Discuz_X2.5_SC_GBK.zip 加压论坛</code>
<code>mvupload/* </code><code>/var/www/html/</code> <code>发布论坛</code>
<code>service httpd start 启动服务</code>
<code>##########################mysql#############################</code>
<code>mysqladmin -uroot -p password </code><code>'redhat'</code> <code>为数据库添加密码</code>
<code>grant all privileges on *.* to root@</code><code>'%'</code><code>identified by </code><code>'redhat'</code><code>;</code>
<code> </code><code>远程授权root</code>
<code>service mysqld start 启动服务</code>
<code>##########################修改权限安装论坛##################</code>
<code>cd</code><code>/var/www/html</code>
<code>chmod777 config/ data/ data</code><code>/cache/data/avatar/data/plugindata/data/download/data/addonmd5/data/template/data/threadcache/data/attachment/data/attachment/album/data/attachment/forum/data/attachment/group/data/log/uc_client/data/cache/uc_server/data/uc_server/data/cache/uc_server/data/avatar/uc_server/data/backup/uc_server/data/logs/uc_server/data/tmp/uc_server/data/view/</code>
<a href="http://blog.51cto.com/attachment/201309/005009295.png"></a>
<a href="http://blog.51cto.com/attachment/201309/005022115.png"></a>
<a href="http://blog.51cto.com/attachment/201309/005131815.png"></a>
<a href="http://blog.51cto.com/attachment/201309/005242452.png"></a>
启动NFS服务
<code>service portmap status 检测portmap服务</code>
<code>vim </code><code>/etc/exports</code> <code>修改主配置文件</code>
<code>/var/www/html</code> <code>192.168.1.240(rw,no_root_squash)</code>
<code>exportfs –ra 重新导出目</code>
<code>service nfs start 启动nfs服务</code>
二、NFS客户端
<code>###########################安装LAP平台##########################</code>
<code>yum </code><code>install</code> <code>httpd httpd-devel 安装httpd</code>
<code>yum </code><code>install</code> <code>php53 php53-mbstring php53-mysql 安装php</code>
<code>service httpd start 启动服务</code>
<code>##########################NFS客户端#############################</code>
<code>mount</code> <code>-t nfs 192.168.1.230:</code><code>/var/www/html</code> <code>/var/www/html</code> <code>挂载目录</code>
<code>#AddDefaultCharset UTF-8 修改字符集</code>
三、测试
客户端使用浏览器访问192.168.1.240(NFS客户端)
<a href="http://blog.51cto.com/attachment/201309/010809884.png"></a>
客户端使用浏览器访问192.168.1.230(NFS服务端)
<a href="http://blog.51cto.com/attachment/201309/010949429.png"></a>
本文转自 ftmoonfans 51CTO博客,原文链接:http://blog.51cto.com/soulboy/1291982