1. 程式人生 > >使用keepalived搭建高可用LVS叢集

使用keepalived搭建高可用LVS叢集

Linux Cluster
使用keepalived搭建高可用LVS
一般比較常用於搭建高可用叢集的有:heartbeat、keepalived、piranha。
常見的高可用叢集有:高可用LVS叢集、高可用web叢集(keepalived+nginx)、高可用mysql叢集。
keepalived是一個類似於layer3, 4 & 7交換機制的軟體,也就是我們平時說的第3層、第4層和第7層交換。只需要簡單配置keepalived的配置檔案即可實現自動生成ipvsadm規則,還可以監控後端realserver主機的健康狀態,出現故障時自動剔除叢集,恢復後自動新增,以及MASTER與BACKUP之間的故障切換。
本次實驗使用keepalived+Apache,搭建高可用LVS叢集。
DIP=director IP
RIP=realserverIP
VIP=virtual server IP
realserver=rs
ha=director

1.實驗概況

1.1實驗拓撲圖

這裡寫圖片描述

1.2簡介

本次實驗使用virtualbox建立一臺最小化安裝的centos5.5配置yum源,完成後再複製出三臺剛才已安裝好的centos5.5,共四臺虛擬機器,
只需要啟用一張網絡卡,選擇橋接模式。採用LVS的DR直接路由工作模式,wlc排程演算法,後端伺服器健康狀態監測方式為HTTP,
此外後端伺服器健康狀態監測方式還有SSL、HTTPS、TCP_CHECK等。
hostname               ip                           角色                  作用
ha1       VIP:eth0:0 192.168.8.30        LVS負載均衡器MASTER     接收使用者請求,
                                                                 轉發給後端realserver處理
          DIR:eth0   192.168.8.31                                用於與後端realserver進行通訊

ha2       VIP:eth0:0 192.168.8.30        LVS負載均衡器BACKUP     備用的LVS排程器
          DIR:eth0   192.168.8.32                                用於與後端realserver、
                                                                 LVS負載均衡器MASTER進行通訊

rs1     RIP:192.168.8.33                 WEB伺服器               與director通訊,提供web服務
        VIP:lo:0 192.168.8.30                                   用於處理director分配的請求後
                                                                       以此地址返回給使用者
rs2     RIP:192.168.8.34                 WEB伺服器               與director通訊,提供web服務
        VIP:lo:0 192.168.8.30                                   用於處理director分配的請求後
                                                                 以此地址返回處理結果給使用者

1.3實驗步驟

1.3.1MASTER配置

1).單網絡卡、橋接模式啟動ha1,並配置ip地址為192.168.8.31
2).關閉防火牆與selinux
    service iptable stop
    service ip6table stop
    vim /etc/selinux/conf
    修改為SELINUX=disabled
3).安裝keepalived前的準備
    由於一開始centos5.5是最小化安裝,所以需要提前安裝編譯工具以及其他安裝keepalived的元件
    安裝openssl
    yum install -y openssl openssl-devel   #安裝openssl以及openssl開發包未安裝核心開發也可以使keepalived安裝成功,但無法自動生成ipvsadm規則
    yum install -y kernel-devel
    安裝編譯工具gcc-c++
    yum install -y gcc-c++
    安裝ipvs管理工具ipvsadm
    yum install -y ipvsadm
4).安裝keepalived
    wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
    tar xvf keepalived-1.2.7.tar.gz
    cd keepalived-1.2.7
    ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-417.el5-i686
    #注意/usr/src/kernels/2.6.18-417.el5-i686,為題主自己的核心版本,
    讀者自己操作是使用tab補全,萬一照抄或許會失敗。

配置檢測結束後會出現如下結果,為三個yes,其中IPVS use libnl: No,對後續的安裝配置執行無影響。

Keepalived configuration

Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : No
SNMP support : No
Use Debug flags : No

make
make install
ln -s /usr/local/sbin/keepalived /sbin

至此keepalived安裝完成

5).配置keepalived
    keepalived的配置檔案在 /etc/keepalived/keepalived.conf
    cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbk   #先備份一下
    vim /etc/keepalived/keepalived.conf
    以下為題主自己的配置檔案,後端伺服器健康狀態使用HTTP
! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost      #用於接受郵件報警,當服務異常時發郵件到郵箱提醒
  }
   notification_email_from admin@localhost  #郵件傳送地址
   smtp_server 127.0.0.1         #郵件伺服器本機
   smtp_connect_timeout 30       #smtp sever 超時時間
   router_id LVS_DEVEL           #服務標識,郵件主題
}

vrrp_instance VI_1 {
    state MASTER        #指定本伺服器為主伺服器
    interface eth0
    virtual_router_id 51 #虛擬路由標識,MASTER與BACKUP需一致
    priority 100         #定義優先順序,需大於BACKUP的priority值
    advert_int 1
    authentication {     #設定驗證型別與驗證密碼
        auth_type PASS    
        auth_pass abcd   #驗證密碼MASTER與BACKUP需一致
    }
    virtual_ipaddress {
        192.168.8.30     #設定VIP,既配置在MASTER排程器上由於接受使用者請求的地址
    }
}

