基于Keepalived實現LVS雙主高可用集群

前言

前面說過基于heartbeat的LVS高可用方案,今天帶來另一種解決方案:基于Keepalived實現LVS雙主高可用集群。什么是Keepalived呢,keepalived觀其名可知,保持存活,在網絡里面就是保持在線了, 也就是所謂的高可用或熱備,用來防止單點故障的發生。本文將詳細講述Keepalived工作原理及高可用解決方案的實現。

相關介紹

Keepalived簡介

Keepalived采用VRRP(virtual router redundancy protocol,虛擬路由冗余協議)熱備份協議,以軟件的方式實現linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案——由多臺路由器組成一個熱備組。通過共用的虛擬IP地址對外提供服務;每個熱備組內同一時刻只有一臺主服務器提供服務,其他服務器處于冗余狀態,若當前在線的服務器失敗,其他服務器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。

工作原理

Keepalived組件介紹

core:keepalived的核心,復雜主進程的啟動和維護,全局配置文件的加載解析等

check:負責healthchecker(健康檢查),包括了各種健康檢查方式,以及對應的配置的解析包括LVS的配置解析

vrrp:VRRP子進程,VRRP子進程就是來實現VRRP協議的

libip*:LVS相關


keepalived.gif

由圖可知,兩個子進程都被系統WatchDog看管,兩個子進程各自負責自己的事,healthchecker子進程負責檢查各自服務器的健康程度,例如HTTP,LVS等等,如果healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,并且去掉虛擬IP,轉換為BACKUP狀態。

高可用解決方案

實驗拓撲

基于Keepalived實現LVS雙主高可用集群.jpg

配置過程

HA集群配置前提

時間同步、基于主機名互相通信、SSH互信

請確保兩個節點時間同步,可用ntpdate向時間服務器同步

[root@node1 ~]# ntpdate cn.pool.ntp.org

基于主機名互相通信

[root@node1 ~]# vim /etc/hosts
  
172.16.10.123   node1.scholar.com node1
172.16.10.124   node2.scholar.com node2
  
[root@node1 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
  
[root@node1 ~]# uname -n
node1.scholar.com
  
#兩個節點都需如上操作

SSH互信

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~]# date; ssh node2 'date' #測試
Tue Jun 16 13:31:39 CST 2015
Tue Jun 16 13:31:39 CST 2015

安裝所需程序

[root@node1 ~]# yum install keepalived -y

#兩個節點都需安裝

配置keepalived

[root@node1 ~]# vim /etc/keepalived/keepalived.conf 

vrrp_instance VI_1 {        #定義VRRP實例,實例名自定義
    state MASTER            #指定Keepalived的角色,MASTER為主服務器,BACKUP為備用服務器
    interface eth0          #指定HA監測的接口
    virtual_router_id 51    #虛擬路由標識(1-255),在一個VRRP實例中主備服務器ID必須一樣
    priority 100            #優先級,數字越大越優先,主服務器優先級必須高于備服務器
    advert_int 1            #設置主備之間同步檢查時間間隔,單位秒
    authentication {        #設置驗證類型和密碼
        auth_type PASS      #驗證類型
        auth_pass ab007     #設置驗證密碼,同一實例中主備密碼要保持一致
    }
    virtual_ipaddress {     #定義虛擬IP地址
        192.168.12.23
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 61
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass sr200
    }
    virtual_ipaddress {
        192.168.13.23
    }
}

virtual_server 192.168.12.23 80 {    #設置虛擬服務器
    delay_loop 6                     #設置健康狀態檢查時間
    lb_algo rr                       #設置負載調度算法
    lb_kind DR                       #設置LVS實現負載均衡的機制
    nat_mask 255.255.255.0           #設置掩碼
    persistence_timeout 50           #會話保持時間
    protocol TCP                     #指定轉發協議類型
    sorry_server 127.0.0.1 80        #設置應急服務器        
    real_server 172.16.10.125 80 {   #后端服務器節點
        weight 1                     #設置服務節點的權重
        HTTP_GET {                   #設置檢測方式
            url {
              path /
              status_code 200        #設定返回狀態碼為200表示Realserver存活
            }
            connect_timeout 2        #設置響應超時時間
            nb_get_retry 3           #設置超時重試次數
            delay_before_retry 1     #設置超時重試間隔
        }
    }
  real_server 172.16.10.126 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}  

