nginx Keepalived高可用集羣

1、Keepalived高可用

一、簡介html

Keepalived軟件起初是專爲LvS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP功能。所以,Keepalived除了可以管理LvS軟件外,還能夠做爲其餘服務(例如: Nginx、 Haproxy、MySQL等)的高可用解決方案軟件。前端

Keepalived軟件主要是經過VRRP協議實現高可用功能的。VRRP是 Virtual router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它可以保證當個別節點宕機時,整個網絡能夠不間斷地運行。因此, Keepalived一方面具備配置管理LvS的功能,同時還具ios

有對LVS下面節點進行健康檢査的功能,另外一方面也可實現系統網絡服務的高可用功能。Keepalived軟件的官方站點是http://www.keepalived.orgnginx

二、Keepalived服務的三個總要功能數據庫

1).管理LVS負載均衡軟件
早期的Lvs軟件,須要經過命令行或腳本實現管理,而且沒有針對LVS節點的健康檢查功能。爲了解決LVS的這些使用不便的問題, Keepalived就誕生了,能夠說,Keepalived軟件起初是專爲解決Lvs的問題而誕生的。所以, Keepalived和Lvs的感情很深,它們的關係如同夫妻同樣,能夠緊密地結合,愉快地工做。 Keepalived能夠經過讀取自身的配置文件,實現經過更底層的接口直接管理LVS的配置以及控制服務的啓動、中止等功能,這使得LVS的應用更加簡單方便了。

2).實現對LVS集羣節點健康檢查功能( healthcheck)
Keepalived能夠經過在自身的 keepalived.conf文件裏配置Lvs的節點IP和相關參數實現對LVS的直接管理;除此以外,當LVS集羣中的某一個甚至是幾個節點服務器同時發生故障沒法提供服務時, Keepalived服務會自動將失效的節點服務器從LVS的正常轉發隊列中清除出去,並將請求調度到別的正常節點服務器上,從而保證最終用戶的訪問不受影響;當故障的節點服務器被修復之後, Keepalived服務又會自動地把它們加入到正常轉發隊列中,對客戶提供服務。

3).做爲系統網絡服務的高可用功能( failover)
Keepalived能夠實現任意兩臺主機之間,例如 Master和 Backup主機之間的故障轉移和自動切換,這個主機能夠是普通的不能停機的業務服務器,也能夠是LVS負載均衡、 Nginx反向代理這樣的服務器。
Keepalived高可用功能實現的簡單原理爲,兩臺主機同時安裝好 Keepalived軟件並啓動服務,開始正常工做時,由角色爲 Master的主機得到全部資源並對用戶提供服務,角色爲 Backup的主機做爲 Master主機的熱備;當角色爲 Master的主機失效或出現故障時,角色爲 Backup的主機將自動接管 Master主機的全部工做,包括接管vIP資源及相應資源服務;而當角色爲 Master的主機故障修復後,又會自動接管回它原來處理的工做,角色爲 Backup的主機則同時釋放 Master主機失效時它接管的工做,此時,兩臺主機將恢復到最初啓動時各自的原始角色及工做狀態。

三、Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是經過RRP( Virtual router Redundancy Protocol,虛擬路由器冗餘協議)來實現的。
在 Keepalived服務正常工做時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備 Backup節點本身還活着,當主 Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主 Master節點的心跳了,因而調用自身的接管程序,接管主 Master節點的I資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的P資源及服務,恢復到原來的備用角色。

