linux keepalived配置參數詳解

本文轉載自:https://blog.csdn.net/weixin_42256765/article/details/103223793感謝分享

keepalived 原理及配置介紹

什麼是 Keepalived 呢,keepalived 觀其名可知,保持存活,在網絡裏面就是保持在線了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,Keepalived 通過請求一個 vip 來達到請求真是 IP 地址的功能,而 VIP 能夠在一臺機器發生故障時候,自動漂移到另外一臺機器上,從來達到了高可用 HA 功能。那說到 keepalived 時不得不說的一個協議就是 VRRP 協議,可以說這個協議就是 keepalived 實現的基礎,那麼首先我們來看看 VRRP 協議;

VRRP 協議

網絡在設計的時候必須考慮到冗餘容災,包括線路冗餘,設備冗餘等,防止網絡存在單點故障,那在路由器或三層交換機處實現冗餘就顯得尤爲重要,在網絡裏面有個協議就是來做這事的,這個協議就是 VRRP 協議,Keepalived 就是巧用 VRRP 協議來實現高可用性 (HA) 的 VRRP 協議。

Keepalived 配置文件詳解

1.global_defs 全局配置

notification_email:指定當 keepalived 出現問題時,發送郵件給哪些用戶。

notification_emai_from:發送郵件時,郵件的來源地址。

smtp_server <DOMAIN|IP> [PORT]:smtp 服務器的地址或域名。默認端口爲 25, 如:smtp_server smtp.felix.com 25

smtp_helo_name <HOST_NAME>:指定在 HELO 消息中所使用的名稱。默認爲本地主機名。

smtp_connect_timeout:指定 smtp 服務器連接的超時時間。單位是秒。

router_id:指定標識該機器的 route_id. 如:route_id LVS_01

vrrp_mcast_group4 224.0.0.18:指定發送 VRRP 組播消息使用的 IPV4 組播地址。默認是224.0.0.18

vrrp_mcast_group6 ff02::12 指定發送 VRRP 組播消息所使用的 IPV6 組播地址。默認是ff02::12

default_interface eth0:設置靜態地址默認綁定的端口。默認是 eth0。

lvs_sync_daemon <VRRP_INSTANCE> [id <SYNC_ID>] [maxlen ] [port ] [ttl ] [group ] 設置 LVS 同步服務的相關內容。可以同步 LVS 的狀態信息。

INTERFACE:指定同步服務綁定的接口。

VRRP_INSTANCE:指定同步服務綁定的 VRRP 實例。

id <SYNC_ID>:指定同步服務所使用的 SYNCID,只有相同的 SYNCID 纔會同步。範圍是0-255.

maxlen:指定數據包的最大長度。範圍是 1-65507

port:指定同步所使用的 UDP 端口。

group:指定組播 IP 地址。

lvs_flush:在 keepalived 啓動時,刷新所有已經存在的 LVS 配置。

vrrp_garp_master_delay 10:當轉換爲 MASTER 狀態時,延遲多少秒發送第二組的免費 ARP。默認爲 5s,0 表示不發送第二組免的免費 ARP。

vrrp_garp_master_repeat 1:當轉換爲 MASTER 狀態時,在一組中一次發送的免費 ARP 數量。默認是 5.

vrrp_garp_lower_prio_delay 10:當 MASTER 收到更低優先級的通告時,延遲多少秒發送第二組的免費 ARP。

vrrp_garp_lower_prio_repeat 1:當 MASTER 收到更低優先級的通告時,在一組中一次發送的免費 ARP 數量。

vrrp_garp_master_refresh 60:當 keepalived 成爲 MASTER 以後,刷新免費 ARP 的最小時間間隔(會再次發送免費 ARP)。默認是 0,表示不會刷新。

vrrp_garp_master_refresh_repeat 2: 當 keepalived 成爲 MASTER 以後,每次刷新會發送多少個免費 ARP。默認是 1.

vrrp_garp_interval 0.001:在一個接口發送的兩個免費 ARP 之間的延遲。可以精確到毫秒級。默認是 0.

vrrp_lower_prio_no_advert true|false:默認是 false。如果收到低優先級的通告,不發送任何通告。

vrrp_version 2|3:設置默認的 VRRP 版本。默認是 2.

vrrp_check_unicast_src:在單播模式中,開啓對 VRRP 數據包的源地址做檢查,源地址必須是單播鄰居之一。

