web服务之负载均衡模拟实验

来源: chinaunix作者:彼岸
2012/7/16 11:16:57
通常,如果我们只有一台web服务器的话,访问量过大会给服务器造成很大的压力,甚至崩溃。故我们使用一种机制来实现负载均衡,用两个web服务器来提供web服务,但是不影响用户的访问及使用。

分享到: 新浪微博 腾讯微博
本文关键字: 负载均衡 web服务器 LAMP Discuz

(一)、实验环境

(二)、项目实施:

通常,如果我们只有一台web服务器的话,访问量过大会给服务器造成很大的压力,甚至崩溃。故我们使用一种机制来实现负载均衡,用两个web服务器来提供web服务,但是不影响用户的访问及使用。

1、Web1上配置NFS服务,导出/www/htdocs以读写方式给Web2访问但不能给其它主机以访问权限;

2、Web1上配置Mysql-5.5.24,要求如下:

1)新建discuz用户,使其通过Web1或Web2主机都可以访问此数据库,并且其对

discuz 数据库中的所有对象有全部访问权限;

2)删除两个匿名用户,并为所有名称为root的用户设置密码;

3、Web1上编译安装httpd-2.4.2和php-5.4.4,并配置LAMP平台可以正常工作,要求

如下:

1)php能使用mcrypt扩展;

2)Web使用中心主机,其网页文件目录为/www/htdocs;

3)此Web也能基于https协议工作;

4、Web2上编译安装httpd-2.4.2和php-5.4.4,让其使用Web1的mysql做为数据库服

务器,配置LAMP平台可以正常工作,要求

1)php能使用mcrypt扩展;

2)挂载Web1上的nfs目录/www/htdocs至本地的/www/htdocs;

3)Web使用中心主机,其网页文件目录为/www/htdocs;

4)此Web也能基于https协议工作;

5、在Web1的LAMP平台上安装配置discuz-7.2,要求:

1)在Web1上安装完成后,此discuz论坛也能够通过Web2被正常访问;

2)通过任一台主机登录的用户都能上传的文件或发的帖子等,而且通过另一台主

机也可以访问到;

6、在Web1上的/www/phpmyadmin目录中安装phpMyAdmin-3.5.1,要求:

1)其能够通过https://web1_ip/dma路径访问到;

2)仅能够通过https协议访问,不能通过http协议访问到此应用;

7、在Web2上的/www/wordpress目录中安装wordpress-3.3.1,要求:

1)其能够通过http://web2_ip/blog访问,或通过https://web2_ip/blog访问;

注意:www.magedu.com通过修改hosts文件或是配置DNS服务器添加A记录来实现FQDN172.16.11.1和172.16.11.2的映射。

(三)、实施过程:

一、配置NFS服务,使web2可以以读写的方式访问:

1.1、在web1上配置NFS服务:

#mkdir -pv /www/htdocs---新建用于共享的目录:

由于NFS是依靠一个RPC远程过程调用来实现文件共享的,故我们要保证RPC正常工作。而Linux中RPC是靠portmap这个服务来启动的,故要保证这个portmap服务处于运行状态,

如果没有运行要开启这个服务

#service portmap status ---查看portmap服务的状态,一定要确保portmap运行正常:

#yum install nfs-utils-1.0.9-60.el5--安装nfs-utils包,如果系统自带的有就不需再安装:

#service nfs start---开启nfs服务:

#vim /etc/exports----打开NFS的配置文件进行编辑:

添加要把哪个文件共享给web2,这个文件是用于存放网页的

/www/htdocs 172.16.11.2/16(rw)

#exportfs -r----重新导出共享,使之生效:

#chmod o+w /www/htdocs--给这个共享目录的其他用户写权限,以让访问网站的用户进行写操作:

1.2、在web2上进行挂载此文件,达到共享的目的:

#mkdir -p /www/htdocs

#mount -t nfs 172.16.11.1:/www/htdocs /www/htdocs

#showmount -e 172.16.11.1---查看服务端共享的信息;

二、web1上配置mysql-5.5.24:

2.1、准备数据存放的文件系统

在企业应用中,由于数据库中的数据变化量是很大的,为了方便管理,我们可以把数据库放在一个逻辑卷上,可以很方便的扩展或缩减其空间大小,方便管理。

首先进行分区,用作物理卷的分区的id为8e,大小为10G,我们这里以创建分区/dev/sda5为例:

