(一)、配置环境
(二)、配置要求:
如果我们只有一台web服务器的话,访问量过大会给服务器造成很大的压力,甚至崩溃。故我们使用一种机制来实现负载均衡,用两个web服务器来提供web服务,但是不影响用户的访问及使用。
1、Web1上配置Mysql-5.5.24,要求如下:
1)新建discuz用户,使其通过Web1或Web2主机都可以访问此数据库,并且其对
discuz数据库中的所有对象有全部访问权限;
2)删除两个匿名用户,并为所有名称为root的用户设置密码;
2、Web1上配置NFS服务,导出/www/htdocs以读写方式给Web2访问但不能给其它主机 以访问权限;
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/pw路径访问到;
2)仅能够通过https协议访问,不能通过http协议访问到此应用;
7、在Web2上的/www/wordpress目录中安装wordpress-3.3.1,要求:
1)其能够通过http://web2_ip/blog访问,或通过https://web2_ip/blog访问;
注意:www.wjw.com通过修改hosts文件或是配置DNS服务器添加A记录来实现172.16.11.1和172.16.11.2到www.wjw.com的映射。
(三)、配置过程:
一、web1上配置mysql-5.5.24:
我们要配置好yum源(可以是我们的安装光盘),方便安装软件包。
- #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 /mydata
- #vim /etc/fstab
- 添加如下行:
- /dev/myvg/mydata /mydata ext3 defaults 0 0
- #mount -a
- # mkdir /mydata/mysql
1.2、新建用户以安全方式运行mysqld进程;
- #useradd -r mysql
- #chown -R mysql:mysql /mydata/mysql
1.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
1.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
1.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
- #chown -R root .
- #service mysqld start---启动mysql服务;
为了使mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
1.6、修改PATH环境变量,让系统可以直接使用mysql的相关命令:
- #vim /etc/profile
- 添加如下行:
- PATH=/usr/local/mysql/bin:$PATH
- #export PATH=/usr/local/mysql/bin:$PATH----重新输出使之生效;
1.7、输出mysql的库文件给系统库查找路径:
- #echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
- #ldconfig---让系统重新载入系统库;
1.8、输出mysql的头文件至系统头文件路径/usr/include:
这可以通过简单的创建链接实现:
- #ln -sv /usr/local/mysql/include /usr/include/mysql
1.9、输出mysql的man手册至man命令的查找路径:
- #vim /etc/man.config,添加如下行即可:
- MANPATH /usr/local/mysql/man
1.10、管理mysql用户
- 新建discuz用户,使其通过Web1或Web2主机都可以访问discuz数据库,并且其对discuz
- 数据库中的所有对象有全部访问权限;
- #useradd 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 [email protected] identified by
- 'wjw123';
- 使172.16.11.2主机也能使用discuz用户访问discuz数据库:
- >grant all privileges on discuz.* to [email protected] identified by
- 'wjw123';
- >flush privileges;
- 删除两个匿名用户:
- >use mysql;
- >drop user''@localhost;
- >drop user''@localhost.localdomain;
- 并为所有名称为root的用户设置密码:
- >set password for [email protected]=password('123456');
- >set password for [email protected]=password('123456');
- >set password for root@’::1’=password('123456');
- >flush privileges;
- >\q 退出
二、配置NFS服务,使web2可以以读写的方式访问
2.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--给这个共享目录的其他用户写权限,以让访问网站的用户进行写操作:
2.2、在web2上进行挂载此文件,达到共享的目的:
- #mkdir -pv /www/htdocs
- #mount -t nfs 172.16.11.1:/www/htdocs /www/htdocs
- #showmount -e 172.16.11.1---查看服务端共享的信息;
三、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编译安装方式;
- #./buildconf
- #./configure --prefix=/usr/local/apr
- #make && make install
3.1.2、apr-util-1.4.1编译安装方式;
- #./buildconf --with-apr=/root/apr-1.4.6
- #./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/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
3.2、编译安装httpd-2.4.2
另外,httpd-2.4.2编译过程也要依赖于pcre-devel软件包,需要事先安装,此软件包系统光盘自带,可以用yum命令安装:
- #yum -y install pcre-devel
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-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-modules-shared=most --enable-cgi
- #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"
- <Directory "/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.wjw.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的配置文件:
- #vim 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]:wjw.com
- Organizational Unit Name (eg, section) []:tech
- Common Name (eg, your name or your server's hostname) []:ca.wjw.com
- Email Address []:[email protected]
- 创建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]:wjw.com
- Organizational Unit Name (eg, section) []:tech
- Common Name (eg, your name or your server's hostname) []:www.wjw.com
- Email Address []:[email protected]
- 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 3650
- 现在,我们的证书就做好了。
- 私钥: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-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 --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
- #make && make intall
- 为php提供配置文件:
- #cp php.ini-production /etc/php.ini
3.3.2、编辑apache配置文件httpd.conf,以使apache支持php,添加web能够识别的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---添加php页面;
- #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.wjw.com
- SSLCertificateFile "/etc/httpd/ssl/httpd.crt" 定义证书的位置
- SSLCertificateKeyFile "/etc/httpd/ssl/httpd.key" 定义私钥的位置
- 创建这个目录,用于存放证书:
- #mkdir -p /etc/httpd/ssl
- 因为用户用https访问的时候,可能是web1或是web2,故两个服务器上的证书要一样:
- #scp [email protected]:/etc/pki/CA/httpd.crt /etc/httpd/ssl
- #scp [email protected]:/etc/pki/CA/httpd.key /etc/httpd/ssl
- 重启web2上的httpd服务:
- #service httpd restart
配置完成之后,我们的web服务器就实现了负载均衡。
五、在Web1的LAMP平台上安装配置discuz-7.2,并让web2也能正常访问:
5.1、安装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';---修改为web1的ip地址,让web2能访问数据库;
- $dbuser = 'discuz';
- $dbpw = 'wjw123';
- $dbname = 'discuz';
- #vim /usr/local/php/lib/php.ini---同时修改web1和web2的php的配置文件,修改内容如下:
- short_open_tag = On
- 然后修改web1上Discuz文件权限,使其可写:
- #cd /www/htdocs/
- #chmod o+w config.inc.php
- #chmod o+wx attachments forumdata forumdata/cache/ forumdata/templates/ forumdata/threadcaches/ forumdata/logs/ uc_client/data/cache/
- http:
安装完成后,可以通过http://172.16.11.1/和http://172.16.11.2/进行访问了;
六、在web1上安装phpMyAdmin,使仅能使用https进行访问:
- #mkdir /www/phpmyadmin
- #tax xf phpMyAdmin-3.5.1-all-languages.tar.bz2
- #mv phpMyAdmin-3.5.1-all-languages/* /www/phpmyadmin
- #cd /www/phpmyadmin
- #cp config.sample.inc.php config.inc.php
- #vim config.inc.php
- $cfg['blowfish_secret'] = ' a8b7cwjw6d’;--- 添加一段随机密码;
- 定义别名,使仅能通过https:
- #vim /etc/httpd/extra/httpd-ssl.conf
- 在<VirtualHost_default_:443>和</VirtualHost>之间添加如下行:
- Alias /pw /www/phpmyadmin
- <Directory "/www/phpmyadmin">
- Options Indexes FollowSymLinks
- AllowOverride None
- Require all granted
- </Directory>
上述完成后就只能通过https://172.16.11.1/pw访问了;
七、在web2上安装wordpress:
在web1上为wordpress创建数据库及用户:
- #mysql -uroot -p
- >CREATE DATABASE wordpress; 创建数据库
- >GRANT ALL PRIVILEGES ON wordpress.* TO [email protected] IDENTIFIED BY
- 'wjw123'; 建立用户,并设定其密码;
- >FLUSH PRIVILEGES; 使账号立即生效
在web2上进行安装wordpress:
- #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”
- <Directory "/www/wordpress">
- Options Indexes FollowSymLinks
- AllowOverride None
- Require all granted
- </Directory>
以上配置完成后,http://172.16.11.2/blog就可以访问了;
八、通过www.wjw.com来访问我们建立的论坛:
在用户本地hosts文件添加如下两行对网站地址进行映射:
172.16.11.1 www.wjw.com
172.16.11.2 www.wjw.com
访问论坛试下: