搭建NFS共享目录,解决wordpress负载均衡图片上传问题

1.剧情回顾

在之前的博客里面,我搭建了两个WEB服务器,然后在前端搭建了一个Nginx负载均衡服务器,用来分发请求给两个不同的服务器(http://blog.51cto.com/superpcm/2095324)。之前的测试没有问题,原因在于测试程序是单纯的静态网站,不会发生变动的静态网站。后来我搭建在两台WEB上都搭建了wordpress服务,然后上传图片的时候做测试。发现图片上传只传到其中的一台服务器上(比如说web01),当我关闭web01的时候,web02就没法看到看到那个图片了。

这是不行的,原因是这毕竟是两台服务器,就算做了负载均衡,还是两个独立的服务器,又不会像数据库那样主动去复制。除非我们的wordpress程序或者涉及到有文件上传,文件变动的,都放在一个共用的目录下,那样才可以的。下面我们用nfs来搭建这样一个共享的目录,供web01和web02共用。

2.删除原来的数据和程序

(1)到数据库删除,mysql01或者02上操作都行,会自动同步的

(2)分别到web01和web02上删除虚拟主机blog的网站内容

rm -rf /usr/local/nginx/html/blog/

3.NFS介绍

NFS是Network File System的缩写,中文名称就是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或者目录。NFS客户端可以通过挂载的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中。从客户端本地来看,NFS服务端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。

NFS网络文件系统很像windows系统的网络共享、安全功能、网络驱动器映射,这也与Linux系统的samba服务类似。只不过刚刚提到的两个都是主要用在办公局域网共享,而互联网中小型网站集群后端常用NFS进行数据共享,如果是大型网站,那么有可能还会用到更为复杂的分布式文件系统,例如GlusterFS,有机会再介绍。

4.NFS应用场景

在企业的集群架构中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,然后前端所有的节点访问这些静态资源时都可以读取NFS存储上的资源。NFS服务器所在的位置如下图,前面的图解是没有用NFS前的,WEB02没法访问用户上传的图片;后面的图是用了NFS之后,WEB01和WEB02共享用户上传的图片。

5.NFS系统原理介绍

如上图所示,NFS服务器设置一个共享的文件夹,然后设定好权限,其他有权限的NFS客户端就可以访问到这个目录,然后用mount挂载到自己的目录下。挂载之后,用df命令查看,基本信息是和本地磁盘一致的。

在前面我们说过NFS是通过网络来传输数据的,那么NFS究竟使用哪些端口来进行数据的传输呢?实际上,NFS传输数据时使用的端口是随机的。之所以NFS客户端知道NFS服务端的端口是因为一个叫做RPC(Remote Procedure Call)的协议来实现的。

因为NFS支持的功能比较多,一个端口是不能满足这些功能的,所以会使用很多的端口。每启动一个功能就用一个端口,这样就有随机性的了。为了解决这种随机性带来无法通信的问题,需要通过RPC服务来解决。RPC会记录每个NFS对应端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而保证客户端能够正确来连接到NFS端口上去。可以把NFS服务端当作房源,NFS客户端当作租客然后RPC当中介来理解这个关系。

6.部署NFS服务

说明,本次部署的Linux服务的版本都是CentOS6.5,然后防火墙针对同一网段开放了所有端口。下面进行NFS的部署

(1)用yum来安装NFS和RPC软件包,服务端和客户端都要安装。

yum install nfs-utils rpcbind -y

(2)启动rpcbind和nfs服务,并把这两个服务加入到开机启动中去(只需要在服务端执行)

/etc/init.d/rpcbind start
/etc/init.d/nfs start
echo "/etc/init.d/rpcbind start" >>/etc/rc.local
echo "/etc/init.d/nfsstart" >>/etc/rc.local

可以看到开启了好几个端口,其中RPC的111端口是不会变动的

查看NFS服务向RPC服务注册的端口信息,NFS启动之后可以看到有很多

(3)常见的NFS进程简介

[[email protected] ~]# ps aux |egrep "nfs|rpc"
rpc         966  0.0  0.0  18976   956 ?        Ss   16:30   0:00 rpcbind
rpcuser     984  0.0  0.1  23348  1364 ?        Ss   16:30   0:00 rpc.statd        #<=检查文件的一致性
root       1052  0.0  0.0      0     0 ?        S    16:30   0:00 [rpciod/0]
root       1060  0.0  0.1  21784  1380 ?        Ss   16:30   0:00 rpc.mountdx      #<=权限管理验证等等
root       1066  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd4]
root       1067  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd4_callbacks]
root       1068  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]        #<=NFS主进程
root       1069  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]        
root       1070  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]
root       1071  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]
root       1072  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]
root       1073  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]
root       1074  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]
root       1075  0.0  0.0      0     0 ?        S    16:30   0:00 [nfsd]        #<=NFS主进程
root       1097  0.0  0.0  25164   740 ?        Ss   16:31   0:00 rpc.idmapd    #<=名字映射后台进程