#fdisk /dev/sda

#partprobe /dev/sda---让kernel识别新建的分区;

#pvcreate /dev/sda5--创建物理卷;

#vgcreate myvg /dev/sda5--创建卷组;

#lvcreate -L 5G -n mydata myvg--创建逻辑卷;

#mke2fs -j /dev/myvg/mydata--格式化逻辑卷为ext3文件;

为mydata逻辑卷的挂载目录为/mydata,用这个目录中的mysql目录来存放mysql的数据;

#mkdir -pv /mydata/mysql

#vim /etc/fstab

添加如下行:

/dev/myvg/mydata /mydata ext3 defaults 0 0

#mount -a

2.2、新建用户以安全方式运行mysqld进程;

#groupadd -r mysql

#useradd -g mysql -r -s /sbin/nologin -M mysql

#chown -R mysql:mysql /mydata/mysql

2.3、安装并初始化mysql-5.5.24

首先下载平台对应的mysql绿色版本至本地,这里是32位平台,因此,选择mysql-5.5.24-linux2.6-i686

#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

#cd mysql

#chown -R mysql:mysql .

初始化mysql数据库,指定以mysql用户身份运行,数据库数据存放在/mydata/mysql中,初始化后,mysql的root用户默认密码为空:

#scripts/mysql_install_db --user=mysql --datadir=/mydata/mysql

#chown -R root .

2.4、为mysql提供主配置文件:

#cd /usr/local/mysql

#cp support-files/my-large.cnf /etc/my.cnf

#vim /etc/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency = 2

另外还需要添加如下行指定mysql数据文件的存放位置:

datadir = /mydata/mysql

2.5、为mysql提供sysv服务脚本,使其能用service命令控制器启动:

#cd /usr/local/mysql

#cp support-files/mysql.server /etc/rc.d/init.d/mysqld

添加至mysqld至服务列表并使其开机自动启动:

#chkconfig --add mysqld

#chkconfig mysqld on

#service mysqld start---启动mysql服务;

为了使mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

2.6、输出mysql的man手册至man命令的查找路径:

#vim /etc/man.config,添加如下行即可:

MANPATH /usr/local/mysql/man

2.7、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:

#ln -sv /usr/local/mysql/include /usr/include/mysql

2.8、输出mysql的库文件给系统库查找路径:

#echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:

#ldconfig

2.9、修改PATH环境变量,让系统可以直接使用mysql的相关命令:

#vim /etc/profile

添加如下行:

PATH=/usr/local/mysql/bin:$PATH

#export PATH=/usr/local/mysql/bin:$PATH----重新输出使之生效;

2.10、管理mysql用户

新建discuz用户,使其通过Web1或Web2主机都可以访问discuz数据库,并且其对discuz

数据库中的所有对象有全部访问权限;

设定root用户的密码(默认root密码为空):

#mysqladmin -uroot -p password '123456'

Enter password: 直接回车

#mysql -uroot -p

>create database discuz;

>grant all privileges on discuz.* to discuz@localhost identified by 'wjw123';

使web1能通过172.16.11.1识别数据库:

>grant all privileges on discuz.* to discuz@172.16.11.1 identified by

'wjw123';

使172.16.11.2主机也能使用discuz用户访问discuz数据库:

>grant all privileges on discuz.* to discuz@172.16.11.2 identified by

'wjw123';

>flush privileges;

删除两个匿名用户:

>drop user''@localhost;

>drop user''@localhost.localdomain;

并为所有名称为root的用户设置密码:

>_updateuser set Password=password('123456') where User='root' and

Host='::1';

>_updateuser set Password=password('123456') where User='root' and

Host='127.0.0.1';

>_updateuser set Password=password('123456') where User='root' and

Host='localhost.localdomain';

>_updateuser set Password=password('123456') where User='root' and

Host='localhost';

>flush privileges;

>\q 退出

三、web1上安装httpd-2.4.2和php-5.4.4,并且支持https服务;

3.1、apache安装:

httpd-2.4.2需要较新版本的apr和apr-util,因此需要事先对其进行升级,升级方式有两种,一种是通过源代码编译安装,第二种是直接升级rpm包。

第一种:源代码编译安装:

3.1.1、apr-1.4.6编译安装方式;

#./configure --prefix=/usr/local/apr

