linux keepalived配置参数详解
本文轉(zhuǎn)載自:https://blog.csdn.net/weixin_42256765/article/details/103223793感謝分享
keepalived 原理及配置介紹
什么是 Keepalived 呢,keepalived 觀其名可知,保持存活,在網(wǎng)絡(luò)里面就是保持在線了,也就是所謂的高可用或熱備,用來(lái)防止單點(diǎn)故障(單點(diǎn)故障是指一旦某一點(diǎn)出現(xiàn)故障就會(huì)導(dǎo)致整個(gè)系統(tǒng)架構(gòu)的不可用)的發(fā)生,Keepalived 通過(guò)請(qǐng)求一個(gè) vip 來(lái)達(dá)到請(qǐng)求真是 IP 地址的功能,而 VIP 能夠在一臺(tái)機(jī)器發(fā)生故障時(shí)候,自動(dòng)漂移到另外一臺(tái)機(jī)器上,從來(lái)達(dá)到了高可用 HA 功能。那說(shuō)到 keepalived 時(shí)不得不說(shuō)的一個(gè)協(xié)議就是 VRRP 協(xié)議,可以說(shuō)這個(gè)協(xié)議就是 keepalived 實(shí)現(xiàn)的基礎(chǔ),那么首先我們來(lái)看看 VRRP 協(xié)議;
VRRP 協(xié)議
網(wǎng)絡(luò)在設(shè)計(jì)的時(shí)候必須考慮到冗余容災(zāi),包括線路冗余,設(shè)備冗余等,防止網(wǎng)絡(luò)存在單點(diǎn)故障,那在路由器或三層交換機(jī)處實(shí)現(xiàn)冗余就顯得尤為重要,在網(wǎng)絡(luò)里面有個(gè)協(xié)議就是來(lái)做這事的,這個(gè)協(xié)議就是 VRRP 協(xié)議,Keepalived 就是巧用 VRRP 協(xié)議來(lái)實(shí)現(xiàn)高可用性 (HA) 的 VRRP 協(xié)議。
Keepalived 配置文件詳解
1.global_defs 全局配置
notification_email:指定當(dāng) keepalived 出現(xiàn)問(wèn)題時(shí),發(fā)送郵件給哪些用戶。
notification_emai_from:發(fā)送郵件時(shí),郵件的來(lái)源地址。
smtp_server <DOMAIN|IP> [PORT]:smtp 服務(wù)器的地址或域名。默認(rèn)端口為 25, 如:smtp_server smtp.felix.com 25
smtp_helo_name <HOST_NAME>:指定在 HELO 消息中所使用的名稱。默認(rèn)為本地主機(jī)名。
smtp_connect_timeout:指定 smtp 服務(wù)器連接的超時(shí)時(shí)間。單位是秒。
router_id:指定標(biāo)識(shí)該機(jī)器的 route_id. 如:route_id LVS_01
vrrp_mcast_group4 224.0.0.18:指定發(fā)送 VRRP 組播消息使用的 IPV4 組播地址。默認(rèn)是224.0.0.18
vrrp_mcast_group6 ff02::12 指定發(fā)送 VRRP 組播消息所使用的 IPV6 組播地址。默認(rèn)是ff02::12
default_interface eth0:設(shè)置靜態(tài)地址默認(rèn)綁定的端口。默認(rèn)是 eth0。
lvs_sync_daemon <VRRP_INSTANCE> [id <SYNC_ID>] [maxlen ] [port ] [ttl ] [group ] 設(shè)置 LVS 同步服務(wù)的相關(guān)內(nèi)容。可以同步 LVS 的狀態(tài)信息。
INTERFACE:指定同步服務(wù)綁定的接口。
VRRP_INSTANCE:指定同步服務(wù)綁定的 VRRP 實(shí)例。
id <SYNC_ID>:指定同步服務(wù)所使用的 SYNCID,只有相同的 SYNCID 才會(huì)同步。范圍是0-255.
maxlen:指定數(shù)據(jù)包的最大長(zhǎng)度。范圍是 1-65507
port:指定同步所使用的 UDP 端口。
group:指定組播 IP 地址。
lvs_flush:在 keepalived 啟動(dòng)時(shí),刷新所有已經(jīng)存在的 LVS 配置。
vrrp_garp_master_delay 10:當(dāng)轉(zhuǎn)換為 MASTER 狀態(tài)時(shí),延遲多少秒發(fā)送第二組的免費(fèi) ARP。默認(rèn)為 5s,0 表示不發(fā)送第二組免的免費(fèi) ARP。
vrrp_garp_master_repeat 1:當(dāng)轉(zhuǎn)換為 MASTER 狀態(tài)時(shí),在一組中一次發(fā)送的免費(fèi) ARP 數(shù)量。默認(rèn)是 5.
vrrp_garp_lower_prio_delay 10:當(dāng) MASTER 收到更低優(yōu)先級(jí)的通告時(shí),延遲多少秒發(fā)送第二組的免費(fèi) ARP。
vrrp_garp_lower_prio_repeat 1:當(dāng) MASTER 收到更低優(yōu)先級(jí)的通告時(shí),在一組中一次發(fā)送的免費(fèi) ARP 數(shù)量。
vrrp_garp_master_refresh 60:當(dāng) keepalived 成為 MASTER 以后,刷新免費(fèi) ARP 的最小時(shí)間間隔(會(huì)再次發(fā)送免費(fèi) ARP)。默認(rèn)是 0,表示不會(huì)刷新。
vrrp_garp_master_refresh_repeat 2: 當(dāng) keepalived 成為 MASTER 以后,每次刷新會(huì)發(fā)送多少個(gè)免費(fèi) ARP。默認(rèn)是 1.
vrrp_garp_interval 0.001:在一個(gè)接口發(fā)送的兩個(gè)免費(fèi) ARP 之間的延遲。可以精確到毫秒級(jí)。默認(rèn)是 0.
vrrp_lower_prio_no_advert true|false:默認(rèn)是 false。如果收到低優(yōu)先級(jí)的通告,不發(fā)送任何通告。
vrrp_version 2|3:設(shè)置默認(rèn)的 VRRP 版本。默認(rèn)是 2.
vrrp_check_unicast_src:在單播模式中,開(kāi)啟對(duì) VRRP 數(shù)據(jù)包的源地址做檢查,源地址必須是單播鄰居之一。
vrrp_skip_check_adv_addr:默認(rèn)是不跳過(guò)檢查。檢查收到的 VRRP 通告中的所有地址可能會(huì)比較耗時(shí),設(shè)置此命令的意思是,如果通告與接收的上一個(gè)通告來(lái)自相同的 master 路由器,則不執(zhí)行檢查(跳過(guò)檢查)。
vrrp_strict:嚴(yán)格遵守 VRRP 協(xié)議。下列情況將會(huì)阻止啟動(dòng) Keepalived:1. 沒(méi)有 VIP 地址。2. 單播鄰居。3. 在 VRRP 版本 2 中有 IPv6 地址。
vrrp_iptables:不添加任何 iptables 規(guī)則。默認(rèn)是添加 iptables 規(guī)則的。
如果 vrrp 進(jìn)程或 check 進(jìn)程超時(shí),可以用下面的 4 個(gè)選項(xiàng)。可以使處于 BACKUP 狀態(tài)的 VRRP 實(shí)例變成 MASTER 狀態(tài),即使 MASTER 實(shí)例依然在運(yùn)行。因?yàn)?MASTER 或 BACKUP 系統(tǒng)比較慢,不能及時(shí)處理 VRRP 數(shù)據(jù)包。
vrrp_priority <-20 – 19>:設(shè)置 VRRP 進(jìn)程的優(yōu)先級(jí)。
checker_priority <-20 – 19>:設(shè)置 checker 進(jìn)程的優(yōu)先級(jí)。
vrrp_no_swap:vrrp 進(jìn)程不能夠被交換。
checker_no_swap:checker 進(jìn)程不能夠被交換。
script_user [groupname]:設(shè)置運(yùn)行腳本默認(rèn)用戶和組。如果沒(méi)有指定,則默認(rèn)用戶為 keepalived_script (需要該用戶存在),否則為 root 用戶。默認(rèn) groupname 同 username。
enable_script_security:如果腳本路徑的任一部分對(duì)于非 root 用戶來(lái)說(shuō),都具有可寫權(quán)限,則不會(huì)以 root 身份運(yùn)行腳本。
nopreempt 默認(rèn)是搶占模式 要是用非搶占式的就加上 nopreempt;
vrrp_script
scrip “/path/to/somewhere”:指定要執(zhí)行的腳本的路徑。
interval :指定腳本執(zhí)行的間隔。單位是秒。默認(rèn)為1s。
timeout :指定在多少秒后,腳本被認(rèn)為執(zhí)行失敗。
weight <-254 — 254>:調(diào)整優(yōu)先級(jí)。默認(rèn)為2.
如果腳本執(zhí)行成功(退出狀態(tài)碼為 0),weight 大于 0,則 priority 增加。
如果腳本執(zhí)行失敗(退出狀態(tài)碼為非 0),weight 小于0,則 priority 減少。
其他情況下,priority 不變。
rise :執(zhí)行成功多少次才認(rèn)為是成功。
fall :執(zhí)行失敗多少次才認(rèn)為失敗。
user [GROUPNAME]:運(yùn)行腳本的用戶和組。
init_fail:假設(shè)腳本初始狀態(tài)是失敗狀態(tài)。
vrrp_sync_group
notify_master /path/to_master.sh [username [groupname]]
作用:當(dāng)成為 MASTER 時(shí),以指定的用戶和組執(zhí)行腳本。
notify_backup /path/to_backup.sh [username [groupname]]
作用:當(dāng)成為 BACKUP 時(shí),以指定的用戶和組執(zhí)行腳本。
notify_fault “/path/fault.sh VG_1” [username [groupname]]
作用:當(dāng)該同步組 Fault 時(shí),以指定的用戶和組執(zhí)行腳本。
notify /path/notify.sh [username [groupname]]
作用:在任何狀態(tài)都會(huì)以指定的用戶和組執(zhí)行腳本。
說(shuō)明:該腳本會(huì)在 notify_* 腳本后執(zhí)行。
notify 可以使用 3 個(gè)參數(shù),如下:
a. 可以是 GROUP 或 INTANCE,表明后面是組還是實(shí)例.
b. 組名或?qū)嵗?br /> c. 轉(zhuǎn)換后的目標(biāo)狀態(tài)。有:MASTER、BACKUP、FAULT。
smtp_alert:當(dāng)狀態(tài)發(fā)生改變時(shí),發(fā)送郵件。
global_tracking:所有的 VRRP 實(shí)例共享相同的 tracking 配置。
vrrp_instance
state MASTER|BACKUP:指定該 keepalived 節(jié)點(diǎn)的初始狀態(tài)。
interface eth0:vrrp 實(shí)例綁定的接口,用于發(fā)送 VRRP 包。
use_vmac [VMAC_INTERFACE]:在指定的接口產(chǎn)生一個(gè)子接口,如 vrrp.51,該接口的 MAC 地址為組播地址,通過(guò)該接口向外發(fā)送和接收 VRRP 包。
vmac_xmit_base:通過(guò)基本接口向外發(fā)送和接收 VRRP 數(shù)據(jù)包,而不是通過(guò) VMAC 接口。
native_ipv6:強(qiáng)制 VRRP 實(shí)例使用 IPV6.(當(dāng)同時(shí)配置了 IPV4 和 IPV6 的時(shí)候)
dont_track_primary:忽略 VRRP 接口的錯(cuò)誤,默認(rèn)是沒(méi)有配置的。
mcast_src_ip :指定發(fā)送組播數(shù)據(jù)包的源 IP 地址。默認(rèn)是綁定 VRRP 實(shí)例的接口的主 IP 地址。
unicast_src_ip :指定發(fā)送單薄數(shù)據(jù)包的源 IP 地址。默認(rèn)是綁定 VRRP 實(shí)例的接口的主 IP 地址。
version 2|3:指定該實(shí)例所使用的 VRRP 版本。
virtual_router_id 51:指定 VRRP 實(shí)例 ID,范圍是 0-255.
priority 100:指定優(yōu)先級(jí),優(yōu)先級(jí)高的將成為 MASTER。
advert_int 1:指定發(fā)送 VRRP 通告的間隔。單位是秒。
nopreempt:設(shè)置為不搶占。默認(rèn)是搶占的,當(dāng)高優(yōu)先級(jí)的機(jī)器恢復(fù)后,會(huì)搶占低優(yōu)先級(jí)的機(jī)器成為 MASTER,而不搶占,則允許低優(yōu)先級(jí)的機(jī)器繼續(xù)成為 MASTER,即使高優(yōu)先級(jí)的機(jī)器已經(jīng)上線。如果要使用這個(gè)功能,則初始化狀態(tài)必須為 BACKUP。
preempt_delay:設(shè)置搶占延遲。單位是秒,范圍是 0—1000,默認(rèn)是 0. 發(fā)現(xiàn)低優(yōu)先級(jí)的 MASTER 后多少秒開(kāi)始搶占。
通知腳本:
notify_master | [username [groupname]]
notify_backup | [username [groupname]]
notify_fault | [username [groupname]]
notify | [username [groupname]]
當(dāng)停止 VRRP 時(shí)執(zhí)行的腳本。
notify_stop | [username [groupname]]
smtp_alert
virtual_server
virtual_server IP Port | virtual_server fwmark int | virtual_server group string {delay_loop <INT>:健康檢查的時(shí)間間隔。lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS 調(diào)度算法。lb_kind NAT|DR|TUN:LVS 模式。persistence_timeout 360:持久化超時(shí)時(shí)間,單位是秒。默認(rèn)是6分鐘。persistence_granularity:持久化連接的顆粒度。protocol TCP|UDP|SCTP:4 層協(xié)議。ha_suspend:如果virtual server 的 IP 地址沒(méi)有設(shè)置,則不進(jìn)行后端服務(wù)器的健康檢查。virtualhost <STRING>:為 HTTP_GET 和 SSL_GET 執(zhí)行要檢查的虛擬主機(jī)。如virtualhost www.felix.comsorry_server <IPADDR> <PORT>:添加一個(gè)備用服務(wù)器。當(dāng)所有的 RS 都故障時(shí)。sorry_server_inhibit:將inhibit_on_failure 指令應(yīng)用于 sorry_server 指令。alpha:在 keepalived 啟動(dòng)時(shí),假設(shè)所有的 RS 都是 down,以及健康檢查是失敗的。有助于防止 啟動(dòng)時(shí)的誤報(bào)。默認(rèn)是禁用的。omega:在 keepalived 終止時(shí),會(huì)執(zhí)行 quorum_down 指令所定義的腳本。quorum <INT>:默認(rèn)值 1. 所有的存活的服務(wù)器的總的最小權(quán)重。quorum_up <STRING>:當(dāng) quorum 增長(zhǎng)到滿足 quorum 所定義的值時(shí),執(zhí)行該腳本。quorum_down <STRING>:當(dāng) quorum 減少到不滿足 quorum 所定義的值時(shí),執(zhí)行該腳本。}real_server
real_server IP Port {weight <INT>:給服務(wù)器指定權(quán)重。默認(rèn)是 1.inhibit_on_failure:當(dāng)服務(wù)器健康檢查失敗時(shí),將其 weight 設(shè)置為 0,而不是從 Virtual Server 中移除。notify_up <STRING>:當(dāng)服務(wù)器健康檢查成功時(shí),執(zhí)行的腳本。notify_down <STRING>:當(dāng)服務(wù)器健康檢查失敗時(shí),執(zhí)行的腳本。uthreshold <INT>:到這臺(tái)服務(wù)器的最大連接數(shù)。lthreshold <INT>:到這臺(tái)服務(wù)器的最小連接數(shù)。 }Real_server 中的健康檢查
HTTP_GET | SSL_GET {url {path <STRING>:指定要檢查的 URL 的路徑。如 path / or path /mrtg2digest <STRING>:摘要。計(jì)算方式:genhash -s 172.17.100.1 -p 80 -u /index.status_code <INT>:狀態(tài)碼。}nb_get_retry <INT>:get 嘗試次數(shù)。delay_before_retry <INT>:在嘗試之前延遲多長(zhǎng)時(shí)間。connect_ip <IP ADDRESS>:連接的 IP 地址。默認(rèn)是 real server 的 ip 地址。connect_port <PORT>:連接的端口。默認(rèn)是 real server 的端口。bindto <IP ADDRESS>:發(fā)起連接的接口的地址。bind_port <PORT>:發(fā)起連接的源端口。connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是 5s。fwmark <INTEGER>:使用 fwmark 對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記。warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為 N 秒。可防止網(wǎng)絡(luò)阻塞。如果為 0,則關(guān)閉該功能。} TCP_CHECK {connect_ip <IP ADDRESS>:連接的 IP 地址。默認(rèn)是 real server 的 ip 地址。connect_port <PORT>:連接的端口。默認(rèn)是 real server 的端口。bindto <IP ADDRESS>:發(fā)起連接的接口的地址。bind_port <PORT>:發(fā)起連接的源端口。connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是 5s。fwmark <INTEGER>:使用 fwmark 對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記。warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為 N 秒。可防止網(wǎng)絡(luò)阻塞。如果為 0,則關(guān)閉該功能。retry <INIT>:重試次數(shù)。默認(rèn)是 1 次。delay_before_retry <INT>:默認(rèn)是 1 秒。在重試之前延遲多少秒。} SMTP_CHECK {connect_ip <IP ADDRESS>:連接的 IP 地址。默認(rèn)是 real server 的 ip 地址。connect_port <PORT>:連接的端口。默認(rèn)是 real server 的端口。 默認(rèn)是 25 端口bindto <IP ADDRESS>:發(fā)起連接的接口的地址。bind_port <PORT>:發(fā)起連接的源端口。connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是 5s。fwmark <INTEGER>:使用 fwmark 對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記。warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為 N 秒。可防止網(wǎng)絡(luò)阻塞。如果為 0,則關(guān)閉該功能。retry <INT>:重試次數(shù)。delay_before_retry <INT>:在重試之前延遲多少秒。helo_name <STRING>:用于 SMTP HELO 請(qǐng)求的字符串。} DNS_CHECK {connect_ip <IP ADDRESS>:連接的 IP 地址。默認(rèn)是 real server 的 ip 地址。connect_port <PORT>:連接的端口。默認(rèn)是 real server 的端口。 默認(rèn)是 25 端口bindto <IP ADDRESS>:發(fā)起連接的接口的地址。bind_port <PORT>:發(fā)起連接的源端口。connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是 5s。fwmark <INTEGER>:使用 fwmark 對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記。warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為 N 秒。可防止網(wǎng)絡(luò)阻塞。如果為 0,則關(guān)閉該功能。retry <INT>:重試次數(shù)。默認(rèn)是 3 次。type <STRING>:DNS query type。A/NS/CNAME/SOA/MX/TXT/AAAAname <STRING>:DNS 查詢的域名。默認(rèn)是(.) } MISC_CHECK {misc_path <STRING>:外部的腳本或程序路徑。misc_timeout <INT>:腳本執(zhí)行超時(shí)時(shí)間。user USERNAME [GROUPNAME]:指定運(yùn)行該腳本的用戶和組。如果沒(méi)有指定 GROUPNAME,則 GROUPNAME 同 USERNAME。misc_dynamic:根據(jù)退出狀態(tài)碼動(dòng)態(tài)調(diào)整權(quán)重。0,健康檢查成功,權(quán)重不變。1,健康檢查失敗。2-255,健康檢查成功。權(quán)重設(shè)置為退出狀態(tài)碼減去 2.如退出狀態(tài)碼是 250,則權(quán)重調(diào)整為248warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為 N 秒。可防止網(wǎng)絡(luò)阻塞。如果為 0,則關(guān)閉該功能。 }?
總結(jié)
以上是生活随笔為你收集整理的linux keepalived配置参数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Prometheus 安装、部署、出图(
- 下一篇: 关于 Linux 版网易云音乐音高畸变的