(4)在NFS服务端新建需要共享的文件夹

mkdir /WebData
touch /WebData/111.txt    新建一个测试文件

(5)在NFS服务端新建一个nginx用户,然后修改共享文件夹的所属用户

因为web服务器上已经有nginx用户了,并且两个web服务器的nginx用户的uid、gid都是501,在NFS服务端也新建这样的一个用户。

useradd -u 501 -s /sbin/nologin -M nginx
chown -R nginx:nginx  WebData/

(6)NFS服务端修改配置文件exports,重新启用nfs服务

nfs的配置文件/etc/exports文件的格式为:

NFS共享目录 NFS客户端地址1(参数1,参数2...) 客户端地址2(参数1,参数2....)

这个参数文件的意思是:共享的目录为/WebData  允许192.168.31.0这个网段的客户端访问NFS,拥有的权限是可读可写,数据同步写入服务端磁盘里面,并且指定了用户的UID和GID(这个UID和GID必须是服务端和客户端都有的) 具体的nfs参数可以百度了解下。

检查exports文件的语法无误之后,重启nfs服务

exportfs -rv        #检查exports文件的语法
/etc/init.d/nfs restart

(7)启动RPC服务,客户端上挂载目录看看能不能成功(前面已经安装了nfs和rpc软件)

/etc/init.d/rpcbind start
mount -t nfs 192.168.31.30:/WebData /usr/local/nginx/html/blog/

挂载成功之后可以看到刚刚新建的空文件111.txt,可以用df查看挂载的情况

(8)NFS客户端新建测试文件222.txt,查看所有者是否为nginx,然后把这两个测试文件都删除

(9)把RPC服务和挂载命令加入开机启动(所有nfs客户端执行),到这里就NFS服务就搭建好了。

echo "/etc/init.d/rpcbind start" >>/etc/rc.local
echo "mount -t nfs 192.168.31.30:/WebData /usr/local/nginx/html/blog/" >>/etc/rc.local

7.在NFS共享目录下搭建wordpress博客程序

这个就不说明怎么搭建了,可以参考我的博客 http://blog.51cto.com/superpcm/2092937 ,然后测试图片的问题,成功解决了。

PS:之所以把整个wordpress都装在共享的nfs目录下是为了方便,更好的做法是了解到那些目录是上传的图片和文件的目录,然后把那些目录放在nfs共享目录下。

原文地址:http://blog.51cto.com/superpcm/2096552

时间: 2024-08-14 02:30:09

搭建NFS共享目录,解决wordpress负载均衡图片上传问题的相关文章

js 利用iframe和location.hash跨域解决办法,java图片上传回调JS函数跨域

