实验环境:四台虚拟机,安装的操作系统是CentOS6.5,各自的功能及IP地址如下:
Director:
eth0 192.168.2.1(作为VIP使用),eth1:10.0.0.1(作为DIP使用)
RS1:
eth0:10.0.0.2
RS2:
eth0:10.0.0.3
数据库服务器:安装的mariadb
eth0:10.0.0.4
拓扑图:
实验步骤:
一准备数据库服务器,安装mariadb,创建一个用于远程连接数据库的用户,创建一个数据库,用于两台RS服务器连接时使用,授权给该用户对应的数据库所有权限。
MariaDB [(none)]> CREATE USER cluster@'10.%.%.%' IDENTIFIED BY 'cluster'; MariaDB [(none)]> CREATE DATABASE cluster; MariaDB [(none)]> GRANT ALL ON cluster.* TO 'cluster'@'10.%.%.%'; MariaDB [(none)]> FLUSH PRIVILEGES;
二、准备两台RS服务器,这两台RS服务器都要提供httpd服务。将Discuz论坛安装程序解压后的目录文件upload复制到/var/www/html/bbs目录下,复制到其中一台就可以,以RS1为例。使用系统自带的httpd
[root@node1 ~]# yum install -y php [root@node1 ~]# yum install -y php-mysql [root@node1 ~]# service httpd start [root@node1 Discuz]# unzip Discuz_X2.5_SC_GBK.zip #将解压出来的upload目录复制到/var/www/html目录下 [root@node1 Discuz]# cp upload/ /var/www/html/bbs [root@node1 Discuz]# cp upload/ /var/www/html/bbs^C [root@node1 Discuz]# cd /var/www/html/bbs [root@node1 bbs]# chmod -R 777 config/ data/ uc_client/ uc_server/
在RS1和RS2上都安装xinetd并将rsync启动为服务,以便将/var/www/html目录的内容做到同时同步的效果,以达到两台服务器上内容一致。编辑/etc/rsyncd.conf文件,内容为:
# Global Settings uid = nobody gid = nobody use chroot = no max connections = 10 strict modes = yes pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log # Directory to be synced [backup] path = /var/www/html ignore errors = yes read only = no write only = no hosts allow = 10.0.0.0/8 hosts deny = * list = true uid = root gid = root auth users = backup_transfer secrets file = /etc/rsyncd.passwd
[root@node2 ~]# echo "backup_transfer:redhat" > /etc/rsyncd.passwd #这个文件用于认证另外一个节点推送数据时的用户身份。 backup_transfer:redhat [root@node2 ~]# echo "redhat" > /etc/rsyncd.passwd2 #这个文件用于向对方节点推送时在脚本中指定密码文件,免去交互的过程。 [root@node2 ~]# chmod 600 /etc/rsyncd.passwd [root@node2 ~]# chmod 600 /etc/rsyncd.passwd2 [root@node2 ~]# chkconfig rsync on [root@node2 ~]# service xinetd start
提供脚本文件,以便在两台服务器中站点数据目录内的文件发生变化时,可以自动推送文件。脚本的内容为:
#!/bin/bash # /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %w%f %e' -e modify,delete,create,attrib /var/www/html | while read file; do /usr/bin/rsync -vzrtopg --delete --progress /var/www/html/ [email protected]::backup --password-file=/etc/rsyncd.passwd2 echo "${files} was rsynced" >> /var/log/rsync.log 2>&1 done
脚本中定义的传送IP为对方服务器的IP地址,只需要修改这一点就可以,其他的配置可以完全一样,就不再重复。
另外可以在站点根目录下各添加index.html文件,简单的在文件中写入对应的主机名称,之后方便在测试的时候查看director在调度的时候调度请求到不同的主机的效果。
由于是在虚拟机中模拟实验,所以两台RS与Director之间的通信需要RS指向Director的DIP作为网关。
[root@node1 ~]# route add default gw 10.0.0.1 #两台RS上都要设置。
三、设置Director
Director上配置了两块网卡一个作为连接外网的网卡使用,即VIP:192.168.2.1,另外一块网卡作为内网的网关使用,IP地址为10.0.0.1,另外要打开IP地址转发功能,这样在模拟的实验环境中RS1和RS2才可以和192.168.2.1正常通信:
[root@director ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@director ~]# ipvsadm -A -t 192.168.2.1:80 -s rr #定义集群服务 [root@director ~]# ipvsadm -a -t 192.168.2.1:80 -r 10.0.0.2 -m #添加RS1 [root@director ~]# ipvsadm -a -t 192.168.2.1:80 -r 10.0.0.3 -m #添加RS2
先在浏览器内测试默认主页的效果:
四、安装discuz,测试完毕后,先在集群服务中删除node2,在node1上安装Discuz论坛,删除的目的是为了安装过程中可以准确定位到node1上。在浏览器内输入192.168.2.1/bbs安装论坛,安装完毕后,再将node1在集群服务中添加进来。
#[root@director ~]# ipvsadm -d -t 192.168.2.1:80 -r 10.0.0.3
在node1上安装完discuz以后,启动rsync的脚本文件,然后向node2上同步数据文件,同样,node2上也启动脚本文件,以便以后有数据更新时向node1同步。
[root@node1 ~]# ./rsync.sh &
将node2添加进集群服务中,这样director可以调度用户请求到不同的RS上。
[root@director ~]# ipvsadm -a -t 192.168.2.1:80 -r 10.0.0.3
因为会话信息是保存在服务器端的,而两台RS之间开启了双方Rsync同步,所以会话数据信息也会同步成一致的。