前言
随着访问量的逐渐增大,一台web服务器可能已经无法满足需求,这就需要增加web服务器的数量了,于是问题就来了:如何保证两台服务器数据同步呢?本文将讲解如何基于NFS实现web服务器的负载均衡及数据同步。
NFS服务介绍
NFS(Network File System)网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。NFS本身没有提供数据传输的功能,必须借助于远程过程调用(RPC)协议来实现数据的传输。
配置文件
NFS在CentOS6上的配置文件及服务提供程序
1
2
3
4
5
6
7
8
|
程序包:nfs-utils
脚本:
/etc/rc
.d
/init
.d
/nfs
/etc/rc
.d
/init
.d
/nfslock
/etc/rc
.d
/init
.d
/rpcgssd
/etc/rc
.d
/init
.d
/rpcidmapd
/etc/rc
.d
/init
.d
/rpcsvcgssd
配置文件:
/etc/exports
/etc/sysconfig/nfs
#提供额外功能
|
配置文件详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/etc/exports
文件格式及选项
文件系统 客户端(选项) 客户端(选项)
客户端:IP、FQDN或DOMAIN、NETWORK
选项:
secure:缺省选项,它使用了1024以下的TCP
/IP
端口实现NFS的连接。指定insecure可以禁用这个选项
rw:这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读(ro)。
async:可改进性能,但是如果没有完全关闭NFS守护进程就重新启动了NFS服务器,也可能会造成数
据丢失,缺省为为
sync
no_wdelay:关闭写延时,如果设置了async,那么NFS就会忽略这个选项
nohide:如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像
空的一样,要禁用这种行为,需启用 hide 选项
no_subtree_check:关闭子树检查,子树检查会执行一些不想忽略的安全性检查,缺省选项是启用
子树检查
no_auth_nlm:可作为insecure_locks指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果
关心安全性问题,就要避免使用这个选项,缺省选项是 auth_nlm 或 secure_locks
mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录
fsid=num:通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。
用户映射的选项:
root_squash:不允许root用户访问挂载上来的 NFS 卷
no_root_squash:允许 root 用户访问挂载上来的 NFS 卷
all_squash:限制所有的 UID 和 GID,只使用匿名用户,缺省设置是 no_all_squash
anonuid 和 anongid:将匿名 UID 和 GID 修改成特定用户和组帐号
|
相关命令
1
2
3
4
5
6
7
8
9
10
11
|
查看NFS服务器端共享的文件系统:
showmount -e NFSSERVER_IP
挂载NFS文件系统:
mount
-t nfs SERVER:
/path/to/sharedfs
/path/to/mount_point
exportfs:维护exports文件导出的文件系统表的专用工具
export
-ar: 重新导出所有的文件系统
export
-au: 关闭导出的所有文件系统
export
-u FS: 关闭指定的导出的文件系统
开机自动挂载nfs
vim
/etc/fstab
SERVER:
/PATH/TO/EXPORTED_FS
/mount_point
nfs defaults,_netdev 0 0
|
NFS实现web服务器负载均衡
工作原理
配置过程
案例要求:
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服务器配置
修改正反向区域文件
正向解析
反向解析
检查语法,启动服务
NFS服务器配置
创建共享目录,并设置权限
编辑配置文件,设置共享目录及客户端
1
2
3
|
[root@scholar ~]
# vim /etc/exports
/web/blog
172.16.10.100(rw,
sync
) 172.16.10.212(rw,async)
|
站点文件准备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@scholar ~]
# unzip wordpress-3.2.1-zh_CN.zip
[root@scholar ~]
# cd wordpress
[root@scholar wordpress]
# mv * /web/blog
[root@scholar wordpress]
# cd /web/blog
[root@scholar blog]
# cp wp-config-sample.php wp-config.php
[root@scholar blog]
# vim wp-config.php
/** WordPress 数据库的名称 */
define(
'DB_NAME'
,
'wpdb'
);
/** MySQL 数据库用户名 */
define(
'DB_USER'
,
'wpuser'
);
/** MySQL 数据库密码 */
define(
'DB_PASSWORD'
,
'wppass'
);
/** MySQL 主机 */
define(
'DB_HOST'
,
'172.16.10.211'
);
|
启动服务,查看监听端口
数据库服务器配置
为wordpress程序提供数据库
web服务器配置
启用相关模块
1
2
3
4
|
[root@scholar ~]
# vim /etc/httpd24/httpd.conf
LoadModule proxy_module modules
/mod_proxy
.so
LoadModule proxy_fcgi_module modules
/mod_proxy_fcgi
.so
|
启用虚拟主机
1
2
3
|
#DocumentRoot "/usr/local/apache/htdocs" #关闭中心主机
Include
/etc/httpd24/extra/httpd-vhosts
.conf
#启用虚拟主机
|
使之支持php
1
2
3
4
5
6
|
<IfModule dir_module>
DirectoryIndex index.html index.php
<
/IfModule
>
AddType application
/x-httpd-php
.php
AddType application
/x-httpd-php-source
.phps
|
配置虚拟主机
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@scholar ~]
# vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot
"/web/blog"
ServerName blog.scholar.com
ProxyRequests Off
#关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi:
//172
.16.10.110:9000
/web/blog/
$1
#代理至php服务器
<Directory
"/web/blog"
>
Options none
AllowOverride none
Require all granted
<
/Directory
>
<
/VirtualHost
>
|
挂载共享目录
1
2
3
4
|
#可设置开机自动挂载
[root@scholar ~]
# vim /etc/fstab
172.16.10.110:
/web/blog
/web/blog
nfs defaults,_netdev 0 0
|
检查语法,启动服务
测试站点是否访问正常
可以访问的,接下来我们看一下,数据是否可以同步
指定某一台服务器IP访问
我们在这台服务器登陆,发表一篇博文
现在我们通过另外一台服务器看一下,是否可以看到刚刚发表的博文
OK,可以看到,数据同步的目的也实现了
The end
“世界那么大,我想去看看...”希望有朝一日我也可以如此洒脱...好了,基于NFS实现web服务器的负载均衡就说到这里了,遇到什么问题可留言,我要去感悟人生去了。以上仅为个人学习整理,如有错漏,大神勿喷~~
本文转自 北城书生 51CTO博客,原文链接:http://blog.51cto.com/scholar/1636605