需求分析

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

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

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

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

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

架构优化

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

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

RPC调用和NFS的基本原理图

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

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主配置文件

vi /etc/exports
/www/phpwind.com 172.16.251.0/(rw,no_root_squash) # 配置共享目录为可读写,客户端root用户权限不压缩

启动服务

service nfs start

查看启动进程

ps -ef | grep "nfs\|rpc"

NFS客户端配置

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

在客户机上执行mount命令,它向服务器上的端口映射器发出一个RPC调用来获得服
务器上安装守护程序的端口号。客户和端口映射器交互既可以使用TCP也可以使用UDP,但
一般使用UDP。

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为例)

# 核对Web服务器的虚拟主机配置
# vi /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:>
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开始安装

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

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

安装并登录成功

访问测试

首先在Web Server1上发帖

然后在Web Server2上看帖

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

总结

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

LAMP架构之NFS的更多相关文章

  1. Apache web服务器(LAMP架构)(week3_day4)--技术流ken

    apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http:/ ...

  2. Apache web服务器(LAMP架构)

    1.apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http ...

  3. Netlog 的数据库及 LAMP 架构

    Database Sharding@Netlog 详细的描述了 Netlog 数据库架构的演变过程,文章浅显易懂,非常值得学习.本文数据.图片均来自:Database Sharding at Netl ...

  4. LNMP 与 LAMP 架构的区别及配置解决方案

    2014-12-31 10:33| 发布者: digitser| 查看: 5618| 评论: 0|原作者: liangsheng 摘要: LNMP 与 LAMP 架构的区别及配置解决方案 LNMP 的 ...

  5. 末学者笔记--apache编译安装及LAMP架构上线

    apache介绍 一.Apache的三种工作模式 Apache一共有3种稳定的MPM模式(多进程处理模块),它们分别是prefork.worker.event.http-2.2版本的httpd默认的m ...

  6. LAMP架构部署和动态网站环境的配置

    实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linux+apache+php+mariadb(LAMP ...

  7. Apache web服务器(LAMP架构)

    Apache web服务器(LAMP架构) apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 ...

  8. LAMP架构(三)

    第十九课 LAMP架构(三) 目录 一.配置防盗链 二.访问控制Directory 三.访问控制FilesMatch 四.限定某个目录禁止解析php 五.限制user_agent 六.php相关配置 ...

  9. LAMP架构(二)

    第十八次课 LAMP架构(二) 目录 一.Apache默认虚拟主机 二.Apache用户认证 三.域名跳转 四.Apache访问日志 五.访问日志不记录静态文件 六.访问日志切割 七.静态元素过期时间 ...

随机推荐

  1. js中图片获取src的正则

    链接: JavaScript 正则表达式:http://www.runoob.com/js/js-regexp.html js正则匹配出所有图片及图片地址src的方法:http://www.jb51. ...

  2. 将ipa文件安装到测试设备上的几种方法

    Installing Your App on Test Devices Using Xcode You can install iOS App files on devices using Xcode ...

  3. sqlserver导出为EXcel--CSV格式

    DataTable dt = Connect.BindTable(" SELECT  名称,地址,当前日期  FROM  table   GROUP BY 名称,地址,当前日期 order ...

  4. NOIP2015&2016普及组解题报告

    NOIP2015普及组题目下载 NOIP2016普及组题目下载 NOIP2015普及组题目: NOIP2018RP++ NOIP2016普及组题目 NOIP2018RP++ T1 金币\((coin. ...

  5. C#基础系列 - 反射基础

    反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的类,接口,字段,属性,方法,特性等信息 ...

  6. day9--多线程与多进程

        线程:     什么是线程? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线 ...

  7. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  8. hdoj2037 今年暑假不AC(贪心)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2037 思路 想要看的节目尽可能的多,则首先要将节目按照结束时间从早到晚排序,因为一个节目越早结束,留给 ...

  9. webview内部跳转判断

    重写webview内的方法 webView.setWebViewClient(new WebViewClient() { @Override // 在点击请求的是链接是才会调用,重写此方法返回true ...

  10. iOS 11开发教程(三)运行第一个iOS 11程序

    iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...