keepalived高可用介紹

keepalived 是 Linux 一個輕量級的高可用解決方案,提供了心跳檢測和資源接管、檢測集群中的系統服務,在集群節點間轉移共享IP 地址的所有者等。

工作原理

keepalived 通過 VRRP(virtual router redundancy protocol)虛擬路由冗余協議來實現高可用。在這個協議里會將多態功能相同的路由組成一個小組,這個小組會有一個 master 角色 和 N(N >=1)個 backup 角色。

Keepalived 有三個模塊:core、check、vrrp。

其中:

core 模塊 為 Keepalived 的核心,負責主進程啟動、維護以及全局配置文件的加載和解析;

check 模塊負責 健康檢查;

vrrp 負責實現 vrrp 協議。

keepalived 的體系結構

keepalived 的體系 結構從整體上分為 兩層,分別是用戶層 (User Space)和 內核空間層(Kernel Space)。

內核空間層處于最底層,它包括 IPVS 和 NETLINK 兩個模塊。IPVS 模塊是 Keepalived 引入 的一個第三方模塊,通過 IPVS 可以實現基于 IP 的負載均衡集群。IPVS 默認包含在 LVS 集群軟件中。而對于 LVS 集群軟件,在 LVS 集群中, IPVS 安裝在 一臺叫 Director Server 的服務器上,同時在 Director Server 上虛擬出一個 IP 地址對外提供服務,而用戶必須通過這個虛擬 IP 地址才能訪問服務。這個虛擬 IP 一般成為 LVS 的 VIP,即 Virtual IP。訪問的請求首先經過 VIP 到達 Director Server ,然后有 Director Server 從服務器集群節點中選取一個 服務節點響應用戶的請求。

Keepalived的配置文件解析

Keepalived的核心組件,包含了一系列功能模塊,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper 和Netlink Reflector,下面介紹每個模塊所實現的功能如下:

1、WatchDog

WatchDog是計算機可靠性領域中一個極為簡單又非常有效的檢測工具,它的工作原理是針對被監視的目標設置一個計數器和一個閾值,WatchDog會自己增加此計數值,然后等待被監視的目標周期性地重置該計數值。一旦被監控目標發生錯誤,就無法重置此計數值,WatchDog就會檢測到,于是采取對應的恢復措施,例如重啟或關閉。

在linux中很早就引入了WatchDog功能,而Keepalived正是通過WatchDog的運行機制來監控Checkers和VRRP進程的。

2、 Checkers

這是Keepalived最基礎的功能,也是最主要的功能,可實現對服務器運行狀態檢測和故障隔離。

3、 VRRP Stack

這是Keepalived后來引入的VRRP功能,可以實現HA集群中失敗切換(Failover)功能。Keepalived通過VRRP功能再結合LVS負載均衡軟件即可部署一個高性能的負載均衡集群系統。

4、 IPVS wrapper

這是IPVS功能的一個實現。IPVS wrapper模塊可以將設置好的IPVS規則發送到內核空間并提交給IPVS模塊,最終實現IPVS模塊的負載均衡功能。

5、 Netlink Reflector

用來實現高可用集群中Failover時虛擬IP(VIP)的設置和切換。Netlink Reflector的所有請求最后都發送到內核空間層的NETLINK模塊來完成。

配置文件說明

keepalived配置文件按層級和模塊劃分的,每層由"{ }"來界定。 在主配置文件中可以通過include來涵蓋多個子配置文件。 語法說明:

BOOL: on|off|true|false|yes|no

TIMER: 以秒為單位的時間值,包括小數秒,如3,2.71828。計時器的分辨率是微妙。

關于腳本引用:

雙引號"字符串中嵌入其他雙引號或空格,那么字符串將僅在帶引號的字符串之后結束(如:“abcd” efg h jkl “mnop” 等同于 “abcd efg h jkl mnop”;)。

