|
web服务之负载均衡模拟实验
通常,如果我们只有一台web服务器的话,访问量过大会给服务器造成很大的压力,甚至崩溃。故我们使用一种机制来实现负载均衡,用两个web服务器来提供web服务,但是不影响用户的访问及使用。
(一)、实验环境 (二)、项目实施: 通常,如果我们只有一台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就可以访问了;
责编:赵龙
微信扫一扫实时了解行业动态
微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
|
最新专题
推荐圈子
|
|