前言
LNMP 分布式集群的部署实践 系列文章:
- 《(一):Nginx+PHP平台搭建与负载均衡配置》
- 《(二):NFS文件服务器的搭建与文件缓冲上传的配置》
- 《(三):MySQL主从数据库服务器的搭建》
- 《(四):Memcached 缓存服务器的搭建》
- 《(五):ThinkPHP项目部署》
- 《(六):keepalived 高可用方案》
dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处,严禁商业用途!
这一篇接着上文《LNMP 分布式集群的部署实践(一):Nginx+PHP平台搭建与负载均衡配置》,我们现在需要搭建NFS服务器。
回顾一下基本的架构:

配置
安装和启动NFS服务
yum -y install nfs-utils
vi /etc/sysconfig/nfs # 配置固定端口 MOUNTD_PORT=892
service rpcbind start # NFS 服务依赖于 rpcbind 服务
sevice nfs start
chkconfig nfs on
# 配置 iptables 允许远程主机访问
iptables -I INPUT -p udp --dport 111 -j ACCEPT
iptables -I INPUT -p udp --dport 892 -j ACCEPT
iptables -I INPUT -p tcp --dport 2049 -j ACCEPT
可以修改/etc/sysconfig/iptables-config 将里面IPTABLES_SAVE_ON_STOP="no"改为"yes"。这样每次服务在停止之前会自动将现有的规则保存在 /etc/sysconfig/iptables 这个文件中去。
NFS 依赖端口:
| 端口号 | 服务 | 说明 |
|---|---|---|
| 111 | portmapper | 端口映射 |
| 892 | rpc.mountd | 管理NFS |
| 2049 | nfs | NFS服务本身的端口 |
配置共享目录
利用 NFS 将制定目录配置为共享目录,允许外部计算机访问,对6号机进行设置:
mkdir /share
chmod 777 /share
echo '/share *(rw)' > /etc/exports # 路径 IP段(权限)
service nfs reload
完成上述配置后,在2号机挂载NFS共享目录:
yum -y install nfs-utils
showmount -e 192.168.177.16 # 查看 NFS 服务器中的共享目录
mkdir /data/share
mount 192.168.177.16:/share /data/share # 挂载NFS服务器共享目录到本地目录 ,重启后失效
echo '192.168.177.16:/share /data/share nfs defaults 0 0' >> /etc/fstab # 在 /etc/fstab 文件中配置开机是自动读取的文件系统信息,第一个0表示是不备份,第二个0是不自检, defaults 使用默认设置。等于rw,suid,dev,exec,auto,nouser,async

配置文件缓存服务器(2号机)
许多网站都有文件的上传和下载功能,当网站的规模和访问量增大时,对经常访问的文件进行缓存就非常重要,下面是在2号机中配置Nginx的缓存功能,通过部署文件缓存服务器降低后端文件存储服务器的压力:
Web缓存技术7的基本思想是时间局部性原理,Web服务器首先根据客户端的请求从后端服务器获取响应数据并传给客户端,同时Web服务器将该响应数据在本地建立副本保存。当下次有相同的客户端请求时,Web服务器直接使用本地的副本响应访问请求,而不是像后端服务器再次发送请求。