vrrp_skip_check_adv_addr:默認是不跳過檢查。檢查收到的 VRRP 通告中的所有地址可能會比較耗時,設置此命令的意思是,如果通告與接收的上一個通告來自相同的 master 路由器,則不執行檢查(跳過檢查)。

vrrp_strict:嚴格遵守 VRRP 協議。下列情況將會阻止啓動 Keepalived:1. 沒有 VIP 地址。2. 單播鄰居。3. 在 VRRP 版本 2 中有 IPv6 地址。

vrrp_iptables:不添加任何 iptables 規則。默認是添加 iptables 規則的。
如果 vrrp 進程或 check 進程超時,可以用下面的 4 個選項。可以使處於 BACKUP 狀態的 VRRP 實例變成 MASTER 狀態,即使 MASTER 實例依然在運行。因爲 MASTER 或 BACKUP 系統比較慢,不能及時處理 VRRP 數據包。

vrrp_priority <-20 – 19>:設置 VRRP 進程的優先級。

checker_priority <-20 – 19>:設置 checker 進程的優先級。

vrrp_no_swap:vrrp 進程不能夠被交換。

checker_no_swap:checker 進程不能夠被交換。

script_user [groupname]:設置運行腳本默認用戶和組。如果沒有指定,則默認用戶爲 keepalived_script (需要該用戶存在),否則爲 root 用戶。默認 groupname 同 username。

enable_script_security:如果腳本路徑的任一部分對於非 root 用戶來說,都具有可寫權限,則不會以 root 身份運行腳本。

nopreempt 默認是搶佔模式 要是用非搶佔式的就加上 nopreempt;

vrrp_script

scrip “/path/to/somewhere”:指定要執行的腳本的路徑。

interval :指定腳本執行的間隔。單位是秒。默認爲1s。

timeout :指定在多少秒後,腳本被認爲執行失敗。

weight <-254 — 254>:調整優先級。默認爲2.

如果腳本執行成功(退出狀態碼爲 0),weight 大於 0,則 priority 增加。
如果腳本執行失敗(退出狀態碼爲非 0),weight 小於0,則 priority 減少。
其他情況下,priority 不變。
rise :執行成功多少次才認爲是成功。

fall :執行失敗多少次才認爲失敗。

user [GROUPNAME]:運行腳本的用戶和組。

init_fail:假設腳本初始狀態是失敗狀態。

vrrp_sync_group

notify_master /path/to_master.sh [username [groupname]]
作用:當成爲 MASTER 時,以指定的用戶和組執行腳本。

notify_backup /path/to_backup.sh [username [groupname]]
作用:當成爲 BACKUP 時,以指定的用戶和組執行腳本。

notify_fault “/path/fault.sh VG_1” [username [groupname]]
作用:當該同步組 Fault 時,以指定的用戶和組執行腳本。

notify /path/notify.sh [username [groupname]]
作用:在任何狀態都會以指定的用戶和組執行腳本。
說明:該腳本會在 notify_* 腳本後執行。

notify 可以使用 3 個參數,如下:
a. 可以是 GROUP 或 INTANCE,表明後面是組還是實例.
b. 組名或實例名。
c. 轉換後的目標狀態。有:MASTER、BACKUP、FAULT。

smtp_alert:當狀態發生改變時,發送郵件。

global_tracking:所有的 VRRP 實例共享相同的 tracking 配置。

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 接口的錯誤,默認是沒有配置的。

mcast_src_ip :指定發送組播數據包的源 IP 地址。默認是綁定 VRRP 實例的接口的主 IP 地址。

unicast_src_ip :指定發送單薄數據包的源 IP 地址。默認是綁定 VRRP 實例的接口的主 IP 地址。

version 2|3:指定該實例所使用的 VRRP 版本。

virtual_router_id 51:指定 VRRP 實例 ID,範圍是 0-255.

priority 100:指定優先級,優先級高的將成爲 MASTER。

advert_int 1:指定發送 VRRP 通告的間隔。單位是秒。

nopreempt:設置爲不搶佔。默認是搶佔的,當高優先級的機器恢復後,會搶佔低優先級的機器成爲 MASTER,而不搶佔,則允許低優先級的機器繼續成爲 MASTER,即使高優先級的機器已經上線。如果要使用這個功能,則初始化狀態必須爲 BACKUP。

preempt_delay:設置搶佔延遲。單位是秒,範圍是 0—1000,默認是 0. 發現低優先級的 MASTER 後多少秒開始搶佔。

通知腳本:

notify_master | [username [groupname]]
notify_backup | [username [groupname]]
notify_fault | [username [groupname]]
notify | [username [groupname]]
當停止 VRRP 時執行的腳本。