奶奶的:折腾了我二天,终于解决了!网上有很多例子. 但跟我的都不太一样,费话不多说了,上图   上代码: IE ,firefix,chrome 测试通过 js :这个主页面,部分代码, function submitUpload(id){ $("#imgSrc" + id +"").attr("alt", "图片上传中--"); var imgID = id; if(id>0){ imgID = 1; } var for

解决WordPress中无法将上传的文件移动至wp-content/uploads

搭建lnmp环境,放一个wordpress建站系统 lnmp环境很快就搭建完成了,但是在放wordpress的时候出现了一些问题 最主要的问题: 1.第一个是wp-content/uploads没有权限创建, 这个自己手动创建一下,给个777权限就好了. 2.无法将上传的文件移动至wp-content/uploads. 这是个主要的问题,也是比较麻烦的问题,百度的答案都是千篇一律的设置777权限,不要中文用户名, 没有一点用. 在获得解决办法之前首先描述一下背景 装lnmp环境的时候全部是使用r

基于DNS轮询和NFS实现简单的网站负载均衡

试验简述:分别在host1和host2上安装php和httpd服务器,并部署Discuz站点,在host2上安装DNS服务,用于通过轮询,向客户提供站点bbs.test.com网站的IP地址.在host3上分别提供mysql数据库用于存放站点数据.,部署LFS服务用于向用户提供附件头像等上传的空间. 1. 在各服务器上分别安装对应服务器程序 Host1: yum -y install httpd php php-mysql Host2: yum -y install httpd php php-

搭建nfs共享存储服务之三客户端配置及实战测试故障总结

在客户端操作的: 1. 检查客户端有没有安装nfs-utils和rpcbind软件程序 (这两个必须安装) [[email protected] ~]# rpm -qa nfs-utils rpcbindnfs-utils-1.2.3-75.el6.x86_64rpcbind-0.2.0-13.el6_9.1.x86_64 如果没有安装,需要用yum安装.安装方法参考:搭建nfs共享存储服务之二 [[email protected] ~]# /etc/init.d/rpcbind statusr

NFS共享目录配置

一.服务端设置 192.168.130.10是服务端 我是用虚拟机模拟的虚拟的环境,服务器.客户端的操作系统 RHEL6.1 1.先确定是否安装NFS包 用  rpm -qa|grep nfs-utils  命令查看. 如果未安装,我们要安装的nfs包为:nfs-utils-1.2.2-7.el6.x86_64.rpm 2.修改NFS服务配置文件 vi /etc/exports 例如: /var/www/gszq 172.168.130.9(rw,sync,no_root_squash) /us

虚拟机 搭建LVS + DR + keepalived 高可用负载均衡

一:环境说明:   LVS-DR-Master:    10.3.0.82   LVS-DR-Backup:    10.3.0.70   VIP:                10.3.0.60   RealServer1:    10.3.0.69   RealServer1:    10.3.0.83   Centos:5.7    二:安装LVS和Keepalvied软件包   1. 下载相关软件包    mkdir /usr/local/src/lvs    cd /usr/loca

MSTP 解决链路负载均衡与链路检测

MSTP 解决链路负载均衡与链路检测 拓扑 图1 如图 1 所示拓扑,huiju交换机与jieru交换机之间有两条链路,huiju G0/0/1 千兆光口,,G0/0/2 千兆电口:jieru G0/0/1 千兆光口,E0/0/2 百兆电口:link1是裸光纤,link2链路使用收发器做光电转换,收发器为百兆. 要求 huiju与jieru 之间的采用二层以太网链路,两条链路互为备份,且可实现流量负载均衡. 拓扑分析 若实现两条链路互为备份必须保证有链路检测机制,及时发现链路故障并触发动作.一种

【AIX】AIX_LINUX通过NFS共享目录

AIX端: 停止NFS相关服务 # stopsrc -g nfs 0513-044 The biod Subsystem was requested to stop. 0513-044 The rpc.statd Subsystem was requested to stop. 0513-044 The rpc.lockd Subsystem was requested to stop. 0513-044 The nfsd Subsystem was requested to stop. 051

linux——如何搭建samba共享目录中的,用户认证共享及匿名用户共享?(不分系统)

1.应用场景,搭建sam共享目录可用于linux以及windows之间 2.服务端ip:192.168.56.11 (A)客户端ip:192.168.56.133 (B) 查看防火墙状态并关闭 [[email protected] ~]#systemctl status firewalld [[email protected] ~]#systemctl disable firewalld [[email protected] ~]#systemctl stop firewalld [[email