1.剧情回顾

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

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

无标题.png

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

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

image.png

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

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

3.NFS介绍

linux搭建wordpress?    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共享用户上传的图片。

image.pngimage.png

5.NFS系统原理介绍

负载均衡的搭建与测试?    image.png

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

image.png

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

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

6.部署NFS服务

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

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

yum install nfs-utils rpcbind -y

image.png

    (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端口是不会变动的

image.png

什么是负载均衡。    查看NFS服务向RPC服务注册的端口信息,NFS启动之后可以看到有很多

image.png    

    (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服务端也新建这样的一个用户。

wordpress怎么用。image.png

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....)

   image.png

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

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

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

搭建nfs文件环境搭建?    (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查看挂载的情况

image.png

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

image.png

    (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共享目录下。