#make && make install

3.1.2、apr-util-1.4.1编译安装方式;

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

--with-apr= 指定apr的位置

#make && make install

第二种:用rpm包直接升级(这个rpm包可以自己制作或是网上下载);

共需要如下4个软件包:

apr-1.4.6-1.i386.rpm

apr-devel-1.4.6-1.i386.rpm

apr-util-1.4.1-1.i386.rpm

apr-util-devel-1.4.1-1.i386.rpm

#rpm -Uvh apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm

#rpm -Uvh apr-util-1.4.1-1.i386.rpm apr-util-devel-1.4.1-1.i386.rpm

另外,httpd-2.4.2编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系

统光盘自带,可以用yum命令安装:

#yum -y install pcre-devel

3.2、编译安装httpd-2.4.2

3.2.1、首先下载httpd-2.4.2到本地,而后执行如下命令进行编译安装过程:

首先两个包组Development Tools 和Development Libraries要安装;

#yum -y groupinstall "Development Tools" "Development Libraries"

#tar xf httpd-2.4.2.tar.bz2

#cd httpd-2.4.2

#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib

#make && make install

3.2.2、修改httpd的主配置文件,设置其Pid文件的路径;

#vim /etc/httpd/httpd.conf

添加如下行即可:

PidFile "/var/run/httpd.pid"

3.2.3、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:

#vim /etc/rc.d/init.d/httpd

写入如下内容:

#!/bin/bash

#

#httpd Startup script for the Apache HTTP Server

#

#chkconfig: - 85 15

#description: Apache is a World Wide Web server. It is used to serve \

# HTML files and CGI.

#processname: httpd

#config: /etc/httpd/conf/httpd.conf

#config: /etc/sysconfig/httpd

#pidfile: /var/run/httpd.pid

#Source function library.

. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then

. /etc/sysconfig/httpd

fi

#Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

#This will prevent initlog from swallowing up a pass-phrase prompt if

#mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

#Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server

#with the thread-based "worker" MPM; BE WARNED that some modules may not

#work correctly with a thread-based MPM; notably PHP will refuse to start.

#Path to the apachectl script, server binary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

start() {

echo -n $"Starting $prog: "

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch ${lockfile}

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p ${pidfile} -d 10 $httpd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

echo -n $"Reloading $prog: "

if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

RETVAL=$?

echo $"not reloading due to configuration syntax error"

failure $"not reloading $httpd due to configuration syntax error"

else

killproc -p ${pidfile} $httpd -HUP

RETVAL=$?

fi

echo

}

#See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status -p ${pidfile} $httpd

RETVAL=$?

;;

restart)

stop

start

;;

condrestart)

if [ -f ${pidfile} ] ; then

stop

start

fi

;;

reload)

reload

;;

graceful|help|configtest|fullstatus)

$apachectl $@

RETVAL=$?

;;

*)

echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|

fullstatus|graceful|help|configtest}"

exit 1

esac

exit $RETVAL

#chmod +x /etc/rc.d/init.d/httpd---而后为此脚本赋予执行权限:

#chkconfig --add httpd--加入服务列表:

#chkconfig httpd on

#service httpd start--启动服务:

#vim /etc/httpd/httpd.conf--定义网页的存放位置:

修改为如下内容:

DocumentRoot "/www/htdocs"

3.2.4、使httpd支持https服务:

#vim /etc/httpd/httpd.conf

把下面行前的“#”去掉;

Include /etc/httpd/extra/httpd-ssl.conf

创建这个目录,用于存放证书:

#mkdir -p /etc/httpd/ssl

#cd /etc/httpd/extra/

编辑ssl的配置文件:

#vim httpd-ssl.conf

把如下两行注释掉:

#SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"

#SSLSessionCacheTimeout 300

文件中添加如下行:

LoadModule ssl_module modules/mod_ssl.so

修改如下的行:

DocumentRoot "/www/htdocs"

ServerName www.jia.com

SSLCertificateFile "/etc/httpd/ssl/httpd.crt"定义证书的位置

SSLCertificateKeyFile "/etc/httpd/ssl/httpd.key"定义私钥的位置

而要想使用ssl,就需要证书来保证它的安全传输,而证书需要CA颁发,故我们就要建立我们自己的CA,然后自己给自己发证,实现安全传输:

#cd /etc/pki/

