在上一篇的文章中小镇解决了lanmp最基本的问题,流量分摊和负载均衡。在这章,小镇将说明服务器集群中的一个重要的点,那就是文件的共享。
首先先看小镇画的lanmp的服务器简易的架构图,如下图所示:
大家可以看到192.168.1.200为nfs存储器,为什么要用nfs文件共享呢?因为文件共享是保持各台服务器文件同步最好的方法,还有一种使用rsync来双向的保持同步,但是那样对服务器的负载要求比较高,但是这些都是要视情况而定的。
【大家可能不理解为什么要保持各个服务器之间的同步,大家想一下,你写的代码总归是要上传一个服务器的,比如说你写了一个test.php的文件,你上传了192.168.1.102服务器,那么服务器192.168.1.102是能正常工作了,但是如果流量分给了另外两台apache的服务器的话就不能正常工作了,因为这两台服务器上面没有test.php这个文件,这时候就要保持着三台服务器文件的同步,最简便的方法就是三台服务器都用nfs的共享文件夹,nfs的存储器最好用io性能较好的服务器。(不需要太好,io性能最好的服务器应该给mysql集群,我们要节省开支。)】
小镇现在就开始讲怎么搭建nfs服务器。
首先ssh连上nfs服务器。输入如下命令安装nfs:
yum -y install nfs-utils rpcbind
如果yum中没有这些包就更新下yum源(小镇觉得更新到centos7.2最方便,或者就是用docker来部署应用,小镇有一篇文章讲过docker部署的)
然后修改nfs的配置文件 /etc/exports,exports文件默认是空的。在其中添加一行 /opt/webapp *(rw,no_squash,sync,insecure),这句话的意思就是将/opt/webapp这个文件夹共享出去,*就是代表着所有的ip都可以访问,后面的参数的详细信息如下:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,可以在此处自行设定。
anongid:匿名用户的GID值。
最后将这个目录全部挂在到要用的服务器中去,用其中一台apache服务器做例子:mount -t nfs 192.168.1.200:/opt/webapp /var/www/html ,这样子apache服务器上的html目录就是webapp目录了。
这就是nfs文件共享了,可以说是最简单的一个步骤了,然后小镇下面文章讲下nginx的双机热备。