那麼,什麼是VRRP呢?
VRRP,全稱 Virtual Router Redundancy Protocol,中文名爲虛擬路由冗餘協議,VRRP的出現就是爲了解決靜態路由的單點故障問題,VRRP是經過一種競選機制來將路由的任務交給某臺VRRP路由器的。
VRRP早期是用來解決交換機、路由器等設備單點故障的,下面是交換、路由的Master和 Backup切換原理描述,一樣適用於 Keepalived的工做原理。在一組VRRP路由器集羣中,有多臺物理VRRP路由器,可是這多臺物理的機器並非同時工做的,而是由一臺稱爲 Master的機器負責路由工做,其餘的機器都是Backup。 Master角色並不是一成不變的,VRRP會讓每一個VRRP路由參與競選,最終獲勝的就是 Master。獲勝的 Master有一些特權,好比擁有虛擬路由器的IP地址等,擁有系統資源的 Master負責轉發發送給網關地址的包和響應ARP請求。
VRRP經過競選機制來實現虛擬路由器的功能,全部的協議報文都是經過IP多播( Multicast)包(默認的多播地址224.0.0.18)形式發送的。虛擬路由器由VRID(範圍0-255)和一組IP地址組成,對外表現爲一個周知的MAC地址:00-00-5E-00-01-VRID}。因此,在一個虛擬路由器中,無論誰是 Master,對外都是相同的MAC和IP(稱之爲VIP)。客戶端主機並不須要因 Master的改變而修改本身的路由配置。對它們來講,這種切換是透明的。

在一組虛擬路由器中,只有做爲 Master的RRP路由器會一直髮送VRRP廣播包( VRRP Advertisement messages),此時 Backup不會搶佔 Master當 Master不可用時,Backup就收不到來自 Master的廣播包了,此時多臺 Backup中優先級最高的路由器會搶佔爲 Master。這種搶佔是很是快速的(可能只有1秒甚至更少),以保證服務的連續性。出於安全性考慮,VRRP數據包使用了加密協議進行了加密。

總結以下:
Keepalived高可用對之間是經過VRRP通訊的。vim

1)VRRP,全稱 Virtual Router Redundancy Protocol,中文名爲虛擬路由冗餘協議,VRRP的出現是爲了解決靜態路由的單點故障。安全

2)VRRP是經過一種競選協議機制來將路由任務交給某臺VRRP路由器的。服務器

3)VRRP用IP多播的方式(默認多播地址(224.0.0.18))實現高可用對之間通訊。網絡

4)工做時主節點發包,備節點接包,當備節點接收不到主節點發的數據包的時候,就啓動接管程序接管主節點的資源。備節點能夠有多個,經過優先級竟選,但通常 Keepalived系統運維工做中都是一對。app

5)VRRP使用了加密協議加密數據,但 Keepalived官方目前仍是推薦用明文的方式配置認證類型和密碼。

Keepalived服務的工做原理:

Keepalived高可用對之間是經過VRRP進行通訊的,ⅤRRP是經過竟選機制來肯定主備的,主的優先級高於備,所以,工做時主會優先得到全部的資源,備節點處於等待狀態,當主掛了的時候,備節點就會接管主節點的資源,而後頂替主節點對外提供服務。

在 Keepalived服務對之間,只有做爲主的服務器會一直髮送VRRP廣播包,告訴備它還活着,此時備不會搶佔主,當主不可用時,即備監聽不到主發送的廣播包時,就會啓動相關服務接管資源,保證業務的連續性。接管速度最快能夠小於1秒。

2、Keepalived高可用服務搭建準備

一、安裝keepalived環境說明

二、安裝Keepalived軟件(在LB01和LB02上分別安裝)

yum install ipvsadm keepalived -y

[root@lb01 ~]# rpm -qa keepalived
keepalived-1.3.5-6.el7.x86_64

 三、啓動Keepalived服務並檢查

[root@lb01 ~]# systemctl enable keepalived.service

[root@lb01 ~]# systemctl start keepalived.service

[root@lb01 ~]# ps aux| grep keepalived |grep -v grep
root       1541  0.0  0.1 118676  1396 ?        Ss   22:06   0:00 /usr/sbin/keepalived -D
root       1542  0.0  0.3 122876  3120 ?        S    22:06   0:00 /usr/sbin/keepalived -D
root       1543  0.0  0.2 122876  2412 ?        S    22:06   0:00 /usr/sbin/keepalived -D
啓動後有3個keepalived進程表示安裝正確

 四、keepalived配置文件說明

配置文件路徑爲:

[root@lb01 ~]# ls -l /etc/keepalived/keepalived.conf 
-rw-r--r-- 1 root root 509 9月  19 22:04 /etc/keepalived/keepalived.conf

 keepalived軟件有3個主要功能,其中高可用部分的功能以下:
