基于NFS网络文件系统的图片分离服务器设置方案
一、设置图片服务器的目的
户外营商城的网站静态内容包括:图片、css、js、模板等,而图片又包括商品图片与网站框架小图。
随着网站的发展,商品逐渐上线,商品图片也越来越多,打开一个商品的页面,大图、小图、正视图、侧视图、细节图等大量耗费web服务器的资源,尽管nginx本身处理静态内容是强项,号称单机可以支持50000的并发请求,但用户每打开一个页面都需要响应大量图片的请求,如果在线用户很多时,势必影响到网站访问的用户体验。
所以,将PHP动态内容,与静态内容,主要是商品图片进行分离,以及针对静态的图片等内容做缓存,也就是做服务器的反向代理,是改善用户体验的一个很好的解决办法。
二、网站拓扑架构修改
1、原来的架构是两台服务器做用heartbeat做HA,IP地址为119.161.145.216的服务器(dell R710)做主服务器,而IP地址为119.161.145.215的服务器(dell R410)做备用服务器,他们均连接IP地址为119.161.145.209的服务器(dell R710)的数据库服务器。,215使用rsync脚本,每3分钟同步一次216主服务器上的网站数据。以下分别简称这三台服务器为shop1、shop2、mysql。
2、图片服务器主要储存商品图片,需要较大的磁盘空间,网站有一台基于dell R710的postfix的邮件服务器,磁盘空间有大量剩余,我们将使用该服务器的剩余大部分空间搭建图片服务器。该邮件服务器IP地址为119.161.145.206,已经有LNMP(linux+nginx+php+mysql)环境。
3、商品的图片操作包括户外营编辑员工上传商品时上传图片的操作,以及用户访问网站时对图片的URL请求操作。特别是要明白,编辑上传商品图片的同时,PHP程序会将上传的图片的路径写入到MYSQL数据库中。基于此,我们要做图片服务器,也要针对性的操作:
A:增加一个图片服务器上的NGINX虚拟主机,捆绑域名http://img.oucamp.com,然后将原网站的商品图片从主web服务器的网站数据中摘出来,放置在119.161.145.206的img.oucamp.com虚拟主机指定的目录/data0/htdocs/www/oucampshop/images;
B:请php开发工程师,批量修改已经存在mysql上的商品图片URL,我们则在图片服务器上安装nfs服务,设置好开机自启动,并将http://img.oucamp.com虚拟主机指定的目录/data0/htdocs/www/oucampshop/images输出(export),在shop1与shop2上,分别设置自动mount该export目录,到各自主机的/data0/htdocs/www/oucampshop/images目录。
1、安装配置nfs;
rpm -q nfs-utils portmap
yum -y install nfs-utils portmap
service nfs status
service portmap status
service nfs start
service portmap status
设置共享目录
mkdir -p /data0/htdocs/www/oucampshop
chown www:www /data0/htdocs/www/oucampshop
chmod a+w oucampshop/
vi /etc/exports
/data0/htdocs/www/oucampshop/images 192.168.10.0/24(sync,no_root_squash,rw)
保存设置
exportfs -rv
chkconfig –list nfs
开机自启动nfs
chkconfig –level 345 nfs on
service portmap restart
service nfs restart
1、客户端mount检测nfs服务器
showmount -e 192.168.10.212
rpc mount export: RPC: Unable to receive; errno = No route to host
表示nfs服务器上的防火墙未开启相关端口
解决办法
将NFS随机产生的端口如MOUNTD_PORT、 STATD_PORT、 LOCKD_TCPPORT、 LOCKD_UDPPORT固定化
编辑/etc/sysconfig/nfs
vi /etc/sysconfig/nfs
修改以下行,去掉#号
#RQUOTAD_PORT=875
#LOCKD_TCPPORT=32803
#LOCKD_UDPPORT=32769
#MOUNTD_PORT=892
#STATD_PORT=662
#STATD_OUTGOING_PORT=2020
重新启动NFS
service nfs restart
service portmap restart
在nfs服务器上执行以下命令,查看nfs开放的端口
rpcinfo -p 192.168.10.212
根据上面的输出,修改防火墙规则
vi /etc/sysconfig/iptables
需增加以下代码
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p udp –dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 32769 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p udp –dport 32769 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 32803 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p udp –dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p udp –dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p tcp –dport 662 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state –state NEW -p udp –dport 662 -j ACCEPT
重新启动防火墙
service iptables restart
再实验一下,客户端mount检测nfs服务器
showmount -e 192.168.10.212
出现一下信息表示正确
Export list for 192.168.10.212:
/data0/htdocs/www/oucampshop/images 192.168.10.0/24
客户端mount
2、mount NFS服务器
mount -t nfs 192.168.10.212:/data0/htdocs/www/oucampshop/images /data0/htdocs/www/oucampshop/images
开机自动mount
vi /etc/fstab
192.168.10.212:/data0/htdocs/www/oucampshop/images /data0/htdocs/www/oucampshop/images nfs rw 0 0
查看同步文件
find /data0/htdocs/www/oucampshop/images/ -type f |wc –l
注意:挂载点必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。
umount卸载
umount -l /data0/htdocs/www/oucampshop/images
或者
fuser -k /data0/htdocs/www/oucampshop/images
umount /data0/htdocs/www/oucampshop/images
为什么umount的时候老显示 device busy?
这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用:
# umount -l /mnt/hda5
来卸载设备。选项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令 ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。
评论