天天看点

LAMP平台基于NFS实现web服务器负载均衡

前言

随着访问量的逐渐增大,一台web服务器可能已经无法满足需求,这就需要增加web服务器的数量了,于是问题就来了:如何保证两台服务器数据同步呢?本文将讲解如何基于NFS实现web服务器的负载均衡及数据同步。

NFS服务介绍

NFS(Network File System)网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。NFS本身没有提供数据传输的功能,必须借助于远程过程调用(RPC)协议来实现数据的传输。

配置文件

NFS在CentOS6上的配置文件及服务提供程序

1

2

3

4

5

6

7

8

<code>程序包:nfs-utils</code>

<code>脚本:</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nfs</code>        

<code>      </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nfslock</code>    

<code>      </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcgssd</code>

<code>      </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcidmapd</code>

<code>      </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcsvcgssd</code>

<code>配置文件:</code><code>/etc/exports</code>  

<code>          </code><code>/etc/sysconfig/nfs</code>     <code>#提供额外功能</code>

配置文件详解

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<code>/etc/exports</code><code>文件格式及选项</code>

<code>文件系统   客户端(选项) 客户端(选项)</code>

<code>客户端:IP、FQDN或DOMAIN、NETWORK</code>

<code>选项:</code>

<code>secure:缺省选项,它使用了1024以下的TCP</code><code>/IP</code><code>端口实现NFS的连接。指定insecure可以禁用这个选项</code>

<code>rw:这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读(ro)。</code>

<code>async:可改进性能,但是如果没有完全关闭NFS守护进程就重新启动了NFS服务器,也可能会造成数</code>

<code>据丢失,缺省为为</code><code>sync</code>

<code>no_wdelay:关闭写延时,如果设置了async,那么NFS就会忽略这个选项</code>

<code>nohide:如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像</code>

<code>空的一样,要禁用这种行为,需启用 hide 选项</code>

<code>no_subtree_check:关闭子树检查,子树检查会执行一些不想忽略的安全性检查,缺省选项是启用</code>

<code>子树检查</code>

<code>no_auth_nlm:可作为insecure_locks指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果</code>

<code>关心安全性问题,就要避免使用这个选项,缺省选项是 auth_nlm 或 secure_locks</code>

<code>mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录</code>

<code>fsid=num:通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。</code>

<code>用户映射的选项:</code>

<code>root_squash:不允许root用户访问挂载上来的 NFS 卷</code>

<code>no_root_squash:允许 root 用户访问挂载上来的 NFS 卷</code>

<code>all_squash:限制所有的 UID 和 GID,只使用匿名用户,缺省设置是 no_all_squash</code>

<code>anonuid 和 anongid:将匿名 UID 和 GID 修改成特定用户和组帐号</code>

相关命令

<code>查看NFS服务器端共享的文件系统:</code>

<code>showmount -e NFSSERVER_IP</code>

<code>挂载NFS文件系统:</code>

<code>mount</code> <code>-t nfs SERVER:</code><code>/path/to/sharedfs</code>  <code>/path/to/mount_point</code>

<code>exportfs:维护exports文件导出的文件系统表的专用工具</code>

<code>export</code> <code>-ar: 重新导出所有的文件系统</code>

<code>export</code> <code>-au: 关闭导出的所有文件系统</code>

<code>export</code> <code>-u FS: 关闭指定的导出的文件系统</code>

<code>开机自动挂载nfs</code>

<code>vim </code><code>/etc/fstab</code>

<code>SERVER:</code><code>/PATH/TO/EXPORTED_FS</code> <code>/mount_point</code>  <code>nfs    defaults,_netdev   0 0</code>

NFS实现web服务器负载均衡

工作原理

<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U18TaCuxmVAAJzmgP0_Tc375.jpg" target="_blank"></a>

配置过程

案例要求:

DNS服务器:172.168.10.10(CentOS6.6)

web服务器1:172.16.10.100(CentOS6.6 ) 

web服务器2:172.16.10.212(CentOS6.6 ) 

php服务器:172.16.10.110(CentOS6.6) 

NFS服务器:172.16.10.110(CentOS6.6)

数据库服务器:172.16.10.211(CentOS6.6) MariaDB

要求两台web服务器上提供同一个站点(blog.scholar.com  wordpress站点),站点目录位于NFS服务器为/web/blog,两台web服务器数据需保持统一

请确保各服务器,服务软件已安装,我这里已经安装好了(其实是借用以前的),编译安装的神马的详见博客

DNS服务器配置

修改正反向区域文件

正向解析

<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U19S3BuH7kAACuy_9EQp8374.jpg" target="_blank"></a>

反向解析

<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U19ejAtIY5AACl_TmlIpE078.jpg" target="_blank"></a>

检查语法,启动服务

<a href="http://s3.51cto.com/wyfs02/M00/6B/C0/wKiom1U19gyTs30eAAG1ed50P90734.jpg" target="_blank"></a>

NFS服务器配置

创建共享目录,并设置权限

<a href="http://s3.51cto.com/wyfs02/M01/6B/BD/wKioL1U2A87zJwUtAAB6-dMIE9k905.jpg" target="_blank"></a>

编辑配置文件,设置共享目录及客户端

<code>[root@scholar ~]</code><code># vim /etc/exports </code>

<code>/web/blog</code>       <code>172.16.10.100(rw,</code><code>sync</code><code>) 172.16.10.212(rw,async)</code>

