天天看點

LVS+Keepalived實作高可用性叢集

LVS+Keepalived 實作高可用性叢集 一、lvs+keepalived叢集基本架構 Lvs

LVS是Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月由章文嵩博士成立,是中國國内最早出現的自由軟體項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);

十種排程算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived在這裡主要用作RealServer的健康狀态檢查以及LoadBalance主機和BackUP主機之間failover的實作。

下面是在網上參考的典型的系統架構圖

LVS+Keepalived實作高可用性叢集

針對我們伺服器放在IDC機房的特點,我參考上面的架構做了一些修改

LVS+Keepalived實作高可用性叢集

這個方案中,負載均衡層采用兩台伺服器做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;

最後建立或修改資料庫測試配置是否成功。

注:這裡隻是在伺服器池有兩台機器時有效,隻是權宜之計,如果可以,建議給資料庫服務也建個叢集。

到這裡配置基本結束了,以上配置均在虛拟機下實驗并通過。