具有高可用功能的keepalived.conf配置文件包含了2個重要區塊:
1)全局(Global Definitions)部分
這部分主要用來設置keepalived的故障通知機制和Route ID標識。示例代碼以下:

[root@lb01 keepalived]# cat -n  /etc/keepalived/keepalived.conf
     1    ! Configuration File for keepalived
     2    
     3    global_defs {
     4       notification_email {
     5         acassen@firewall.loc
     6         failover@firewall.loc
     7         sysadmin@firewall.loc
     8       }
     9       notification_email_from Alexandre.Cassen@firewall.loc
     10       smtp_server 127.0.0.1
     11       smtp_connect_timeout 30
     12       router_id lb01
     13     }

參數說明:
第1行是註釋,!開頭和#號開頭同樣,都是註釋。
第3~8行是定義服務故障報警的Email地址,做用是當服務發生切換或RS節點等有故障時,發報警郵件。這幾行時可選配置,notification_email指定在keepalived發生事件時須要發送的Email地址,能夠有多個,每行一個。
第9行是指定發送郵件的發送人,即發件人地址,也是可選的配置。
第10行smtp_server指定發送郵件的smtp服務器,若是本機開啓了sendmail和postfix,既可使用上面默認配置實現郵件發送,也是可選配置。
第11行smtp_connect_timeout是鏈接smtp的超時時間,也是可選配置。
第12行是keepalived服務器的路由標識(route_id)。在同一個局域網內,這個標識是惟一的。
    大括號"{}",用來分隔區塊,要成對出現。若是漏寫了半個大括號,keepalived運行時不會報錯,但也不會獲得預期的結果,另外,因爲區塊間存在多層嵌套關係,所以很容易遺漏區塊結尾處的大括號。
更多參數信息請執行man keepalived.conf得到。

2)VRRP實例定義區塊(VRRP instance(s))部分
這部分主要用來定義具體服務的實例配置,包括keepalived準備狀態、接口、優先級、認證方式和IP信息等,示例代碼以下:

    15    vrrp_instance VI_1 {
    16        state MASTER
    17        interface eth0
    18        virtual_router_id 55
    19        priority 150
    20        advert_int 1
    21        authentication {
    22            auth_type PASS
    23            auth_pass 1111
    24        }
    25        virtual_ipaddress {
    26                    192.168.200.16
    27                    192.168.200.17
    28                    192.168.200.13
    29        }
    30    }

參數說明:
第15行表示定義一個vrrp_instance實例,名字是VI_1,每一個vrrp_instance實例能夠認爲是keepalived服務的一個實例或者做爲一個業務服務,在keepalived服務配置中,這樣的vrrp_instance實例能夠有多個。注意存在於主節點中的vrrp_instance實例在備節點中也要存在,這樣才能實現故障切換接管。
第16行state MASTER表示當前實例VI_1的角色狀態,當前角色爲MASTER,這個狀態只能有MASTER和BACKUP兩種狀態,而且須要大寫這些字符,其中MASTER爲正式工做的狀態,BACKUP爲備用的狀態。當MASTER所在的服務器故障失效時,BACKUP所在的服務器會接管故障的MASTER繼續提供服務。
第17行interface爲網絡通訊接口,對外提供服務的網絡接口,如eth0、eth1。
第18行virtual_router_id爲虛擬路由ID標識,這個標識最好是一個數字而且要在一個keepalived.conf配置中是惟一的。可是MASTER和BACKUP配置中相同實例的virtual_router_id又必須是一致的,不然將出現腦裂問題。
第19行priority爲優先級,其後面的數值也是一個數字,數字越大標識實例優先級越高。在同一個vrrp_instance實例裏,MASTER的優先級配置要高於BACKUP的。若MASTER的priority值爲150,那麼BACKUP的priority必須小於150,通常建議隔50以上爲佳,例如設置BACKUP的priority爲100或更小的數值。
第20行advert_int爲同步通知間隔,MASTER與backup之間通訊檢查的時間間隔,單位爲秒,默認爲1。
第21~24行authentication
爲權限認證配置,包含認證類型(auth_type)和認證密碼(auth_pass)。認證類型有PASS(Simple Passwd(suggested)、AH(IPSEC)(notrecommended))兩種,官方推薦使用的類型爲PASS。驗證密碼爲明文方式,作好長度不要超過8個字符,建議用4位的數字,同一vrrp實例的MASTER與BACKUP使用相同的密碼才能正常通訊。
第25~29行virtual_ipaddress爲虛擬IP地址。能夠配置多個IP地址,每一個地址佔一行,配置時最好明確指定子網掩碼以及虛擬IP綁定的網路接口。不然,子網掩碼默認是32位,綁定的接口和前面的interface參數配置的一致。注意,這裏的虛擬IP就是在工做中須要和域名綁定的IP,即和配置的高可用服務監聽的IP要保持一致。

