keepalived+lvs的高可用模式學習總結

www.moko.cc ----李俊
QQ:5161155
 
 
最近學習了lvs+keepalived的高可用,個人覺得比heartbeat+ldirectord+lvs要簡單很多,下午沒什麼工作。
總結一下學習心得吧,大牛、老鳥們可以路過了 ·嘿嘿
至於什麼是lvs 什麼是heartbeat  什麼是keepalived ,如果不懂請GOOGLE一下,這裏就不多做說明了。
先做個兩者對比吧,僅LVS應用高可用模式進行兩者之間對比,純屬個人意見,如有不同觀點,請留言指點我,先謝謝了,呵呵
heartbeat+ldirectord+lvs
優點:可用rpm或yum方式直接安裝,尤其是ipvsadm不用以tarball方式安裝,我用的2.6.18 kernel直接用YUM安裝
不用單獨爲ipvsadm寫腳本,直接在ldirectord.cf中設置即可。
缺點:安裝設置比lvs+keepalived複雜,需要配置authkeys、ha.cf、haresources、ldirectord.cf 四個配置文件。新手上手比較生疏
 檢測後端realserver需要在後端的站點中,單獨製作一個頁面,目的是爲了ldirectord檢測realserver的狀態用。

lvs+keepalived
優點:配置文件只有一個keepalived.conf就搞定了,配置語法風格通俗易懂,新手上手快。當然,也利於維護。
檢測realserver的方式是基於端口狀態檢測,無需在realserver的站點中單獨製作頁面(像Squid或Nginx堆後端的話,這點就比HA要好)
缺點:安裝需要以tarball的方式,因爲keepalived是基於2.4.X kernel的,所以安裝的時候,要先安裝kelnel source源碼包(rpm,tarball都可以)
需要爲ipvsadm單獨寫腳本,ipvsadm 啓用並工作後,keepalived纔會接管控制ipvsadm。做到檢測realserver,同時LVS1和LVS2之間會相互檢測(個人見解)

理解也就這麼多了,呵呵,比較淺陋。
好了,廢話不說了。接下來講講lvs+keepalived的安裝過程及設置吧。
 系統環境:
                     CentOS 5.2   (2.6.18-53.el5)
                     Nginx             使用80端口
                     Squid             使用80端口
   
     軟件包:
     kernel-2.6.18-53.el5.src.rpm                     *** 內核源碼包 ***
     ipvsadm-1.24.tar.gz                                     *** ipvsadm的tarball ***
     keepalived-1.1.15.tar.gz                              *** keepalived的tarball ***
     openssl-devel                                               *** openssl的開發包 ***
     kernel-devel                                                  *** 內核的開發包 ***
 
  說明:測試機器共六臺
      VIP1:192.168.2.130                                    *** 虛擬地址1 ***
      VIP2:192.168.2.140                                    *** 虛擬地址2 ***
           
      LVS1:192.168.2.131                                   *** 主LVS ***
      LVS2:192.168.2.132                                   *** 備用LVS ***
     
      RIP1:192.168.2.133                                   *** Nginx1 ***
      RIP2:192.168.2.134                                   *** Nginx2 ***
                   
      RIP3:192.168.2.135                                   *** Squid1 ***
      RIP4:192.168.2.136                                   *** Squid2 ***
登陸主lvs後,開始安裝軟件包
1.1 安裝內核源碼包
# rpm --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5     *修正rpm包安裝key警告*
# useradd  mockbuild                                           ***建立內核源碼包安裝所需用戶***
# rpm -ivh kernel-2.6.18-53.el5.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec
#ln -s /usr/src/kernels/2.6.18-53.el5-i686  /usr/src/linux       ***爲內核源碼包做鏈接***
# cd /usr/src/linux
# vi Makefile
修改 EXTRAVERSION = -prep
該成 EXTRAVERSION = -53.el5
# uname -r                                         ***保持跟uname -r 的版本一致 檢測一下***
2.6.18-53.el5
# head -n4 Makefile                         ***看到一致了***
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 18
EXTRAVERSION = -53.el5
 OK,內核源碼包安裝完了。
1.2 安裝ipvsadm
#yum install openssl-devel             *** 安裝openssl開發包***
#yum install kernel-devel                  *** 安裝kernel開發包***
#tar zxvf ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
#make && make install
1.3 安裝keepalived
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
.#/configure –sysconf=/etc/     
#make && make install
如果剛纔你配置的時候沒加 --sysconf=/etc/ ,那麼就執行以下命令,把配置文件和執行文件拷貝到相應的目錄裏。
#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/sbin/keepalived /usr/sbin/
 