Buffer(缓冲) 和 Cache(缓存) 都是用于提高IO吞吐效率的,但他们是不同的概念。Buffer,主要用于传输效率不同步或优先级不同的设备间传递数据,一般通过对一方数据进行临时存放,再统一发给另一方,以降低进程间等待时间,临时数据一旦传送给另一方,这些数据本身就没用了;Cache,主要用于将硬盘上已有的数据在内存中建立缓存数据,提高数据的访问效率,对于国企不同的缓存可以随销毁,但不会销毁硬盘上的数据。Proxy Buffer实现了Web服务器相应数据的异步传输,Proxy Cache 实现Nginx服务器对客户端数据请求的快速响应。Proxy Cache依赖于Proxy Buffer,在Nginx中还有一种缓存机制Proxy Store,它对来自Web服务器的相应数据,尤其是静态数据只进行简单的缓存,不支持缓存过期更新、内存建立索引等,但支持设置用户或用户组对缓存数据的访问权限。——Nginx高性能Web服务器详解,2013,电子工业出版社
在http块中添加:
proxy_temp_path proxy_temp; # 响应数据的临时存放目录
proxy_cache_path proxy_cache levels=1:2 keys_zone=one:80m inactive=7d max_size=5g; # 缓存数据存放路径和Proxy Cache使用的内存空间
proxy_cache包含两级hash目录,缓存总量不超过5GB,如果缓存在7天内没有被访问则强制更新,也即自动清理7天内未被访问的缓存文件。内存Cache空间的名字为one,大小不超过80MB。
在server块中添加:
server {
listen 80;
server_name file.itshop.test;
add_header X-Cache $upstream_cache_status; # 使用add_header指令来设置response header
location / {
proxy_pass http://web_server;
proxy_http_version 1.1; # 长连接设置
proxy_set_header Connection ""; # 长连接设置
procy_cache one; # 配置使用 one 这个key_zone
proxy_cache_key $host$uri$is_args$args; # 设置建立索引时使用的关键字
proxy_cache_valid 200 304 2d; # 配置200和304状态的响应缓存2天
proxy_cache_valid any 1m; # 配置其他状态的响应数据缓存1分钟
}
}
upstream web_server {
server localhost:81;
keepalive 32; # 设置到upstream服务器的空闲keepalive连接的最大数量
}
server {
listen 81;
server_name localhost;
root /data/share/; # 后面加不加/无所谓,详见[Nginx静态服务配置---详解root和alias指令](https://www.jianshu.com/p/4be0d5882ec5)
index index.html index.htm;
}
关于Nginx长连接的优化,你可能需要阅读nginx优化——包括https、keepalive等。

配置文件上传服务器(3号机)
文件上传服务器,实现接收用户上传的文件保存到共享目录中。
- 挂载 NFS 共享目录
yum -y install nfs-utils
showmount -e 192.168.177.16
mkdir /data/share
mount 192.168.177.16:/share /data/share
echo '192.168.177.16:/share /data/share nfs defaults 0 0' >> /etc/fstab # 开机自动挂载
- 配置Nginx对请求数据请求量的限制
Nginx 在默认情况下只允许客户端请求时发送最大 1MB 的数据,超过了就会返回413错误(请求实体过大),在server块中配置:client_max_body_size 20m;,也可配置于http、location块。
另外还要注意 php.ini 中对于上传文件的限制,将限制增加到10M:
vi /usr/local/php/lib/php.ini # 直接敲命令,保存之后就会新建 php.ini
post_max_size=20M # 通过 POST 提交的最大限制
file_uploads=On
upload_max_filesize=10M # 上传文件最大限制
;upload_tmp_dir = # 上传文件临时保存目录,默认/tmp
在站点目录(我这里是/data/www)编写 upload.php 进行文件上传测试:
vi /usr/local/nginx/html/upload.php
<form method="post" enctype="multipart/form-data">
<input type="file" name="up">
<input type="submit">
</form>
<?php
if (isset($_FILES['up']) && $_FILES['up']['error'] == 0){
$savepath = 'uploads/'.time().'.dat';
if(move_uploaded_file($_FILES['up']['tmp_name'], "/data/share/$savepath")){
echo "File: <a href=\"http://file.itshop.com/$savepath\">Download</a>";
}
}
cd /data/share
mkdir -m 777 uploads

LNMP 分布式集群的部署实践 系列文章:
- 《(一):Nginx+PHP平台搭建与负载均衡配置》
- 《(二):NFS文件服务器的搭建与文件缓冲上传的配置》
- 《(三):MySQL主从数据库服务器的搭建》
- 《(四):Memcached 缓存服务器的搭建》
- 《(五):ThinkPHP项目部署》
- 《(六):keepalived 高可用方案》
dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处,严禁商业用途!