3、keepalived高可用配置

一、配置keepalived實現單實例單IP自動漂移接管
LB01 MASTER的keepalived.conf配置文件配置以下:

[root@lb01 keepalived]# cd /etc/keepalived/
[root@lb01 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb01            #id爲lb01,不一樣的keepalived.conf此ID要惟一;
}

vrrp_instance VI_1 {        #實例名爲VI_1,相同實例的備節點名字要和這個相同;
    state MASTER            #狀態爲MASTER,備節點狀態須要爲BACKUP;
    interface ens33            #通訊接口爲ens33,此參數備節點設置和主節點相同;
    virtual_router_id 55    #實例ID爲55,keepalived.conf裏惟一;
    priority 150            #優先級爲150,備節點的優先級必須比此數字低;
    advert_int 1            #通訊檢查間隔時間,默認爲1秒;
    authentication {
        auth_type PASS        #PASS認證類型,此參數備節點設置和主節點相同;
        auth_pass 1111        #密碼是1111,此參數備節點設置和主節點相同;
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
        #虛擬IP,即VIP爲192.168.200.16,子網掩碼爲24位,綁定接口爲ens33,別名爲ens33:1,此參數備節點設置和主節點相同;
    }
    }
}

重啓並查看是否有虛擬IP192.168.200.16

[root@lb01 keepalived]# systemctl restart keepalived.service
[root@lb01 ~]# ip add | grep 192.168.200.16
    inet 192.168.200.16/24 scope global ens33

LB02 BACKUP的keepalived.conf配置文件配置以下:

[root@lb02 ~]# cd /etc/keepalived/
[root@lb02 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02                #id爲lb02;
}

vrrp_instance VI_1 {
    state BACKUP                #狀態爲BACKUP;
    interface ens33
    virtual_router_id 55
    priority 100                #優先級爲100;
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
    }
}

重啓並查看是否有虛擬IP192.168.200.16

[root@lb02 keepalived]# systemctl restart keepalived.service
[root@lb02 keepalived]# ip add | grep 192.168.200.16
[root@lb02 keepalived]# 

說明:由於主節點lb01活着的時候,lb02不會接管VIP192.168.200.16,若是lb02有VIP信息,說明高可用裂腦了,裂腦是2臺服務器爭搶同一資源致使的。
當2臺服務器爭搶同一IP資源時,通常要先考慮排查兩個地方:
主備2臺服務器之間是否通訊正常,若是不正常是否有防火牆阻擋?
主備2臺服務器對應的keepalived.conf配置文件是否有錯誤?例如,是否同一實例的virtual_route_id配置不一致。

進行高可用主備服務器切換
停掉主服務器上的keepalived服務或關閉主服務器,操做及檢查步驟以下:
[root@lb01 ~]# systemctl stop keepalived.service
[root@lb01 ~]# ip add | grep 192.168.200.16
[root@lb01 ~]#
能夠看到VIP192.168.200.16消失了,此時查看BACKUP備服務器,看是否會有VIP 192.168.200.16出現:
[root@lb02 keepalived]# ip add | grep 192.168.200.16
    inet 192.168.200.16/24 scope global ens33
