需求分析:
前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;
虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?
其实这样也不是不可以,毕竟文件本地访问,速度还是有优势的,但这却涉及到多台Web服务器间内容的一致性问题,尤其是在上线新代码或修改Web配置文件时,即使是使用一些管理工具(如puppet),这种问题也不可避免;
那么如果能将静态页面集中存放,所有Web服务器都来集中地取文件,对于文件的一致性就有了保障,这个集中地就叫做“文件共享服务器”;
文件共享有多种方式,FTP,NFS,Samba等,而其中NFS作为网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,这种近似访问本地文件系统的架构貌似很符合我们的需求,那我们就来试试吧!
架构优化
![LAMP+NFS.png wKioL1M3-7_zWgn6AAJ0j-d-HAk642.jpg]()
说明1:NFS服务安装在PHP服务器上,并将网站根目录共享出去,这样,虽然网站内容都在同一个目录,但静态内容会通过NFS由Web服务器读取,而动态内容则通过fcgi交由PHP服务器解析;
说明2:前端Web服务器在挂载NFS共享目录时,需先通过RPC调用机制获得NFS相关服务(如mountd)的端口号,然后再连接通信
RPC调用和NFS的基本原理图
![NFS实现原理.png wKiom1M3_I7jBa8aAAOVmdIhfD8646.jpg]()
NFS简介
NFS实现文件共享主要由以下3个组件配合完成:
监听端口:
需安装程序:
主要文件:
-
/etc/exports 主配置文件
-
/usr/sbin/exportfs 维护NFS共享资源的指令,一般用于NFS服务器端
-
/usr/sbin/showmount 查看NFS共享出来的目录资源,一般用于NFS客户端
-
/var/lib/nfs/xtab NFS的日志文件,主要记录曾经连入NFS服务器端的客户端信息
配置部署
NFS服务器配置
在PHP服务器上,安装好nfs-utils组件,并安装phpwind
|
1
2
3
4
5
6
|
mkdir
/www/phpwind
.com
unzip phpwind_v9.0_utf8.zip
cd
phpwind_v9.0_utf8
/upload
mv
*
/www/phpwind
.com
cd
/www/phpwind
.com
chmod
-R a+rw attachment conf data html src themes windid
|
编辑NFS主配置文件
|
1
2
|
vi
/etc/exports
/www/phpwind
.com 172.16.251.0
/24
(rw,no_root_squash)
|
启动服务
查看启动进程
NFS客户端配置
这里的客户端就是前端的2台Web服务器,先挂载共享目录,然后测试其读写功能
|
1
2
3
4
|
showmount -e 172.16.251.163
mkdir
/www/phpwind
.com
mount
-t nfs 172.16.251.163:
/www/phpwind
.com
/www/phpwind
.com
mount
|
测试(以Web Server1为例)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<VirtualHost *:80>
DocumentRoot
"/www/phpwind.com"
ServerName phpwind.com
ServerAlias www.phpwind.com
ErrorLog
"logs/phpwind.com-error_log"
CustomLog
"logs/phpwind.com-access_log"
common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi:
//172
.16.251.163:9000
/www/phpwind
.com/$1
<Directory
"/www/phpwind.com"
>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
<
/Directory
>
<
/VirtualHost
>
|
安装测试
访问Web Server1以安装,浏览器访问http://172.16.251.182,会直接跳转至http://172.16.251.182/install.php开始安装
![开始安装phpwind.png wKiom1M3_kCAK5XYAAck5Yx0dN8280.jpg]()
在安装过程中,需填写MySQL数据库的信息,故还需在已有的MySQL中对于phpwind建立相应的数据库和用户,
|
1
2
|
create database phpwind;
grant all privileges on phpwind.* to phpwind@
'172.16.%.%'
identified by
'phpwind123'
;
|
安装并登录成功
![phpwind登录成功.png wKiom1M3_5vBwOo8AAXJSE5UWuk368.jpg]()
访问测试
首先在Web Server1上发帖
![WebServer1发帖.png wKioL1M4ATSAfRhkAAWTKfBInTI599.jpg]()
然后在Web Server2上看帖
![WebServer2看帖.png wKiom1M4AbOCUg2lAARjXa4OQS8495.jpg]()
一切正常,说明前端Web服务器能正常访问NFS服务器,这样就实现了静态文件的集中存放了。
总结
虽然NFS可以实现文件共享的强大功能,节省前端Web服务器的磁盘空间,但NFS不适合大规模的访问场景下,在访问量不太大的情况下,作为图片服务器或者其他静态资源服务器还是挺不错的,总之,任何技术都要在适合的场景下才能发挥其最大的功用!
本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1387056,如需转载请自行联系原作者