1.4 配置ipvsadm,編寫啓動腳本
#vi dlvs
輸入以下代碼
#!/bin/bash
#2009-06-02 by Minyoni  http://adidas.blog.51cto.com
#Nginx Realserver ipaddress
RIP1=192.168.2.133
RIP2=192.168.2.134
#Squid Realserver ipaddress
RIP3=192.168.2.135
RIP4=192.168.2.136
#Virtual ipaddress
VIP1=192.168.2.130
VIP2=192.168.2.140
/etc/rc.d/init.d/functions
 
case "$1" in
 
start)
echo " start LVS of DirectorServer"
 
# set the Virtual IP Address and sysctl parameter
/sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/ifconfig eth0:1 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev eth0:0
/sbin/route add -host $VIP2 dev eth0:1
echo "1" >/proc/sys/net/ipv4/ip_forward
 
#Clear IPVS table
/sbin/ipvsadm -C
 
#set LVS
#Nginx Realserver
/sbin/ipvsadm -A -t $VIP1:80 -s wrr -p 600
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g
#Squid Realserver
/sbin/ipvsadm -A -t $VIP2:80 -s wrr -p 600
/sbin/ipvsadm -a -t $VIP2:80 -r $RIP3:80 -g
/sbin/ipvsadm -a -t $VIP2:80 -r $RIP4:80 -g
 
#Run LVS
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
/sbin/ifconfig eth0:1 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
好,:wq 保存退出。
這樣LVS的ipvsadm啓動腳本就寫好了,接着
#chmod 755  dlvs                                         *** 賦予可執行權限***
1.5  配置keepalived
#mv /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.old
#vi /etc/keepalived/keepalived.conf
輸入以下代碼
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]           #如果本機沒有SMTP服務,報警信還是發不出去,汗
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER             #備份服務器上將MASTER改爲BACKUP
    interface eth0       #HA監測網絡接口
    virtual_router_id 51     #主、備機的virtual_router_id一定要相同,必須相同!!!
    priority 100       #主、備機取不同的優先級,主機值較大,備份機值較小
    advert_int 1       #VRRP Multicast廣播週期秒數
    authentication {  
        auth_type PASS      #VRRP認證方式
        auth_pass 1111      #VRRP口令字
    }
    virtual_ipaddress {
        192.168.2.130      #LVS虛擬地址,可寫多個VIP,一行一個VIP
        192.168.2.140
    }
}
 
virtual_server 192.168.2.130 80 {
    delay_loop 2                      #延時等待時間           
    lb_algo wrr                         #輪詢算法
    lb_kind DR                         #傳輸模式
    persistence_timeout 600                 #單一鏈接重連保持時間,這裏設置600秒
    protocol TCP
 
  real_server 192.168.2.133 80 {
        weight 1                           #權重
        TCP_CHECK {               #realserve的狀態檢測設置部分,單位是秒
            connect_timeout 3   
            nb_get_retry 3           
            delay_before_retry 3
        }
    }
  real_server 192.168.2.134 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 192.168.2.140 80 {
    delay_loop 2
    lb_algo wrr
    lb_kind DR
    persistence_timeout 600
    protocol TCP
 
  real_server 192.168.2.135 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  real_server 192.168.2.136 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

好,:wq保存退出。
1.5 配置sysctl.conf並使其新配置生效
#vi  /etc/sysctl.conf
輸入以下代碼
net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.eth0.send_redirects=1
好,:wq保存退出。
#sysctl -p                              ***新配置生效了***
到這裏,主LVS的安裝和設置工作就完成了。
備用LVS的安裝和設置,和主LVS一樣,不同的是配置keepalived的時候,只要把主LVS的配置文件/etc/keepalived/keepalived.conf ,拷貝到備用LVS的對應位置/etc/keepalived/keepalived.conf。
然後更改以下兩項,其他安裝和配置和主LVS一樣。
1.
state MASTER             #備份服務器上將MASTER改爲BACKUP,因爲備用LVS一定要
                                           用BACKUP
更改完後就是這樣的
state BACKUP
2.
priority 100              #主、備機取不同的優先級,主機值較大,備份機值較小,所以備
                                     用LVS我取90
更改完後就是這樣的
priority 90
OK,這樣,就可以了。主,備LVS,都已經安裝配置完了
現在我們設置realserver就可以了
2.1 配置realserver,編寫啓動腳本
我們先來配置Nginx應用的realserver。
登陸RIP1:192.168.2.133                    (Nginx1)
#vi rs
輸入以下代碼
#!/bin/bash
#2009-06-02 by Minyoni  http://adidas.blog.51cto.com
VIP=192.168.2.130
 
/etc/rc.d/init.d/functions
 
case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /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 >/dev/null 2>&1
       echo "RealServer Start OK"
 
       ;;
stop)
       ifconfig lo:0 down
       route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
 
exit 0
好,:wq保存退出
#chmod 755 rs                     ***賦予可執行權限***
登陸RIP3:192.168.2.134                    (Nginx2)
重複剛纔的工作。
2.2 現在我們來配置Squid應用的realserver。
登陸RIP1:192.168.2.135                    (Squid1)
#vi rs
輸入以下代碼
#!/bin/bash
#2009-06-02 by Minyoni  http://adidas.blog.51cto.com
VIP=192.168.2.140
 
/etc/rc.d/init.d/functions
 
case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /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 >/dev/null 2>&1
       echo "RealServer Start OK"
 
       ;;
stop)
       ifconfig lo:0 down
       route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
 
