LVS是Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月由章文嵩博士成立,是中國國内最早出現的自由軟體項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
十種排程算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
KeepalviedKeepalived在這裡主要用作RealServer的健康狀态檢查以及LoadBalance主機和BackUP主機之間failover的實作。
下面是在網上參考的典型的系統架構圖

針對我們伺服器放在IDC機房的特點,我參考上面的架構做了一些修改
這個方案中,負載均衡層采用兩台伺服器做DR,架構lvs+keepalived,其中master DR排程工作,把使用者的請求配置設定到web伺服器上,當master DR故障時,backup DR自動切換狀态到master,完成負載均衡的工作,mater DR恢複後backup DR又自動切換狀态到backup。如果出于經濟考慮,可以暫時隻用一台伺服器做DR。
Web伺服器層是真正處理使用者請求的,這裡初步計劃兩台real server,DR按照一定的規則把使用者的請求配置設定到real server上,要保證不同的real server有着一緻的資料庫和web目錄。資料庫的一緻常見的有叢集和複制技術,綜合考慮,在兩台real server之間采用mysql的雙主複制來現在real server 可以同時讀取和寫入資料庫,并保證資料庫的一緻。
這裡的共享存儲區采用一台NFS伺服器,建立共享輸出目錄,然後兩台real server 挂載這個輸出目錄,實作web目錄檔案的一緻。
這樣,則需要5台伺服器,再加上VIP位址,則需要6個公網IP位址,對于www.faxingw.cn,VIP是122.224.6.84,使用者在浏覽器上輸入域名,經過DNS伺服器解析成122.224.6.84,經過負載均衡排程器,将使用者請求配置設定到real server上,這裡計劃采用基于直接路由的負載均衡(VS/DR,即Virtual Server via Direct Routing)技術,VS/DR通過改寫請求封包的MAC位址,将請求發送到real server,而real server将響應直接傳回給客戶,是3種負載排程方式中性能最好的,但要求director server與real server必須由一塊網卡連在同一實體網段上。
按照上面改過的架構方案在虛拟機上安裝測試,給出下面的位址規劃
Director server1:192.168.1.198
Director server2:192.168.1.196
Real server1:192.168.1.199
Real server2:192.168.1.197
NFS server1:192.168.1.201
NFS server2:192.168.1.202
VIP:192.168.1.200
二、安裝LVS+keepalived軟體LVS是通過IPVS子產品來實作的,IPVS是LVS叢集系統的核心軟體,主要用于完成使用者的請求到達負載排程器後,如何将請求發送到每個real server節點,real server節點如何傳回資料給使用者。這裡我們的作業系統采用centos5.5,該版本核心預設支援LVS功能,也可以通過如下指令檢查kernel是否已經支援LVS的IPVS子產品:
#modprobe –l |grep ipvs
這裡選擇安裝ipvsadm-1.24版本,我在虛拟機上安裝時出錯,OpenSSL is not properly installed on your system,系統缺少openssl-devel軟體包,我通過配置yum本地源安裝,然後yum install openssl-devel,問題解決了,裝好了可以通過ipvsadm –help檢查安裝是否成功,兩台director server 都要安裝。詳細的安裝步驟這裡就不詳細說明了。
Keepalived起初是為LVS設計的,專門用來監控叢集系統中各個服務節點的狀态,它根據layer3,4,5交換機制檢測每個服務節點的狀态,如果某個服務節點出現異常,或工作出現故障,keepalived将檢測到,并将出現故障的服務節點從叢集系統中剔除,而當故障節點恢複正常後,Keepalived又可以自動将此伺服器節點重新加入到伺服器叢集中。這些工作全部自動完成。
這裡選擇安裝的是keepalived-1.1.17.tar.gz,安裝過程沒有遇到問題,就不介紹了。
同樣,安裝完成後,可以執行指令:keepalived –help 檢查是否安裝成功。
三、ipvsadm和keepalived的配置在direct server上,這裡用shell腳本來實作ipvsadm指令行配置
# vi lvsdr.sh
#!/bin/bash
VIP=192.168.1.200
RIP1=192.168.1.199
RIP2=192.168.1.197
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer"
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -m -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -m -w 1
/sbin/ipvsadm
;;
stop)
echo "Close LVS Directorserver"
/sbin/ifconfig eth0:1 down
/sbin/ipvsadm -C
*)
echo "Usage0{start|stop}"
exit 1
esac
在兩台Director server上,這個腳本是一樣的,給腳本添加開機啟動
下面在Director server上配置keepalived,根據安裝路徑,keepalived的配置檔案是/etc/keepalived/keepalived.conf,
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type
PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.199 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
real_server 192.168.1.197 80 {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
這是director server 1 的配置,在director server2 上我們隻有把master 改為 backup,priority改為80就可以了
下面介紹real server上的配置,兩台real server 執行下面的腳本
# vi lvsrs.sh
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
#end
配置好了之後,配置這些腳本開機啟動 例如echo “./root/lvsrs.sh” >>/etc/rc.local
這樣配置基本完成。
四、搭建和配置NFS伺服器NFS是Network File System的簡寫,即網絡檔案系統,NFS允許一個系統在網絡上與他人共享目錄和檔案,通過NFS,使用者和程式可以像通路本地檔案一樣通路遠端系統上的檔案。
在CentOS系統中,預設情況下已經安裝NFS檔案系統,隻要用chkconfig配置開機啟動即可。
NFS 伺服器伺服器端配置登陸到NFS伺服器,在虛拟機上我設的IP位址是192.168.1.201,修改NFS系統配置檔案。
# vi /etc/exports
在檔案裡添加如下内容
/home/www 192.168.1.*(rw,sync,no_root_squash)
然後儲存提出,添加的内容表示:允許IP位址範圍在192.168.1.*的計算機以讀寫的權限來通路/home/www 目錄。
接着執行如下指令,啟動端口映射:
# /etc/rc.d/init.d/portmap start
最後執行如下指令啟動NFS服務,此時NFS會激活守護程序,然後開始監聽client端的請求。配置好了之後,先在NFS伺服器上回環測試
# mount –t NFS 192.168.1.201:/home/www /mnt
如果正常,在/mnt目錄下應該可以看到/home/www共享目錄中的内容。
用戶端配置這裡兩台real server作為用戶端,隻需做些簡單配置即可
#mkdir /mnt/www 建立共享目錄挂載點
#mount -t nfs 192.168.1.201:/home/www /mnt/nfs -o nolock 挂載共享目錄到本地
兩台real server的配置都一樣,這裡的共享目錄作為web主目錄,兩台real server可以同時讀寫該目錄和檔案,并保持目錄和檔案一緻。在nginx配置檔案裡修改web主目錄的路徑,修改fastcgi_param SCRIPT_FILENAME 路徑。
下面配置開機自動挂載,可以配置/etc/fstab來實作,也可以設定開機自動運作腳本來實作,如用腳本
#vi /root/mntnfs.sh
mount -t nfs 192.168.1.201:/home/www /mnt/www -o nolock
儲存退出,然後添加開機啟動
#echo “./root/mntnfs.sh ” >>/etc/rc.local
NFS配置就完成了。
注:存儲區的的兩台NFS Server間用inotify+rsync來實作實時備份
五、配置MySQL雙主複制在兩台real server間設定mysql雙主複制,這裡先設定主從複制。
主機:192.168.1.199
從機:192.168.1.197
主機設定
在主機中登陸mysql
#/usr/local/mysql/bin/mysql –u root
賦予從機權限
mysql>grant replication slave on *.* to ‘backup’@’192.168.1.197’ identified by ‘573514’
打開主機/etc/my.cnf檔案
#vi /etc/my.cnf
在[mysqld]中輸入
binlog-do-db=test #需要備份的資料,多個寫多行
binlog-ignore-de=mysql #不需要備份的資料庫,多個寫多行
從機配置
配置從機的/etc/my.cnf,
server-id的值改為2
在[mysqld]下輸入
master-host=192.168.1.199
master-user=backup
master-pass=573514
master-port=3306
replicate-do-db=test #隻複制某個庫
replicate-ignore-db=mysql #不複制某個庫
重新開機資料庫,驗證配置
在主機中,mysql>show master status;
在從機中,mysql>show slave status;
可以在主機上建立資料庫測試,這樣主從複制配置好了,接着繼續配置雙主複制。
配置目前從伺服器
為原始伺服器建立一個slave 賬号
mysql>grant replication slave on *.* to ‘backup2’@’192.168.1.199’ identified by ‘123456’;
重新開機mysql服務,檢視狀态
mysql>show master status;
配置原始主伺服器,編輯my.cnf并在[mysqld]下面輸入
master-host=192.168.1.197
master-user=backup2
master-pass=123456
然後重新開機mysql,登入mysql配置master檔案設定
mysql>stop slave;
mysql>change master to master_log_file=’[file written down]’,master_log_pos=[position];
mysql>start slave;
mysql>show slave status;
最後建立或修改資料庫測試配置是否成功。
注:這裡隻是在伺服器池有兩台機器時有效,隻是權宜之計,如果可以,建議給資料庫服務也建個叢集。
到這裡配置基本結束了,以上配置均在虛拟機下實驗并通過。