實驗環境:四臺虛擬機,安裝的操作系統是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同步,所以會話數據信息也會同步成一致的。