站点文件准备

<code>[root@scholar ~]</code><code># unzip wordpress-3.2.1-zh_CN.zip</code>

<code>[root@scholar ~]</code><code># cd wordpress</code>

<code>[root@scholar wordpress]</code><code># mv * /web/blog</code>

<code>[root@scholar wordpress]</code><code># cd /web/blog</code>

<code>[root@scholar blog]</code><code># cp wp-config-sample.php wp-config.php </code>

<code>[root@scholar blog]</code><code># vim wp-config.php </code>

<code> </code> 

<code>/** WordPress 数据库的名称 */</code>

<code>define(</code><code>'DB_NAME'</code><code>, </code><code>'wpdb'</code><code>);</code>

<code>/** MySQL 数据库用户名 */</code>

<code>define(</code><code>'DB_USER'</code><code>, </code><code>'wpuser'</code><code>);</code>

<code>/** MySQL 数据库密码 */</code>

<code>define(</code><code>'DB_PASSWORD'</code><code>, </code><code>'wppass'</code><code>);</code>

<code>/** MySQL 主机 */</code>

<code>define(</code><code>'DB_HOST'</code><code>, </code><code>'172.16.10.211'</code><code>);</code>

启动服务,查看监听端口

<a href="http://s3.51cto.com/wyfs02/M01/6B/C1/wKiom1U2BofRd_E6AAD4AalWP0E784.jpg" target="_blank"></a>

数据库服务器配置

为wordpress程序提供数据库

<a href="http://s3.51cto.com/wyfs02/M02/6B/BD/wKioL1U2CFXTz9v3AAHz4kgA7MQ036.jpg" target="_blank"></a>

web服务器配置

启用相关模块

<code>[root@scholar ~]</code><code># vim /etc/httpd24/httpd.conf</code>

<code>LoadModule proxy_module modules</code><code>/mod_proxy</code><code>.so</code>

<code>LoadModule proxy_fcgi_module modules</code><code>/mod_proxy_fcgi</code><code>.so</code>

启用虚拟主机

<code>#DocumentRoot "/usr/local/apache/htdocs"   #关闭中心主机</code>

<code>Include </code><code>/etc/httpd24/extra/httpd-vhosts</code><code>.conf </code><code>#启用虚拟主机</code>

使之支持php

<code>&lt;IfModule dir_module&gt;</code>

<code>    </code><code>DirectoryIndex index.html index.php</code>

<code>&lt;</code><code>/IfModule</code><code>&gt;</code>

<code>AddType application</code><code>/x-httpd-php</code>  <code>.php</code>

<code>AddType application</code><code>/x-httpd-php-source</code>  <code>.phps</code>

配置虚拟主机

<code>[root@scholar ~]</code><code># vim /etc/httpd24/extra/httpd-vhosts.conf </code>

<code>&lt;VirtualHost *:80&gt;</code>

<code>    </code><code>DocumentRoot </code><code>"/web/blog"</code>

<code>    </code><code>ServerName blog.scholar.com</code>

<code>    </code><code>ProxyRequests Off            </code><code>#关闭正向代理</code>

<code>    </code><code>ProxyPassMatch ^/(.*\.php)$ fcgi:</code><code>//172</code><code>.16.10.110:9000</code><code>/web/blog/</code><code>$1 </code><code>#代理至php服务器</code>

<code>&lt;Directory </code><code>"/web/blog"</code><code>&gt;</code>

<code>        </code><code>Options none</code>

<code>        </code><code>AllowOverride none</code>

<code>        </code><code>Require all granted</code>

<code>&lt;</code><code>/Directory</code><code>&gt;</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</code>

挂载共享目录

<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2CxuwTz8sAAHIqwRhOfw245.jpg" target="_blank"></a>

<code>#可设置开机自动挂载</code>

<code>[root@scholar ~]</code><code># vim /etc/fstab </code>

<code>172.16.10.110:</code><code>/web/blog</code>  <code>/web/blog</code>               <code>nfs     defaults,_netdev 0 0</code>

<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2DAvTYlcoAABULjWMB9Q278.jpg" target="_blank"></a>

测试站点是否访问正常

<a href="http://s3.51cto.com/wyfs02/M00/6B/BE/wKioL1U2EHeyRGurAAKSWgZC4-I461.jpg" target="_blank"></a>

可以访问的,接下来我们看一下,数据是否可以同步

指定某一台服务器IP访问

<a href="http://s3.51cto.com/wyfs02/M00/6B/BE/wKioL1U2EO2DeTy0AAKFCYnW8iw159.jpg" target="_blank"></a>

我们在这台服务器登陆,发表一篇博文

<a href="http://s3.51cto.com/wyfs02/M01/6B/C2/wKiom1U2D-awufj-AAKXtItNL9s754.jpg" target="_blank"></a>

现在我们通过另外一台服务器看一下,是否可以看到刚刚发表的博文

<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2EYmCjgZIAAOxBYCXG14582.jpg" target="_blank"></a>

OK,可以看到,数据同步的目的也实现了

The end

“世界那么大,我想去看看...”希望有朝一日我也可以如此洒脱...好了,基于NFS实现web服务器的负载均衡就说到这里了,遇到什么问题可留言,我要去感悟人生去了。以上仅为个人学习整理,如有错漏,大神勿喷~~

本文转自 北城书生  51CTO博客,原文链接:http://blog.51cto.com/scholar/1636605