virtual_server 192.168.8.30 80 { #虛擬伺服器定義部分既MASTER排程器
    delay_loop 6    #執行情況監測時間6s一次
    lb_algo wlc     #設定排程演算法為wlc
    lb_kind DR      #設定LVS的工作模式為DR模式
    nat_mask 255.255.255.0 #虛擬伺服器子網掩碼
    persistence_timeout 50 #session保持時間
    protocol TCP    #指定轉發的協議型別

    real_server 192.168.8.33 80 { #後端真實伺服器節點配置realserver1
        weight 3   #該節點伺服器權重
        HTTP_GET { #後端伺服器情況檢查方式HTTP_GET,向後端伺服器傳送http請求,無迴應即為該節點伺服器異常,剔除ipvsadm規則
            url {
              path /
              status_code 200
            }
            connect_timeout 3  #3秒無響應超時
            nb_get_retry 3     #重試次數
            delay_before_retry 3  #重試時間間隔
        }
    }
    real_server 192.168.8.34 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
6).將改配置檔案複製到BACKUP主機
scp /etc/keepalived/keepalived.conf 192.168.8.32:/etc/keepalived/
7).啟動keepalived服務
service keepalived start 
至此MASTER的配置完成

1.3.2BACKUP配置

0).單網絡卡、橋接模式啟動ha2,並配置ip地址為192.168.8.32 
1).與MASTER的配置相差不大
 關閉iptables與selinux
 安裝openssl openssl-dev gcc-c++ kernel-devel ipvsadm keepalived。安裝步驟參考MASTER的配置
2).修改MASTER傳過來的keepalived.conf
vim /etc/keepalived/keepalived.conf
將 state MASTER  改為state MBACKUP
   priority 100  改為priority 80
即可
3).啟動keepalived服務
service keepalived start 
至此BACKUP的配置完成

1.3.3Realserver1配置

1).單網絡卡、橋接模式啟動rs1,並配置ip地址為192.168.8.33,關閉iptables與selinux
2).安裝httpd服務 
yum install httpd
3).配置測試頁,啟動httpd服務
echo "this is realserver1 test web" > /var/www/html/index.html
service httpd start
4).配置arptable調整網絡卡的響應/通告級別
    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
5).配置網路別名及新增路由
    ifconfig lo:0 192.168.8.30 broadcast 192.168.8.30 netmask 255.255.255.255 up
    route add -host 192.168.8.30 dev lo:0

1.3.4Realserver2配置

1).與realserver1的配置差別不大,同樣的  單網絡卡、橋接模式啟動rs2,並配置ip地址為192.168.8.34,關閉iptables與selinux
安裝httpd,建立測試頁為與realserver1區別echo "this is realserver2 test web" > /var/www/html/index.html
啟動httpd服務
配置arptable
配置網路別名新增路由
可使用curl http://192.168.8.33  檢測realserver1的測試頁是否正常
至此所有的配置結束

1.4檢測

1.4.1實驗結果檢測

1).在MASTER輸入ipvsadm -l -n 檢查是否自動建立的了叢集服務及新增的叢集主機
   輸入ip addr 檢查192.168.8.30 這個提供使用者請求的ip地址是否存在本機
   存在及正常

1.4.1LVS故障切換檢測

1).假設MASTER出現異常,在MASTER輸入service keepalived stop 停止keepalived服務,
使用ipvsadm -l -n 檢視本機的ipvsadm是否清空
使用ip addr    檢視VIP 192.168.8.30是否還存在本機
在BACKUP輸入ipvsadm -l -n 檢視BACKUP是否繼承了MASTER的ipvsadm規則
輸入ip addr    檢視VIP 192.168.8.30是否存在本機
若有即為LVS故障切換成功。
假設MASTER解除異常 service keepalived start 重新啟用
則ipvsadm規則與VIP都應該存在MASTER上

1.4.1後端伺服器realserver健康狀況檢測

1).假設realserver1出現異常service httpd stop
則在LVS上的使用ipvsadm -l -n檢視ipvsadm規則,ipvsadm將rs1剔除,顯示為叢集節點伺服器中無rs1 192.168.8.33
假設realserver1解除異常service httpd start
則ipvsadm的規則上重新出現rs1 192.168.8.33

2其他情況

2.1當兩個realserver節點,都出現異常

解決:將WEB服務重定向在MASTER與BACKUP上,顯示錯誤頁面。
1).yum install httpd
2).echo "404,Not Found" > /var/www/html/index.html
3).修改vim /etc/keepalived/keepalived.conf,新增sorry_server 127.0.0.1 80,修改後內容如下

virtual_server 192.168.8.30 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.8.33 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

4).重啟keepalived服務
service keepalived restart
5).手動將兩臺realserver的httpd服務stop,再訪問http://192.168.8.30進行測試

這裡寫圖片描述
測試
這裡寫圖片描述