對于使用參數指定腳本,不帶引號的空格將分隔參數。如果參數需要包含空格,則應將其括在單引號(')中

配置文件結構

! Configuration File for keepalived# 全局定義
global_defs {# 指定接收通知的郵箱地址列表notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 指定發件人的郵箱地址notification_email_from Alexandre.Cassen@firewall.loc# SMTP 服務器地址,用于發送郵箱通知smtp_server 192.168.200.1# SMTP 連接超時時間smtp_connect_timeout 30# 標識當前節點的唯一 IDrouter_id LVS_DEVEL# 跳過檢查 VRRP 廣播地址vrrp_skip_check_adv_addr# 其余嚴格的 VRRP 模式vrrp_strict# 設置 GARP 的時間間隔vrrp_garp_interval 0# 設置 GNA 的時間間隔vrrp_gna_interval 0
}# VRRP 實例
vrrp_instance VI_1 {# 當前節點的角色 (MASTER 或 BACKUP)。主節點設置為 MASTER,從節點設置為 BACKUPstate MASTER# 綁定的網絡接口(如 eth0)interface eth0# 虛擬路由的 ID(范圍0 - 255),同一組中的所有節點必須使用相同的值virtual_router_id 51# 節點的優先級(范圍1 - 254),數值越高優先級越高priority 100# VRRP 廣播間隔時間(秒)advert_int 1# VRRP 認證信息authentication {# 認證類型(PASS 表示簡單密碼認證)auth_type PASS# 認證密碼auth_pass 1111}# 虛擬 IP 地址列表,這些 IP 將綁定在當前節點的網絡接口上virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}
}# 虛擬服務器
# 定義一個虛擬服務器,監聽指定的IP 和端口(如:192.168.200.100 443)
virtual_server 192.168.200.100 443 {# 健康檢查的間隔時間(秒)delay_loop 6# 負載均衡算法(如 rr 表示輪訓)lb_algo rr# 負載均衡模式(如 NAT 表示網絡地址轉換)lb_kind NAT# 會話保持時間(秒)persistence_timeout 50# 協議類型(TCP)protocol TCP# 定義真實后端服務器real_server 192.168.201.100 443 {# 權重值,用于分配流量的比例weight 1# 使用 SSL 請求進行健康檢查SSL_GET {# 檢查的目標 URL 及其 MD5 摘要值url {path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}# 連接超時時間connect_timeout 3# 失敗后重試時間retry 3# 重試前的延遲時間delay_before_retry 3}}
}

配置文件包括以下幾個模塊:

1.GLOBAL CONFIGURATION

包含配置文件中的global_defs、static_ipaddress、static_route區域,負責定義郵件的相關配置、route_id、vrrp配置、多播地址、節點的ip和路由信息等

global_defs 全局配置
vrrpd1. vrrp_script添加一個周期性執行的腳本。腳本的退出狀態碼會被調用它的所有的VRRP Instance記錄。2. vrrp_sync_group將所有相關的VRRP實例定義在一起,作為一個VRRP Group,如果組內的任意一個實例出現問題,都可以實現Failover3. garp_group4. vrrp_instance
LVS配置
virtual_serverreal_server
real_server中的健康檢查
HTTP_GET or SSL_GET
TCP_CHECK
TCP_CHECK
DNS_CHECK
DNS_CHECK

全局配置模塊

! Configuration File for keepalived
global_defs {                                     #全局定義部分notification_email {                          #設置報警郵件地址,可設置多個acassen@firewall.loc                      #接收通知的郵件地址failover@firewall.loc}                        notification_email_from test0@163.com         #設置 發送郵件通知的地址smtp_server smtp.163.com                      #設置 smtp server 地址,可是ip或域名.可選端口號 (默認25)smtp_connect_timeout 30                       #設置 連接 smtp server的超時時間router_id LVS_DEVEL                           #主機標識,用于郵件通知vrrp_strict                                   #嚴格執行VRRP協議規范,此模式不支持節點單播script_user keepalived_script                 #指定運行腳本的用戶名和組。默認使用用戶的默認組。如未指定,默認為keepalived_script 用戶,如無此用戶,則使用rootenable_script_security                        #如過路徑為非root可寫,不要配置腳本為root用戶執行。
}

2.BFD CONFIGURATION

用于快速檢測系統之間的通信故障,并在出現故障時通知上層應用。

它具有兩優點:

對網絡設備間任意類型的雙向轉發路徑提供快速、輕負荷的故障檢測

用單一的機制對任何介質、任何協議層進行實時檢測,并支持不同的檢測時間與開銷

3. VRRPD CONFIGURATION

包含配置文件中的vrrp_script、vrrp_instance、vrrp_sync_group、garp_group區域,負責定義每個vrrp虛擬路由器

vrrp_script配置

作用:添加一個周期性執行的腳本。腳本的退出狀態碼會被調用它的所有的VRRP Instance記錄。
注意:至少有一個VRRP實例調用它并且優先級不能為0.優先級范圍是1-254.
vrrp_script <SCRIPT_NAME> {...}
選項說明:
script "/path/to/somewhere":指定要執行的腳本的路徑。
interval <INTEGER>:指定腳本執行的間隔。單位是秒。默認為1s。
timeout <INTEGER>:指定在多少秒后,腳本被認為執行失敗。
weight <-254 --- 254>:調整優先級。默認為2.
rise <INTEGER>:執行成功多少次才認為是成功。
fall <INTEGER>:執行失敗多少次才認為失敗。
user <USERNAME> [GROUPNAME]:運行腳本的用戶和組。
init_fail:假設腳本初始狀態是失敗狀態。
解釋:
weight: 
1. 如果腳本執行成功(退出狀態碼為0),weight大于0,則priority增加。
2. 如果腳本執行失敗(退出狀態碼為非0),weight小于0,則priority減少。
3. 其他情況下,priority不變

vrrp_instance

命令說明:
state MASTER|BACKUP:指定該keepalived節點的初始狀態。
interface eth0:vrrp實例綁定的接口,用于發送VRRP包。
use_vmac [<VMAC_INTERFACE>]:在指定的接口產生一個子接口,如vrrp.51,該接口的MAC地址為組播地址,通過該接口向外發送和接收VRRP包。
vmac_xmit_base:通過基本接口向外發送和接收VRRP數據包,而不是通過VMAC接口。
native_ipv6:強制VRRP實例使用IPV6.(當同時配置了IPV4和IPV6的時候)
dont_track_primary:忽略VRRP接口的錯誤,默認是沒有配置的。
track_interface {eth0eth1 weight <-254-254>...
}:如果track的接口有任何一個出現故障,都會進入FAULT狀態。
track_script {<SCRIPT_NAME><SCRIPT_NAME> weight <-254-254>
}:添加一個track腳本(vrrp_script配置的腳本。)
mcast_src_ip <IPADDR>:指定發送組播數據包的源IP地址。默認是綁定VRRP實例的接口的主IP地址。
unicast_src_ip <IPADDR>:指定發送單薄數據包的源IP地址。默認是綁定VRRP實例的接口的主IP地址。
version 2|3:指定該實例所使用的VRRP版本。
unicast_peer {<IPADDR>...
}:采用單播的方式發送VRRP通告,指定單播鄰居的IP地址。
virtual_router_id 51:指定VRRP實例ID,范圍是0-255.
priority 100:指定優先級,優先級高的將成為MASTER。
advert_int 1:指定發送VRRP通告的間隔。單位是秒。
authentication {auth_type PASS|AH:指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)。auth_pass 1234:指定認證所使用的密碼。最多8位。
}
virtual_ipaddress {<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.17/24 dev eth1192.168.200.18/24 dev eth2 label eth2:1
}:指定VIP地址。
nopreempt:設置為不搶占。默認是搶占的,當高優先級的機器恢復后,會搶占低優先級的機器成為MASTER,而不搶占,則允許低優先級的機器繼續成為MASTER,即使高優先級的機器已經上線。如果要使用這個功能,則初始化狀態必須為BACKUP。
preempt_delay:設置搶占延遲。單位是秒,范圍是0---1000,默認是0.發現低優先級的MASTER后多少秒開始搶占。
通知腳本:
notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
notify <STRING>|<QUOTED-STRING> [username [groupname]]
# 當停止VRRP時執行的腳本。
notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]
smtp_alert

