两台web实现负载均衡,通过NFS把网页文件共享出来,把mysql独立出来
实验环境准备:三台服务器
server1:172.16.0.22(Web+PHP+DNS)---->/www
server2:172.16.0.23(Mysql)--->/data
server3:172.16.0.24(Web+PHP+NFS)--->/www/users/test.com
实验拓扑图如下:
最终实现的效果:
1、当用户访问Web服务器的时候,可以通过DNS轮询功能,将请求分别转到两台Web服务器,从而降低负载
2、如果其中一台Web服务器损坏,另一台Web可以继续工作
3、所有的客户端提交动态的数据,都会被写入到独立的数据库中,从而也降低了负载
一、server1:172.16.0.22(Web+PHP+DNS)
- 一、安装DNS
- yum
-y install bind97 bin97-libs bind97-utils - 编辑/etc/named.conf主配置文件
- options
{ -
directory "/var/named"; -
- };
- zone
"." IN { -
type hint; -
file "named.ca"; - };
-
- zone
"test.com" IN { -
type master; -
file "test.com.zone"; - };
-
- 新建区域文件
- mkdir
-p /var/named/test.com.zone -
- 编辑区域文件,添加以下内容:
- vim
/var/named/test.com.zone - $TTL
600 - @
IN SOA ns.test.com. root.test.com. ( -
2012071301 ; serial -
1D ; refresh -
1H ; retry -
1W ; expire -
3H ) ; minimum -
IN NS ns.test.com. - ns
IN A 172.16.0.22 - www
IN A 172.16.0.22 - www
IN A 172.16.0.24 -
- 修改属组:chown
root.named test.com.zone -
- 重启DNS
- service
named restart -
- 验证DNS
-
- 二、安装Web(这里采用编译安装)
- 1、httpd-2.4.2需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源码编译安装,一种是直接升级rpm包,下载好安装包以后使用“rpm
-Uvh”进行升级即可。这里选择使源码编译安装。 - 注意:安装这些软件包之前不要忘记安装开发环境了
- yum
-y groupinstall "Development Tools" - yum
-y groupinstall "Development Libraries" -
- 编译安装apr和apr-util
- tar
xf apr-1.4.6.tar.bz2 - ./configure
--prefix=/usr/local/apr - make
&& make install -
- tar
xf apr-util-1.4.1.tar.bz2 - ./configure
--prefix=/usr/local/apr-util --with-apr=/usr/local/apr - make
&& make install -
- 注意:httpd-2.4.2编译过程也要依赖于pcre-devel
和openssl-devel软件包,我们yum安装一下 - yum
install pcre-devel openssl-devel -
-
- 2、编译安装httpd-2.4.2.tar.bz2
- tar
xf httpd-2.4.2.tar.bz2 - cd
httpd-2.4.2 - ./configure
--prefix=/usr/local/apache --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util - make
&& make install -
- 为了节省时间,就没有加那么多的参数了
- 了解更多的编译参数请./configure
--help进行查看
- 三、编译安装php
- tar
xf php-5.4.4.tar.bz2 - cd
php-5.4.4 - ./configure
--prefix=/usr/local/php --with-mysql=/usr --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 - make
&& make install -
- 为php提供配置文件
- cp
php.ini-production /etc/php.ini -
- 编辑apache配置文件,让apache支持php
- vim
/etc/httpd/httpd.conf - 检查libphp5.so模块是否添加,并且开启
-
- 找到<IfModule
mime_module>模块,在里面添加 - AddType
application/x-httpd-php .php -
- 定位至:DirectoryIndex
index.html - 修改为:DirectoryIndex
index.php index.html -
- 添加一个虚拟主机编辑httpd.conf配置文件需要修改以下内容
- vim
/usr/local/apache/conf/httpd.conf - LoadModule
log_config_module modules/mod_log_config.so - Include
/etc/httpd/extra/httpd-vhosts.conf - 把前面的#号去掉
- #DocumentRoot
"/usr/local/apache/htdocs" /在前面加个#号,注释掉/ - 保存退出
- vim
/usr/local/apache/conf/extra/httpd-vhosts.conf - <VirtualHost
*:80> - ServerName
www.test.com - DocumentRoot
/www - <Directory
"/www"> -
Options indexes -
AllowOverride none -
Require all granted -
</Directory> - </VirtualHost>
-
- 重启httpd命令:/usr/local/apache/bin/apachectl
restart - 写一个php测试脚本:echo
"<?php phpinfo(); ?>" >/www/index.php - 测试结果http://172.16.0.22/index.php
-
- 下面的NFS配置好以后用以下命令进行挂载:
- mount -t nfs 172.16.0.24:/www/users/test.com /www
- 二、安装Web(这里采用编译安装)
-
二、server2:172.16.0.23(Mysql)
- 安装mysql
- 安装mysql-5.5.24(这里是绿色版直接解压使用)
- 新建用户以安全方式运行进程:
- groupadd
-r mysql - useradd
-g mysql -r -s /sbin/nologin mysql - chown
mysql:mysql /data -
- 解压mysql并创建软链接
- tar
xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local - cd
/usr/local - ln
-sv mysql-5.5.24-linux2.6-i686 mysql -
- 修改属主和组并初始化mysql-5.5.24
- chown
-R mysql:mysql . - /usr/local/mysql/scripts/mysql_install_db
--user=mysql --datadir=/data - chown
-R root . -
- 为mysql提供主配置文件:
- cd
/usr/local/mysql - cp
support-files/my-large.cnf /etc/my.cnf -
- 编辑my.cnf文件
- vim
/etc/my.cnf - 并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
- thread_concurrency
= 2 - datadir
= /data -
- 为mysql提供sysv服务脚本:
- cd
/usr/local/mysql - cp
support-files/mysql.server /etc/rc.d/init.d/mysqld -
- 添加至服务列表:
- chkconfig
--add mysqld - chkconfig
mysqld on - 最后就可以启动服务测试使用了。
-
- 使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用
- vim
/etc/profile /添加PATH搜索路径/ PATH=$PATH:/usr/local/mysql/bin - vim
/etc/man.config /添加man路径/ MANPATH /usr/local/mysql/man -
- 使用mysql命令生效
- export
PATH=$PATH:/usr/local/mysql/bin/ -
- 输出mysql的头文件至系统头文件路径/usr/include:
- 这可以通过简单的创建链接实现:
- ln
-sv /usr/local/mysql/include /usr/include/mysql - 输出mysql的库文件给系统库查找路径:
- echo
'/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf -
- 最后让系统重新载入系统库:
- ldconfig
-
- service
mysqld start - mysqladmin
-uroot password 'redhat' - mysql
-uroot -p - mysql>
GRANT ALL ON discuz.* TO root@'%.%.%.%' IDENTIFIED BY 'redhat'; - mysql>
FLUSH PRIVILEGES
三、server3:172.16.0.24(Web+PHP+NFS)
- Web和PHP安装同上
-
- 安装NFS
- redhat5.8默认已经安装好NFS,如果你的没有安装,使用这条命令即可:
- yum
install nfs-utils nfs4-acl-tools portmap -
- 配置NFS服务端
- nfs的主配置文件是/etc/exports,这里是配置NFS服务器开放的目录以及客户端访问的权限等。
- vi
/etc/exports - /www/users/test.com
172.16.0.0/16(rw,no_root_squash) - 保存退出
-
- exportfs
-arv 使其NFS配置生效,不要重新启动NFS服务 -
- 在NFS中解压Discuz程序
- unzip
Discuz_7.2_FULL_SC_GBK.zip -d /www/users/test.com - cd
/www/users/test.com - cd
upload - mv
* ../ -
- 开始安装Discuz论坛
提示:此时你可以用一台同一网段windows主机查看一下dns是否有轮询功能,ping完以后清空dns缓存,再次ping一下就看到效果了
- 测试:1、你可以通过浏览器输入IP或者是域名都可以正常访问Discuz论坛
-
2、你可以试着发贴看看数据是否写到数据库中,然后通过浏览器输入IP或者是域名,查看是否有新的内容 -
3、你可以把两个Web停止一台测试,然后通过浏览器输入IP或者是域名测试论坛是否可以正常访问 -
- 总结:
- 一、安装Discuz的时候提示目录和文件权限不可写
- 原因:权限问题
- 解决方法:编辑httpd.conf把里面的User和Group暂时改成nobody,然后把Discuz的网页文件的属主和属组改成nobody
-
- 二、1、安装Discuz的时候出现mysql_connect()
不支持的错误 -
2、编译php的时候报以下错误:configure: error: Cannot find MySQL header files under /usr/local/mysql.Note that the MySQL client library is not bundled - anymore!
- 原因:两个问题是因为找不到mysql的头文件
- 解决方法:yum
-y install php-mysql - 在编译php的时候加上--with-mysql=/usr即可
- Web和PHP安装同上