1.剧情回顾

在之前的博客里面,我搭建了两个WEB服务器,然后在前端搭建了一个Nginx负载均衡服务器,用来分发请求给两个不同的服务器(https://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进程简介

[root@STORE-NFS-01 ~]# 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博客程序

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

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

转载于:https://blog.51cto.com/superpcm/2096552

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

  1. 解决H5 IOS手机图片上传时图片会旋转90°问题

    解决H5 IOS手机图片上传时图片会旋转90°问题 Vant 官方给出的解答需要自己解决,没有处理. 解决办法主要使用了 compressorjs 插件库 一.Vant UI库Uploader 组件图 ...

  2. 解决uniapp在h5图片上传后旋转90度问题(editor同样适用)

    问题简单描述 以往没有uniapp上传图片的经验,这两天刚接手这个功能,遇到了一系列糟心的事情 1.第一版我使用的插件市场的图片压缩插件,出现的问题:低版本安卓拍照出现闪退白屏等问题 2.第二版我换了 ...

  3. php 负载均衡文件上传,nginx负载均衡同步上传文件的问题

    大神们,我现在有个问题,帮我看下: 因为使用nginx均衡负载,由于分发请求到不同服务器,这样如果只想把上传的图片只保存到一台服务器就会出问题. 百度到的方法: 第一种方法是代码里面使用ftp 把文件 ...

  4. 为什么手机上传图片这么慢 前端_解决BootStrap Fileinput手机图片上传显示旋转问题_心病_前端开发者...

    最近因为项目需要用到了bootstrap fileinput的插件,在使用苹果手机上传图片预览时,发现图片方向和手机本地存储方向不一致问题.后来通过查询资料了解图片具有EXIF(Exchangeabl ...

  5. 华为摄像头(海思3519A/3516D)开发环境nfs共享目录

    1.NFS 介绍 NFS 即网络文件系统(Network File-System),可以通过网络让不同机器.不同系统之间可以实现文件共享.通过 NFS,可以访问远程共享目录,就像访问本地磁盘一样.NF ...

  6. 麒麟服务器系统搭建nfs共享

    麒麟服务器系统搭建nfs共享 1. NFS介绍 NFS(Network File System,网络文件存储系统)最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许 ...

  7. win10连接linux nfs,WIN10旗舰版怎么挂载NFS共享目录?方法分享

    win10系统的NFS共享目录可以让Linux和Windows之间的文件共享成为可能, NFS是Unix中广泛使用的文件共享协议,在Linux下得到了传承,使用简单,读写性能强大.过去Windows与 ...

  8. 【Linux】配置NFS共享目录

    环境 [root@localhost file]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.6 (Maipo ...

  9. Docker容器中挂载NFS共享目录

    之前在https://blog.csdn.net/fengbingchun/article/details/110561129 介绍过使用Dockerfile构建ubuntu 16.04镜像,并在容器 ...

最新文章

  1. HTML和CSS初级前端面试题汇总(持续补充)
  2. 下周见| 重量级演讲阵容首曝光DTCC 2020阿里云议题抢鲜看
  3. workbook加载文件路径_通过Workbook.XML 修复Excel自定义名称
  4. 1051 复数乘法 (15 分)
  5. 前端学习(2355):uni里面的样式学习
  6. Java基础02 位运算符<<、>>
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的个人博客系统
  8. java获取inputstream_Java:我怎样才能从inputStream获取编码?
  9. cocos2dx学习笔记(一)在cocos2dx 中使用spine骨骼动画
  10. 黄灯:一个农村儿媳眼中的乡村图景
  11. Error response from daemon: driver failed programming external connectivity on endpoint xenodochial_
  12. ios引导商店评分问题
  13. java excel 导入 加校验_【JavaWeb】导入Excel并进行校验
  14. 网络和http协议理论
  15. B站弹幕爬取并制成词云
  16. openpyxl操作excel 删除行
  17. 微信内置浏览器不支持下载的解决方案 微信点击链接直接下载app安装包功能实现方式
  18. 微信小程序:会议OA项目-首页
  19. 男人冬季吃羊肉有哪些好处男人冬季吃羊肉有哪些好处
  20. 第一次用示波器怎么使用(基础经验)

热门文章

  1. 【CF321E】+【bzoj5311】贞鱼
  2. 2018CHD-ACM新生赛(正式赛)E.解救迷茫的草滩小王子
  3. WEB消息推送-comet4j
  4. android136 360 拖拽
  5. HttpServletRequest和ServletRequest的区别
  6. HR-PD 中文数据无法抽取的问题
  7. 分别采用深度优先遍历和广度优先遍历判断是否存在由vi到vj的路径,图用邻接表存储
  8. Android之使用ThumbnailUtils类来获取视频第一帧缩略图
  9. Git生成patch及打patch到源代码
  10. 地址后面的sessionid怎么消除_水泥地面起灰起砂不平怎么解决?