vrrp_sync_group

作用:將所有相關的VRRP實例定義在一起,作為一個VRRP Group,如果組內的任意一個實例出現問題,都可以實現Failover。vrrp_sync_group VG_1 {group {inside_network     # vrrp instance nameoutside_network    # vrrp instance name...}...
}
說明:
如果username和groupname沒有指定,則以默認的script_user所指定的用戶和組。
1. notify_master /path/to_master.sh [username [groupname]]作用:當成為MASTER時,以指定的用戶和組執行腳本。
2. notify_backup /path/to_backup.sh [username [groupname]]作用:當成為BACKUP時,以指定的用戶和組執行腳本。
3. notify_fault "/path/fault.sh VG_1" [username [groupname]]作用:當該同步組Fault時,以指定的用戶和組執行腳本。
4. notify /path/notify.sh [username [groupname]]作用:在任何狀態都會以指定的用戶和組執行腳本。說明:該腳本會在notify_*腳本后執行。notify可以使用3個參數,如下:$1:可以是GROUP或INTANCE,表明后面是組還是實例。$2:組名或實例名。$3:轉換后的目標狀態。有:MASTER、BACKUP、FAULT。
5. smtp_alert:當狀態發生改變時,發送郵件。
6. global_tracking:所有的VRRP實例共享相同的tracking配置。
注意:腳本文件要加上x權限,同時指令最好寫絕對路徑。

4.LVS CONFIGURATION

包含配置文件中的virtual_server_group、virtual_server區域,負責lvs集群配置

LVS模塊結構:
virtual_server{...real_server{...}
}

virtual_server

virtual_server IP Port | virtual_server fwmark int | virtual_server group string {delay_loop <INT>:健康檢查的時間間隔。lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS調度算法。lb_kind NAT|DR|TUN:LVS模式。persistence_timeout 360:持久化超時時間,單位是秒。默認是6分鐘。persistence_granularity:持久化連接的顆粒度。protocol TCP|UDP|SCTP:4層協議。ha_suspend:如果virtual server的IP地址沒有設置,則不進行后端服務器的健康檢查。virtualhost <STRING>:為HTTP_GET和SSL_GET執行要檢查的虛擬主機。如virtualhost www.felix.comsorry_server <IPADDR> <PORT>:添加一個備用服務器。當所有的RS都故障時。sorry_server_inhibit:將inhibit_on_failure指令應用于sorry_server指令。alpha:在keepalived啟動時,假設所有的RS都是down,以及健康檢查是失敗的。有助于防止啟動時的誤報。默認是禁用的。omega:在keepalived終止時,會執行quorum_down指令所定義的腳本。quorum <INT>:默認值1. 所有的存活的服務器的總的最小權重。quorum_up <STRING>:當quorum增長到滿足quorum所定義的值時,執行該腳本。quorum_down <STRING>:當quorum減少到不滿足quorum所定義的值時,執行該腳本。
}

real_server

real_server IP Port {weight <INT>:給服務器指定權重。默認是1.inhibit_on_failure:當服務器健康檢查失敗時,將其weight設置為0,而不是從Virtual Server中移除。notify_up <STRING>:當服務器健康檢查成功時,執行的腳本。notify_down <STRING>:當服務器健康檢查失敗時,執行的腳本。uthreshold <INT>:到這臺服務器的最大連接數。lthreshold <INT>:到這臺服務器的最小連接數。
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77360.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77360.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據分享:汽車測評數據

說明&#xff1a;如需數據可以直接到文章最后關注獲取。 1.數據背景 Car Evaluation汽車測評數據集是一個經典的機器學習數據集&#xff0c;最初由 Marko Bohanec 和 Blaz Zupan 創建&#xff0c;并在 1997 年發表于論文 "Classifier learning from examples: Common …

NLP簡介及其發展歷史

自然語言處理&#xff08;Natural Language Processing&#xff0c;簡稱NLP&#xff09;是人工智能和計算機科學領域中的一個重要分支&#xff0c;致力于實現人與計算機之間自然、高效的語言交流。本文將介紹NLP的基本概念以及其發展歷史。 一、什么是自然語言處理&#xff1f…

HOOPS Visualize:跨平臺、高性能的三維圖形渲染技術解析

在當今數字化時代&#xff0c;三維可視化技術已成為眾多行業的核心競爭力。HOOPS Visualize作為一款功能強大的三維圖形渲染引擎&#xff0c;憑借其卓越的渲染能力、跨平臺支持、豐富的交互功能、高度定制化以及快速部署等特性&#xff0c;為開發人員提供了構建高質量、高性能3…

藍橋杯速成刷題清單(上)

一、1.排序 - 藍橋云課 &#xff08;快速排序&#xff09;算法代碼&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Java面試黃金寶典44

1. 查看進程的運行堆棧信息命令 gstack gstack 是 Linux 系統下用于查看指定進程運行時堆棧信息的工具。當程序出現崩潰、死鎖或者性能瓶頸等問題時,借助 gstack 可以查看進程中各個線程的調用棧,從而輔助開發人員定位問題。 定義 gstack 本質上是一個封裝了底層 ptrace 系統…

嵌入式硬件篇---TOF陀螺儀SPI液晶屏

文章目錄 前言1. TOF傳感器&#xff08;Time of Flight&#xff09;原理STM32使用方法硬件連接SDASCLVCC\GND 軟件配置初始化I2C外設庫函數驅動&#xff1a;讀取數據 2. 陀螺儀&#xff08;如MPU6050&#xff09;原理STM32使用方法硬件連接SDA/SCLINTVCC/GND 軟件配置初始化I2C…

【scikit-learn基礎】--『預處理』之 正則化

數據的預處理是數據分析&#xff0c;或者機器學習訓練前的重要步驟。 通過數據預處理&#xff0c;可以 提高數據質量&#xff0c;處理數據的缺失值、異常值和重復值等問題&#xff0c;增加數據的準確性和可靠性整合不同數據&#xff0c;數據的來源和結構可能多種多樣&#xff…

LeetCode Hot100 刷題筆記(2)—— 子串、普通數組、矩陣

目錄 前言 一、子串 1. 和為 K 的子數組 2. 滑動窗口最大值 3. 最小覆蓋子串 二、普通數組 4. 最大子數組和 5. 合并區間 6. 輪轉數組 7. 除自身以外數組的乘積 8. 缺失的第一個正數 三、矩陣 9. 矩陣置零 10. 螺旋矩陣 11. 旋轉圖像 12. 搜索二維矩陣 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化與配置 1. 設置全局賬戶信息 git config --global user.name "用戶名" # 設置全局用戶名 git config --global user.email "郵箱" # 設置全局郵箱 --global 表示全局生效&#xff0c;若需針對單個倉庫配置&#xff0c;可省略該參數 2.…

教培行業創建自己品牌的重要意義——教育培訓小程序

在競爭激烈的教培行業&#xff0c;創建自身品牌意義重大。 擁有獨特品牌能顯著提升機構競爭力與辨識度。如今教培市場同質化嚴重&#xff0c;一個亮眼的品牌小程序可使機構從眾多競爭者中脫穎而出&#xff0c;讓學員和家長快速識別并記住。 品牌小程序有助于增強信任度和口碑。…

Docker 介紹 · 安裝詳細教程

為什么選擇 Docker&#xff1f; ? 環境一致性 – 告別“在我機器上能跑”的問題&#xff0c;確保開發、測試、生產環境一致。 ? 高效輕量 – 秒級啟動&#xff0c;資源占用遠低于傳統虛擬機。 ? 跨平臺支持 – 可在任何支持 Docker 的環境中運行&#xff0c;包括云服務器、…

GitHub 上開源一個小項目的完整指南

GitHub 上開源一個小項目的完整指南 &#x1f680; 第一步&#xff1a;準備你的項目 在開源之前&#xff0c;確保項目是可用且有一定結構的&#xff1a; ? 最低要求 項目文件清晰、結構合理&#xff08;比如&#xff1a;src/、README.md、LICENSE&#xff09;項目能在本地正…

React 第三十節 使用 useState 和 useEffect Hook實現購物車

不使用 redux 實現 購物車案例 使用 React 自帶的 useState 和 useEffect Hook 即可實現購物車 export default function ShoppingCar() {// 要結算的商品 總數 以及總價const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…

藍橋杯第十一屆省賽C++B組真題解析

藍橋杯第十一屆省賽CB組真題解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一&#xff1a;暴力枚舉所有的日期&#xff0c;記錄有多少個回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…

Python和MicroPython的解釋器區別

Python和MicroPython的解釋器不是同一個&#xff0c;它們在設計目標、實現方式和運行環境上都有顯著的區別。以下是它們的主要區別&#xff1a; 1. 底層實現 Python解釋器&#xff08;CPython&#xff09;&#xff1a; Python的標準解釋器是CPython&#xff08;C語言實現的Pyt…

Cython加密多層目錄中的Python腳本方案

近期有一個VueJavaDocker項目中需要加密Python腳本的需求&#xff0c;調研后決定采用Cython。 使用Cython編譯為二進制 步驟&#xff1a; 安裝Cython&#xff1a;pip install cython創建setup.py&#xff1a; from distutils.core import setup from Cython.Build import c…

力扣DAY40-45 | 熱100 | 二叉樹:直徑、層次遍歷、有序數組->二叉搜索樹、驗證二叉搜索樹、二叉搜索樹中第K小的元素、右視圖

前言 簡單、中等 √ 好久沒更了&#xff0c;感覺二叉樹來回就那些。有點變懶要警醒&#xff0c;不能止步于笨方法&#xff01;&#xff01; 二叉樹的直徑 我的題解 遍歷每個節點&#xff0c;左節點最大深度右節點最大深度當前節點當前節點為中心的直徑。如果左節點深度更大…

頭歌數據庫【數據庫概論】第10-11章 故障恢復與并發控制

第1關&#xff1a;數據庫恢復技術 1、事務的&#xff08; A&#xff09;特性要求事務必須被視為一個不可分割的最小工作單元 A、原子性 B、一致性 C、隔離性 D、持久性 2、事務的&#xff08;C &#xff09;特性要求一個事務在執行時&#xff0c;不會受到其他事務的影響。 A、原…

windows下,cursor連接MCP服務器

1.下載并安裝node 安裝后&#xff0c;在cmd命令框中&#xff0c;輸入命令node -v可以打印版本號&#xff0c;證明安裝完成 2.下載MCP服務器項目 在MCP服務器找到對應項目&#xff0c;這里以server-sequential-thinking為例子 在本地cmd命令窗口&#xff0c;使用下面命令下載…

前端配置husky,commit-lint導致的git提交錯誤:git xx@0.0.0 lint:lint-staged

前端配置husky&#xff0c;commit-lint導致的git提交錯誤&#xff1a;git xx0.0.0 lint:lint-staged git commit -m "xxx"時出現以下報錯&#xff0c;可能是前端配置husky&#xff0c;commit-lint的原因 //報錯信息 git xx0.0.0 lint:lint-staged首先要知道出現這個錯…