virtual_server 192.168.13.23 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP 
    sorry_server 127.0.0.1 80       
    real_server 172.16.10.125 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 172.16.10.126 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

將配置文件同步給另一個節點

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
keepalived.conf                                           100% 2196     2.1KB/s   00:00

修改另一個節點配置文件

[root@node2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ab007
    }
    virtual_ipaddress {
        192.168.12.23
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 61
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass sr200
    }
    virtual_ipaddress {
        192.168.13.23
    }
}

#其他配置不變

Real Server配置

配置內核參數及VIP

1.jpg

準備測試頁面

2.jpg

#兩個RS節點都執行以上操作

測試頁面

3.jpg

keepalived節點準備應急頁面

4.jpg

#兩節點都需執行此操作

測試

啟動keepalived

5.jpg

查看兩節點的ip和ipvs規則情況

6.jpg

7.jpg

#兩個節點各生成了兩組規則,因為VIP只有一組,所以只有一組生效

訪問測試

8.jpg

9.jpg

10.jpg

11.jpg

模擬其中一個主節點故障

[root@node1 ~]# service keepalived stop

再次查看兩節點的ip和ipvs規則情況

12.jpg

13.jpg

由此可見,一個主節點掛掉以后所有的VIP和ipvs規則都會轉移到另一個節點,所以訪問也不會受到任何影響,這里就不再測試。如果故障節點重新上線,資源還會再次回到工作節點。

下面我們模擬兩個RS節點全部故障,看一下sorry_server是否可以工作

[root@scholar ~]# service httpd stop

#兩個RS全部停止服務

查看ipvs規則

14.jpg

real server已全部下線,應急服務器上線

15.jpg

16.jpg

sorry_server響應成功,至此,基于Keepalived實現LVS雙主高可用集群實驗完成

The end

基于Keepalived實現LVS雙主高可用解決方案就說到這里了,通過實驗可以看出使用keepalived構建LVS群集更加簡便易用,如果實驗過程中遇到問題可留言交流。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5396

(0)
書生書生
上一篇 2015-06-16
下一篇 2015-06-17

相關推薦

  • Linux網站架構系列之Mysql—-部署篇

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1321079   MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle公司。MySQL所使用的SQL語言是用于…

    Linux干貨 2015-04-01
  • ansible的入門使用手冊

    ansible1

    2018-01-15
  • linux端口聚合

    一、bonding簡介 bonding是一個linux kernel的driver,加載了它以后,linux支持將多個物理網卡捆綁成一個虛擬的bond網卡。     我們在很多地方會使用到物理網卡端口匯聚的功能,比如我們想提升網絡速率,比如我們想提供熱備份,比如我們想把我們的主機配置成一個網橋,然而最重要的還…

    Linux干貨 2016-09-23
  • N25-Bazinga-第三周作業

    N25-Bazinga-第三周作業 1.列出當前系統上登錄的所有用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | cut -d' ' -f1 | uniq -c |&nbs…

    Linux干貨 2016-12-21
  • Linux 文本處理,文本工具,查看,分析,統計文本文件,grep,正則表達式

    文本處理 各種文本工具,查看,分析,統計文本文件 grep 正則表達式 擴展正則表達式 sed cat -n f1 加行號(空格行都計算) cat -b f1 加行號(只計算有字符的行) cat -ns f1 加行號(壓縮空行) cat -v f1 能看windows文件的M`符號 cat -T f1 能夠顯示里面的tab空位,顯示為^I cat -A f1…

    Linux干貨 2016-08-07
欧美性久久久久