LAMP-NFS

简介:

需求分析

   前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;

虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?

   其实这样也不是不可以,毕竟文件本地访问,速度还是有优势的,但这却涉及到多台Web服务器间内容的一致性问题,尤其是在上线新代码或修改Web配置文件时,即使是使用一些管理工具(如puppet),这种问题也不可避免;

   那么如果能将静态页面集中存放,所有Web服务器都来集中地取文件,对于文件的一致性就有了保障,这个集中地就叫做“文件共享服务器”;

   文件共享有多种方式,FTP,NFS,Samba等,而其中NFS作为网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,这种近似访问本地文件系统的架构貌似很符合我们的需求,那我们就来试试吧!

架构优化

wKioL1M3-7_zWgn6AAJ0j-d-HAk642.jpg

说明1:NFS服务安装在PHP服务器上,并将网站根目录共享出去,这样,虽然网站内容都在同一个目录,但静态内容会通过NFS由Web服务器读取,而动态内容则通过fcgi交由PHP服务器解析;

说明2:前端Web服务器在挂载NFS共享目录时,需先通过RPC调用机制获得NFS相关服务(如mountd)的端口号,然后再连接通信

RPC调用和NFS的基本原理图

wKiom1M3_I7jBa8aAAOVmdIhfD8646.jpg

NFS简介

NFS实现文件共享主要由以下3个组件配合完成:

  • nfsd:接受NFS客户端的请求服务

  • mountd:挂载守护进程,等待客户端的挂载请求,并完成来源认证

  • rpcbind:此服务允许NFS客户端查询被NFS服务使用的端口

监听端口:

  • NFS服务nfsd本身监听的端口是2049/tcp和2049/udp,但还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口

需安装程序:

  • rpcbind(一般系统自带,可不安装),nfs-utils

主要文件:

  • /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)  # 配置共享目录为可读写,客户端root用户权限不压缩

启动服务

1
service nfs start

查看启动进程

1
ps  -ef |  grep  "nfs\|rpc"

NFS客户端配置

这里的客户端就是前端的2台Web服务器,先挂载共享目录,然后测试其读写功能

1
2
3
4
showmount -e 172.16.251.163  # 查看NFS服务器共享出来的目录
mkdir  /www/phpwind .com  # 创建本地挂载目录,因为在httpd的虚拟主机配置中根目录就是配置的/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
# 核对Web服务器的虚拟主机配置
# vi /etc/httpd/extra/httpd-vhosts.conf
<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开始安装

wKiom1M3_kCAK5XYAAck5Yx0dN8280.jpg

在安装过程中,需填写MySQL数据库的信息,故还需在已有的MySQL中对于phpwind建立相应的数据库和用户,

1
2
create database phpwind;  # 数据库名为phpwind
grant all privileges on phpwind.* to phpwind@ '172.16.%.%'  identified by  'phpwind123' # 可访问的用户名和密码分别是phpwind和phpwind123

安装并登录成功

wKiom1M3_5vBwOo8AAXJSE5UWuk368.jpg


访问测试

首先在Web Server1上发帖

wKioL1M4ATSAfRhkAAWTKfBInTI599.jpg

然后在Web Server2上看帖

wKiom1M4AbOCUg2lAARjXa4OQS8495.jpg

一切正常,说明前端Web服务器能正常访问NFS服务器,这样就实现了静态文件的集中存放了。


总结

虽然NFS可以实现文件共享的强大功能,节省前端Web服务器的磁盘空间,但NFS不适合大规模的访问场景下,在访问量不太大的情况下,作为图片服务器或者其他静态资源服务器还是挺不错的,总之,任何技术都要在适合的场景下才能发挥其最大的功用!










本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1387056,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
网络协议 Linux
Centos7 nfs常用命令详解
`/etc/exports`是NFS服务的配置文件,定义了共享给客户端的文件系统和访问规则。共享目录、客户端IP或域名、以及访问权限和用户映射选项是其主要内容。客户端指定方式包括IP地址、子网、域名或通配符。选项包括读写权限(ro/rw)、用户映射(如root_squash/no_root_squash/all_squash)和其他设置(sync/async/secure/insecure等)。`exportfs -r`用于重新应用配置。配置示例:`/opt/test`共享给192.168.1.0/24,权限为rw,同步写入(sync)。注意,不建议开启no_root_squash以确保安全。
132 0
|
网络协议 Devops 测试技术
|
Linux 网络安全
|
Oracle 关系型数据库 Linux
|
XML JSON 安全
|
关系型数据库 MySQL 测试技术