而CA目录,就是CA默认的工作目录

/etc/pki/tls是openssl的配置文件:

#vi tls/openssl.cnf

修改[ CA_default ]中的:

dir = ../../CA 改为 dir = /etc/pki/CA

#cd /etc/pki/CA

创建CA的私钥,私钥的名字是配置文件中定义好的,不能改:

#(umask 077; openssl genrsa 2048 > private/cakey.pem)

创建CA的公钥证书:

#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

Country Name (2 letter code) [GB]:CN

State or Province Name (full name) [Berkshire]:HN

Locality Name (eg, city) [Newbury]:ZZ

Organization Name (eg, company) [My Company Ltd]:magedu.com

Organizational Unit Name (eg, section) []:tech

Common Name (eg, your name or your server's hostname) []:ca.wjw.com

Email Address []:admin@root.com

创建CA必须的一些工作目录:

#mkdir certs crl newcerts

#touch index.txt

#echo 01 > serial

#echo 01 > crlnumber

生成一个私钥,这个是https所使用的:

#(umask 077; openssl genrsa 1024 > httpd.key)

然后生成一个向CA的请求文件:

#openssl req -new -key httpd.key -out httpd.csr

Country Name (2 letter code) [GB]:CN

State or Province Name (full name) [Berkshire]:HN

Locality Name (eg, city) [Newbury]:ZZ

Organization Name (eg, company) [My Company Ltd]:magedu.com

Organizational Unit Name (eg, section) []:tech

Common Name (eg, your name or your server's hostname) []:www.wjw.com

Email Address []:admin@root.com

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

用我们的CA来签署这个证书:

#openssl ca -in htttpd.csr -out httpd.crt -days 365

现在,我们的证书就做好了。

私钥:httpd.key

证书:httpd.crt

把证书放在我们ssl定义的文件中:

#cp httpd.crt httpd.key /etc/httpd/ssl/

#service httpd restart--重启服务;

只要客户端主机有了这个证书httpd.crt就能与我们的server进行https安全传输了

3.3、编译安装php-5.4.4需要的安装环境及所需rpm包;

请配置好yum源(可以是本地系统光盘)后执行如下命令:

#yum -y groupinstall "X Software Development"

如果想让编译的php支持mcrypt扩展要安装两个rpm包:

#rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm

#rpm -ivh libmcrypt-devel-2.5.7-5.el5.i386.rpm

3.3.1、编译安装php-5.4.4

首先下载源码包至本地目录:

#tar xf php-5.4.4.tar.bz2

#cd php-5.4.4

#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-mcrypt --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --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

#make && make intall

为php提供配置文件:

#cp php.ini-production /usr/local/php/lib/php.ini

3.3.2、编辑apache配置文件httpd.conf,以使apache支持php

#vim /etc/httpd/httpd.conf

1、添加如下二行

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

2、定位至DirectoryIndex index.html

修改为:

DirectoryIndex index.php index.html

#service httpd restart

四、web2上安装httpd-2.4.2和php-5.4.4,让其使用web1的mysql作为数据库服务器,并也支持https服务;

编译安装httpd和php的步骤和web1上安装相同(web2上的https进行如下的配置,不用再自己建立CA,而是直接复制过来就可以用),但是安装php的时候要依赖于mysql的一个头文件,要执行以下操作,再安装php-5.4.4:

#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

当在web2上安装好httpd和php后,我们配置web2支持https服务:

#vim /etc/httpd/httpd.conf

把如下行的注释去掉:

Include /etc/httpd/extra/httpd-ssl.conf

#cd /etc/httpd/extra/

编辑ssl的配置文件:

#vim httpd-ssl.conf

文件中添加如下行:

LoadModule ssl_module modules/mod_ssl.so

把如下两行注释掉:

#SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"

#SSLSessionCacheTimeout 300

修改如下的行为:

DocumentRoot "/www/htdocs"

ServerName www.magedu.com

SSLCertificateFile "/etc/httpd/ssl/httpd.crt"定义证书的位置

SSLCertificateKeyFile "/etc/httpd/ssl/httpd.key"定义私钥的位置

创建这个目录,用于存放证书:

#mkdir -p /etc/httpd/ssl

因为用户用https访问的时候,可能是web1或是web2,故两个服务器上的证书要一样:

#scp root@172.16.11.1:/etc/pki/CA/httpd.crt /etc/httpd/ssl

#scp root@172.16.11.1:/etc/pki/CA/httpd.key /etc/httpd/ssl

重启web2上的httpd服务:

#service httpd restart

配置完成之后,我们的web服务器就实现了负载均衡。

五、在Web1的LAMP平台上安装配置discuz-7.2,并让web2也能正常访问:

5.1、安装discuz:

新建一个存放discuz的目录:

#cp Discuz_7.2_FULL_SC_GBK.zip /www/htdocs/

#cd /www/htdocs/

#unzip Discuz_7.2_FULL_SC_GBK.zip

我们只是用rpload的文件即可

#mv upload/* ./

修改配置文件:

#vim config.inc.php

修改:

$dbhost = '172.16.11.1'; 必须知道为ip地址,要不然web2无法访问数据库

$dbuser = 'discuz';

$dbpw = 'wjw';

$dbname = 'discuz';

在web1和web2上都有修改这个php的配置文件:

#vim /usr/local/php/lib/php.ini

更改:short_open_tag = On

更改一些文件为可写:

#cd /www/htdocs/

#chmod o+w config.inc.php attachments forumdata forumdata/cache/

forumdata/templates/ forumdata/threadcaches/ forumdata/logs/

uc_client/data/cache/

http://www.magedu.com/install 进行安装

(如果有乱码:vim /etc/httpd/httpd.conf

更改:把AddDefaultCharset UTF-8注释掉,即可)

安装完成后,可以通过http://www.magedu.com/进行访问

六、在web1上安装phpMyAdmin,使仅能使用https进行访问:

#mkdir /www/phpmyadmin

#tax xf phpMyAdmin-3.2.5-all-languages.tar.gz

#mv phpMyAdmin-3.2.5-all-languages/* /www/phpmyadmin

#cd /www/phpmyadmin

#cp config.sample.inc.php config.inc.php

#vim config.inc.php

修改cfg['blowfish_secret']行内容,添加一段随机密码:

$cfg['blowfish_secret'] = 'ajdfjflkdjfdf;l';

定义别名,使仅能通过https://web1_ip/dma路径访问到,不能通过http访问:

#vim /etc/httpd/extra/httpd-ssl.conf

之间添加如下行:

Alias /dma /www/phpmyadmin

Options Indexes FollowSymLinks

AllowOverride None

Require all granted

上述完成后就只能通过https://172.16.11.1/dma访问了

七、在web2上安装wordpress:

在web1上为wordpress创建数据库及用户:

#mysql -uroot -p

>CREATE DATABASE wordpress; 创建数据库

>GRANT ALL PRIVILEGES ON wordpress.* TO wpuser@172.16.11.2 IDENTIFIED BY

'wjw123'; 建立用户,并设定其密码;

>FLUSH PRIVILEGES; 使账号立即生效

在web2上进行安装wordpre:

#cp wordpress-3.2.1-zh_CN.zip /www

#cd /www

#unzip wordpress-3.2.1-zh_CN.zip

#cd wordpress

#cp wp-config-sample.php wp-config.php

修改它的配置文件:

#vim wp-config.php

修改如下:

define('DB_NAME', 'wordpress');

define('DB_USER', 'wpuser');

define('DB_PASSWORD', 'wjw123');

define('DB_HOST', '172.16.11.1'); 指定数据库所在的主机

定义别名,使通过http://web2_ip/blog访问:

vim /etc/httpd/httpd.conf

添加如下行:

Alias /blog /www/wordpress

Options Indexes FollowSymLinks

AllowOverride None

Require all granted

以上配置完成后:

http://172.16.11.2/blog就可以访问了;

责编:赵龙
vsharing 微信扫一扫实时了解行业动态
portalart 微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
最新专题
IT系统一体化时代来了

2009年Oracle 用Exadata服务器告诉企业,数据中心的IT服务一体化解决方案才是大势所趋,而当前企业对大数据处理的..

高性能计算——企业未来发展的必备..

“天河二号”问鼎最新全球超级计算机500强,更新的Linpack值让世界认识到了“中国速度”。但超算不能只停留于追求..

    畅享
    首页
    返回
    顶部
    ×
    畅享IT
      信息化规划
      IT总包
      供应商选型
      IT监理
      开发维护外包
      评估维权
    客服电话
    400-698-9918
    Baidu
    map