能夠看到備節點lb02已經接管綁定了192.168.200.16這個VIP,這期間備節點還會發送ARP廣播,讓全部的客戶端更新本地的ARP表,以便客戶端訪問新接管VIP服務的節點。
此時若是再啓動主服務器的keepalived服務,主服務器就會接管回VIP 192.168.200.16,啓動後能夠觀察下主備的IP漂移狀況,備服務器是否釋放了IP?主服務器是否又接管了IP?
主節點啓動keepalived服務後,發現很快就又接管了VIP 192.168.200.16,結果以下:
[root@lb01 ~]# systemctl start keepalived.service
[root@lb01 ~]# ip add | grep 192.168.200.16
    inet 192.168.200.16/24 scope global ens33
與此同時備節點上的VIP 192.168.200.16則被釋放了,以下:
[root@lb02 keepalived]# ip add | grep 192.168.200.16
[root@lb02 keepalived]#
這樣就實現了單實例keepalived服務IP自動漂移接管了,VIP漂移到了新機器新服務上,用戶的訪問請求天然就會找新機器新服務了。

4、keepalived高可用服務器的"裂腦"問題

一、什麼是裂腦?

因爲某些緣由,致使兩臺高可用服務器對在指定時間內,沒法檢測到對方的心跳消息,各自取得資源及服務器的全部權,而此時的兩臺高可用服務器都還活着並在正常運行,這樣就會致使同一IP或服務在兩端同時存在而發生衝突。最嚴重的是兩臺主機佔用同一個VIP地址,當用戶寫入數據時可能會分別寫入到兩端,這可能會致使服務器兩端的數據不一致或形成數據丟失,這種狀況就被成爲裂腦。

致使裂腦發生的緣由
通常來講,裂腦的發生,有如下幾種緣由:
(1)高可用服務器對之間心跳線鏈路發生故障,致使沒法正常通訊。
    心跳線壞了(包括斷了,老化)。
    網卡及相關驅動壞了,IP配置及衝突問題(網卡直連)。
    心跳線間鏈接的設備故障(網卡及交換機)。
    仲裁的機器出問題(採用仲裁的方案)。
(2)高可用服務器上開啓了 iptables防火牆阻擋了心跳消息傳輸。

(3)高可用服務器上心跳網卡地址等信息配置不正確,致使發送心跳失敗。

(4)其餘服務配置不當等緣由,如心跳方式不一樣,心跳廣播衝突、軟件Bug等。
二、解決裂腦的常見方案
在實際生產環境中,咱們能夠從如下幾個方面來防止裂腦問題的發生

1)同時使用串行電纜和以太網電纜鏈接,同時用2條心跳線路,這樣一條線路壞了,另外一條仍是好的,依然能傳送心跳消息。

2)當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊設備支持,如 Stonith、fence)。至關於備節點接收不到心跳消息,經過單獨的線路發送關機命令關閉主節點的電源。

3)作好對裂腦的監控報警(如郵件及手機短信等或值班),在問題發生時人爲第一時間介入仲裁,下降損失。例如,百度的監控報警短信就有上行和下行的區別。報警信息發送到管理員手機上,管理員能夠經過手機回覆對應數字或簡單的字符串操做返回給服務器,讓服務器根據指令自動處理相應故障,這樣解決故障的時間更短。

固然,在實施高可用方案時,要根據業務實際需求肯定是否能容忍這樣的損失。對於通常的網站常規業務,這個損失是可容忍的。

三、解決 Keepalived裂腦的常見方案
做爲互聯網應用服務器的高可用,特別是前端Web負載均衡器的高可用,裂腦的問題對普通業務的影響是能夠忍受的,若是是數據庫或者存儲的業務,通常出現裂腦問題就很是嚴重了。所以,能夠經過增長冗餘心跳線路來避免裂腦問題的發生,同時增強對系統的監控,以便裂腦發生時人爲快速介入解決問題。

若是開啓防火牆,必定要讓心跳消息經過,通常經過容許IP段的形式解決。

能夠拉一條以太網網線或者串口線做爲主被節點心跳線路的冗餘。

開發監測程序經過監控軟件(例如 Nagios)監測裂腦。

下面是生產場景檢測裂腦故障的一些思路:

1)簡單判斷的思想:只要備節點出現VIP就報警,這個報警有兩種狀況,一是主機宕機了備機接管了;二是主機沒宕,裂腦了。無論屬於哪一個狀況,都進行報警,而後由人工查看判斷及解決。

2)比較嚴謹的判斷:備節點出現對應VIP,而且主節點及對應服務(若是能遠程鏈接主節點看是否有VP就更好了)還活着,就說明發生裂腦了。

5、Keepalived雙機雙主模式配置

keepalived支持多實例多業務雙向主備模式,即A業務在lb01上是主模式,在lb02上是備模式,而B業務在lb01上是備模式,在lb02上是主模式,具體配置以下:

在LB01上配置以下:

[root@lb01 keepalived]# cat keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb01
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 55
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 56
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.17/24 dev ens33 lable ens33:2
    }
}

在LB02上配置以下:

[root@lb02 keepalived]# cat keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 56
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.17/24 dev ens33 lable ens33:2
    }
}

 重啓服務

systemctl restart keepalived.service

LB01重啓keepalived服務後結果以下:
[root@lb01 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"
    inet 192.168.200.16/24 scope global ens33

LB02重啓keepalived服務後結果以下:
[root@lb02 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"
    inet 192.168.200.17/24 scope global ens33

 停掉任意一端服務器或者keepalived服務,查看VIP會不會漂移到另外一端

停掉LB01上的keepalived服務結果以下:
[root@lb01 keepalived]# systemctl stop keepalived.service 
[root@lb01 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"

查看LB02服務器上的VIP接管狀況,結果以下:
[root@lb02 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"
    inet 192.168.200.17/24 scope global ens33
    inet 192.168.200.16/24 scope global secondary ens33

啓動LB01上的keepalived服務後,很快就會接管回了本身的VIP。
[root@lb01 keepalived]# systemctl stop keepalived.service
[root@lb01 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"
    inet 192.168.200.16/24 scope global ens33

再次查看LB02上的VIP,結果以下:
[root@lb02 keepalived]# ip add |egrep "192.168.200.16|192.168.200.17"
    inet 192.168.200.17/24 scope global ens33

 6、nginx負載均衡配合Keepalived服務案例實戰

在LB01和LB02上分別安裝nginx,並作以下配置:

nginx編譯安裝參考:http://www.javashuo.com/article/p-bqddaohw-bb.html

[root@lb01 ~]# cat /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools   {
        server 192.168.100.107:80   weight=1;
        server 192.168.100.108:80   weight=1;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    }
    server {
        listen       192.168.200.16:80;
        server_name  www.dmtest.com;
        location / {
        proxy_pass http://www_server_pools;
	proxy_set_header Host $host;
    	proxy_set_header X-Forwarded-For $remote_addr;
        }
         
    location /status {
            check_status;
  
            access_log   off;
        }
    }
}

說明:上面的配置僅代理了www.dmtest.com域名。

 

keepalived單實例配置以下:

在LB01上配置以下:

[root@lb01 keepalived]# cd /etc/keepalived/
[root@lb01 keepalived]# vim keepalived.conf
! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb01            #id爲lb01,不一樣的keepalived.conf此ID要惟一;
}
 
vrrp_instance VI_1 {        #實例名爲VI_1,相同實例的備節點名字要和這個相同;
    state MASTER            #狀態爲MASTER,備節點狀態須要爲BACKUP;
    interface ens33            #通訊接口爲ens33,此參數備節點設置和主節點相同;
    virtual_router_id 55    #實例ID爲55,keepalived.conf裏惟一;
    priority 150            #優先級爲150,備節點的優先級必須比此數字低;
    advert_int 1            #通訊檢查間隔時間,默認爲1秒;
    authentication {
        auth_type PASS        #PASS認證類型,此參數備節點設置和主節點相同;
        auth_pass 1111        #密碼是1111,此參數備節點設置和主節點相同;
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
        #虛擬IP,即VIP爲192.168.200.16,子網掩碼爲24位,綁定接口爲ens33,別名爲ens33:1,此參數備節點設置和主節點相同;
    }
    }
}

 在LB02上配置以下:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
    }
}
相關文章
相關標籤/搜索