notify_stop | [username [groupname]]
smtp_alert

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.com

  sorry_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>:到這臺服務器的最小連接數。
}

Real_server 中的健康檢查

HTTP_GET | SSL_GET {
    url {
        path <STRING>:指定要檢查的 URL 的路徑。如 path / or path /mrtg2

        digest <STRING>:摘要。計算方式:genhash -s 172.17.100.1 -p 80 -u /
        index.

        status_code <INT>:狀態碼。
    }

        nb_get_retry <INT>:get 嘗試次數。
        delay_before_retry <INT>:在嘗試之前延遲多長時間。

        connect_ip <IP ADDRESS>:連接的 IP 地址。默認是 real server 的 ip 地址。

        connect_port <PORT>:連接的端口。默認是 real server 的端口。

        bindto <IP ADDRESS>:發起連接的接口的地址。

        bind_port <PORT>:發起連接的源端口。

        connect_timeout <INT>:連接超時時間。默認是 5s。

        fwmark <INTEGER>:使用 fwmark 對所有出去的檢查數據包進行標記。

        warmup <INT>:指定一個隨機延遲,最大爲 N 秒。可防止網絡阻塞。如果爲 0,則關閉該功能。

}
TCP_CHECK {

    connect_ip <IP ADDRESS>:連接的 IP 地址。默認是 real server 的 ip 地址。

    connect_port <PORT>:連接的端口。默認是 real server 的端口。

    bindto <IP ADDRESS>:發起連接的接口的地址。

    bind_port <PORT>:發起連接的源端口。

    connect_timeout <INT>:連接超時時間。默認是 5s。

    fwmark <INTEGER>:使用 fwmark 對所有出去的檢查數據包進行標記。

    warmup <INT>:指定一個隨機延遲,最大爲 N 秒。可防止網絡阻塞。如果爲 0,則關閉該功能。

    retry <INIT>:重試次數。默認是 1 次。

    delay_before_retry <INT>:默認是 1 秒。在重試之前延遲多少秒。

}
SMTP_CHECK {

    connect_ip <IP ADDRESS>:連接的 IP 地址。默認是 real server 的 ip 地址。

    connect_port <PORT>:連接的端口。默認是 real server 的端口。 默認是 25 端口

    bindto <IP ADDRESS>:發起連接的接口的地址。

    bind_port <PORT>:發起連接的源端口。

    connect_timeout <INT>:連接超時時間。默認是 5s。

    fwmark <INTEGER>:使用 fwmark 對所有出去的檢查數據包進行標記。

    warmup <INT>:指定一個隨機延遲,最大爲 N 秒。可防止網絡阻塞。如果爲 0,則關閉該功能。

    retry <INT>:重試次數。

    delay_before_retry <INT>:在重試之前延遲多少秒。

    helo_name <STRING>:用於 SMTP HELO 請求的字符串。

}
DNS_CHECK {

    connect_ip <IP ADDRESS>:連接的 IP 地址。默認是 real server 的 ip 地址。

    connect_port <PORT>:連接的端口。默認是 real server 的端口。 默認是 25 端口

    bindto <IP ADDRESS>:發起連接的接口的地址。

    bind_port <PORT>:發起連接的源端口。

    connect_timeout <INT>:連接超時時間。默認是 5s。

    fwmark <INTEGER>:使用 fwmark 對所有出去的檢查數據包進行標記。

    warmup <INT>:指定一個隨機延遲,最大爲 N 秒。可防止網絡阻塞。如果爲 0,則關閉該功能。

    retry <INT>:重試次數。默認是 3 次。

    type <STRING>:DNS query type。A/NS/CNAME/SOA/MX/TXT/AAAA

    name <STRING>:DNS 查詢的域名。默認是(.)
}
MISC_CHECK {
    misc_path <STRING>:外部的腳本或程序路徑。
    
    misc_timeout <INT>:腳本執行超時時間。

    user USERNAME [GROUPNAME]:指定運行該腳本的用戶和組。如果沒有指定 GROUPNAME,則 GROUPNAME 同 USERNAME。

    misc_dynamic:根據退出狀態碼動態調整權重。
        0,健康檢查成功,權重不變。
        1,健康檢查失敗。
        2-255,健康檢查成功。權重設置爲退出狀態碼減去 2.如退出狀態碼是 250,則權重調整爲248

    warmup <INT>:指定一個隨機延遲,最大爲 N 秒。可防止網絡阻塞。如果爲 0,則關閉該功能。
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章