操作系统:redhat5.8
两台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
二、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
- 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即可