vrrp與keepalived

keepalivedcss

Virtual Route Redundancy Protocol,即虛擬路由冗餘協議。它主要是實現路由器可用的容錯協議。也能夠叫作備份路由協議nginx

將多臺路由器(主路由器,備路由器)組成路由器組(Router Group,組中包括MasterBackup,在外部看來就像一臺路由器,擁有一個VIPMaster會發送組播消息,當Backup在指定的時間收不到vrrp包就會認爲master宕掉。而後經過VRRP協議再次競選新的路由器當Master,從而保證路由器的高可用。算法

image.png 

這個虛擬的路由器擁有本身的IP 地址10.100.10.1(這個IP 地址能夠和備份組內的某個路由器的接口地址相同,相同的則稱爲ip擁有者),備份組內的路由器也有本身的IP 地址(如MasterIP 地址爲10.100.10.2Backup IP 地址爲10.100.10.3)。局域網內的主機僅僅知道這個虛擬路由器的IP 地址10.100.10.1,而並不知道具體的Master 路由器的IP 地址10.100.10.2 以及Backup 路由器的IP 地址10.100.10.3 [1]  它們將本身的缺省路由下一跳地址設置爲該虛擬路由器的IP 地址10.100.10.1後端


工做原理:(報文轉發權利的爭奪)bash

路由器開啓VRRP功能後,會根據優先級肯定本身在備份組中的主備角色。主用路由器按期發送VRRP通告報文,通知備份組內的其餘路由器本身工做正常;服務器

備用路由器則啓動定時器等待通告報文的到來。架構

VRRP在不一樣的主用搶佔方式下,主用角色的替換方式不一樣:app

l在搶佔方式下,備用收到VRRP通告報文後,會將本身的優先級與通告報文中的優先級進行比較。若是大於,則成爲主用路由器;不然將保持備用狀態。負載均衡

l在非搶佔方式下,只要主用路由器沒有出現故障,備份組中的路由器即便隨後被配置了更高的優先級也不會成爲主用路由器。主路由器故障後,備用路由器會認爲本身是主用路由器,並對外發送VRRP通告報文。備份組內的路由器根據優先級選舉出主用路由器,承擔報文的轉發功能。ide

 

參考百度百科:

百度百科

現的是路由器的高可用 輕量級 不須要共享存儲


VRRP周邊技術:(主要是交換機中的vrrp)

VRRP,堆疊,端口聚合是三種不一樣的技術。堆疊和端口聚合差別巨大。

堆疊適用於接入交換機端口數量不夠的狀況,沒有真正意義上的冗餘效果。

端口聚合適用於單一設備使用多條線路鏈接的狀況,實現線路級別的冗餘。

VRRP適用於於多套相同設備鏈接的狀況,實現設備級別的冗餘。

 

堆疊簡單粗暴最好啊(堆疊成本高,有錢玩堆疊,沒錢vrrp都用不起。最少要兩臺核心交換機。)

能用堆疊就不要用 hsrp vrrp

能用端口聚合就不要用生成樹。

能用防火牆就不要用路由器。

能在二層解決的問題就不要在三層解決。(能在低層解決的不要留在高層)

 

堆疊,思科vss,華爲cssh3c irf等等,vrrp如今仍是很經常使用的技術,在Linux中的keeplive也是用vrrp技術的。

CSS(Cluster Switch System),又被稱爲集×××換機系統(簡稱爲CSS或堆疊)。

是將幾臺交換機經過專用的堆疊線纜連接起來,對外呈現爲一臺邏輯交換機。

IRF(Intelligent Resilient Framework,智能彈性架構)是H3C自主研發的軟件虛擬化技術。它的核心思想是將多臺設備經過IRF物理端口鏈接在一塊兒

VSS(Virtual Switch SystemCisco將兩臺物理Catalyst 6500系列交換機虛擬成一臺邏輯交換機的虛擬化技術叫作VSS(虛擬交換系統)。

一個VRRP路由器有惟一的標識:VRID,範圍爲0255


EXAMPLE1:場景說明

state】段不管寫Master仍是Backup其實都是其次的,是給人閱讀的,主要優先級仍是看【priority】段,

把nopreempt  設置爲不搶奪VIP

修改MB服務器的  state BACKUP 都爲【備】類型,同時設置 nopreempt  設置爲不搶奪VIP

而後先啓動M服務器,M服務器會成爲【主】,而後啓動B服務器,因爲M的優先級高【priority 100 因此B不會搶奪VIP,這時M宕機,B成爲【主】,接着M恢復正常,因爲設置了nopreempt 因此M不會搶奪VIPB繼續爲【主】而M爲【備】。


同時:



[s@S:/home/s]$cat /etc/keepalived/keepalived.conf

global_defs {

   router_id s_app_ha

}

 

vrrp_instance VI_1 {

    state BACKUP

    nopreempt 

    interface eth0

    virtual_router_id 9

    priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 0009

    }

    virtual_ipaddress {

        10.108.67.9/25

    }

    notify_master "/etc/keepalived/scripts/notify_s_master.sh"

    notify_backup "/etc/keepalived/scripts/notify_s_backup.sh"

}

 

[s@S:/home/s]$cat /etc/keepalived/scripts/notify_s_backup.sh

#!/bin/bash

export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin

LOG_FILE="/tmp/keepalived.log"

echo "`date '+%Y-%m-%d %T'`: start change role to backup" >> "${LOG_FILE}"

#run script

echo "`date '+%Y-%m-%d %T'`: change role to backup finish" >> "${LOG_FI

 

[s@S:/home/s]$cat /etc/keepalived/scripts/notify_s_master.sh

#!/bin/bash

export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin

LOG_FILE="/tmp/keepalived.log"

echo "`date '+%Y-%m-%d %T'`: start change role to master" >> "${LOG_FILE}"

#run script

su -l suser -c "/bin/sh /u/H/stop.sh" >> "${LOG_FILE}"

su -l suser -c "/bin/sh /u/H/start.sh" >> "${LOG_FILE}"

echo "`date '+%Y-%m-%d %T'`: change role to master finish" >> "${LOG_FILE}"


*********************************************************************************************************

 notify_master:噹噹前節點成爲master時,通知腳本執行任務(通常用於啓動某服務或者記錄日誌,好比nginx,haproxy等)

 notify_backup:噹噹前節點成爲backup時,通知腳本執行任務(通常用於關閉某服務或者記錄日誌,好比nginx,haproxy等)

 notify_fault:噹噹前節點出現故障,執行的任務;


EXAMPLE2

KeepAlived+LVS(DR調度器)實現負載均衡的高可用。

KeepAlived的功能:

1. 實現調度器的HA

2. RealServer作健康檢查

3. 動態維護IPVS路由表

 

LVS

lvs的持久鏈接。

ipvsadm -Ln -c

調度算法用於決定LVS如何選擇後端的RealServer

1、輪叫調度(Round Robin(簡稱rr)

2、加權輪叫(Weighted Round Robin)(簡稱wrr)

3、最少連接(Least Connections(LC)


TIPS:

 su -l 和su -的意思同樣(su爲switch user)

應用故障的時候==經過執行外部腳本檢查應用運行狀態,若是異常則中止Keepaliced。

只有主機 keepalived 服務掛了纔會漂移。也就是說重啓keepalived服務會讓vip漂移。

相關文章
相關標籤/搜索