exit 0
好,:wq保存退出
#chmod 755 rs                     ***賦予可執行權限***
登陸RIP4:192.168.2.136                    (Squid2)
重複剛纔的工作。
3.1 啓動keepalived+lvs
到此爲止,所有的安裝配置工作全部都做完了。我們來啓動keepalived+lvs,讓其工作
首先登陸
      RIP1:192.168.2.133                                   *** Nginx1 ***
      RIP2:192.168.2.134                                   *** Nginx2 ***
                   
      RIP3:192.168.2.135                                   *** Squid1 ***
      RIP4:192.168.2.136                                   *** Squid2 ***
啓動相應的應用程序Nginx和Squid
然後在這4臺服務器上都執行rs腳本, 千萬要記得你的rs腳本保存在哪裏了
rs腳本的用法
#./rs start             ***啓動realserver的虛擬IP***
#./rs stop             ***停止realserver的虛擬IP***
我們現在啓動realserver的虛擬IP
#./rs start
RealServer Start OK                            ***提示啓動虛擬IP成功***
接着查看一下
#ifconfig lo:0                               ***查看虛擬IP信息,你會看到信息***
然後把其餘3臺都執行一次
 #./rs star
現在登錄
             LVS1:192.168.2.131                                    *** LVS1 ( 主)***
             LVS2:192.168.2.132                                    *** LVS2 備用)***
  
先在  LVS1:192.168.2.131  主LVS上執行dlvs腳本,用法
#./dlvs start    ***啓動ipvsadm***
#./dlvs stop    ***停止ipvsadm***
執行
#./dlvs start    ***現在ipvsadm已經啓動了***
執行
#service keepalived start                       ***啓動keepalived進入LVS的高可用模式***                          
 
在 LVS2:192.168.2.132 備用LVS上執行
#./dlvs start    ***現在ipvsadm已經啓動了***
#service keepalived start                       ***啓動keepalived進入LVS的高可用模式***
現在LVS已經運行在高可用模式了
回到主LVS上查看ipvsadm 運行情況
#watch ipvsadm -ln
 
停掉RIP1:192.168.2.133    (Nginx1) 的 WEB服務
192.168.2.133 不在列表中了


啓動RIP1:192.168.2.133    (Nginx1) 的 WEB服務
192.168.2.133 恢復到列表中了

以上說明了keepalived會自動接管ipvsadm,自動檢測realserver的狀態
 
 現在來測試主LVS和備用LVS之間的相互檢測
停掉主LVS
#./dlvs stop
#service keepalived stop

查看備用LVS的運行狀態
先查看下messages
#tail -f /var/log/messages
備用LVS已經接管了工作,狀態爲MASTER STATE

備用LVS上查看ipvsadm 運行情況
一切還是正常的,接管了工作

 
如果這時候啓動主LVS
#./dlvs start
#service keepalived start
查看messages日誌
#tail -f /var/log/messages
主LVS又主動接管了工作,狀態爲MASTER STATE

這個時候,備用LVS的狀態一定是BACKUP STATE
 
測試到此就結束了,以上就是我對keepalived+lvs學習的一些總結。過程也許不夠好,有錯誤的地方,希望大家多指點我,我一定虛心受教,先謝謝了。
 
 
注:文中腳本和配置文件,我打包了。
         下載附件即可更改使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章