【Linux運維-叢集技術進階】keepalived工作原理和配置檔案解析
keepalived是什麼
keepalived是叢集管理中保證叢集高可用的一個服務軟體,其功能類似於heartbeat,用來防止單點故障,它可以自動檢測叢集中伺服器的健康狀況,比如主從模式時,當主伺服器發生故障時,Keepalived會根據伺服器的VRRP優先順序來選舉一個從伺服器成為主伺服器,實現主從的無縫切換,保證持續的提供服務,並且Keepalived也會及時的通過郵件通知到相關負責人進行維護出現問題的伺服器。
keepalived工作原理
keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在區域網內其他機器的預設路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先順序來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模組,分別是core、check和vrrp。core模組為keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模組是來實現VRRP協議的。
keepalived的配置檔案
和Nginx類似,keepalived也只有一個核心的配置檔案keepalived.conf,使用Keepalived的各種功能,我們只需要對這個檔案進行相關的配置即可。keepalived.conf裡面主要包括以下幾個配置區域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
下面是配置檔案的一張結構圖,每個節點都有相應的解析。
global_defs區域
主要是配置故障發生時的通知物件以及機器標識
global_defs {
notification_email {
[email protected]163.com
[email protected]163.com
...
}
notification_email_from [email protected]163.com
smtp_server smtp.163.com
smtp_connect_timeout 30
enable_traps
router_id host163
}
解析:
• notification_email 故障發生時給誰發郵件通知。
• notification_email_from 通知郵件從哪個地址發出。
• smpt_server 通知郵件的smtp地址。
• smtp_connect_timeout 連線smtp伺服器的超時時間。
• enable_traps 開啟SNMP陷阱(Simple Network Management Protocol)。
• router_id 標識本節點的字條串,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。
vrrp_script區域
用來做健康檢查的,當檢查失敗時會將vrrp_instance的priority減少相應的值。
vrrp_script chk_http_port {
script "</dev/tcp/192.168.22.227/80"
interval 1
weight -10
}
vrrp_instance和vrrp_sync_group區域
vrrp_instance用來定義對外提供服務的VIP區域及其相關屬性。
vrrp_rsync_group用來定義vrrp_intance組,使得這個組內成員動作一致。
舉個例子來說明一下其功能:
兩個vrrp_instance同屬於一個vrrp_rsync_group,那麼其中一個vrrp_instance發生故障切換時,另一個vrrp_instance也會跟著切換(即使這個instance沒有發生故障)。
vrrp_sync_group VG_1 {
group {
inside_network # name of vrrp_instance (below)
outside_network # One for each moveable IP.
...
}
notify_master /path/to_master.sh
notify_backup /path/to_backup.sh
notify_fault "/path/fault.sh VG_1"
notify /path/notify.sh
smtp_alert
}
vrrp_instance VI_1 {
state MASTER
interface eth0
use_vmac <VMAC_INTERFACE>
dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip <IPADDR>
lvs_sync_daemon_interface eth1
garp_master_delay 10
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
10.210.214.253/24 brd 10.210.214.255 dev eth0
192.168.1.11/24 brd 192.168.1.255 dev eth1
}
virtual_routes {
172.16.0.0/12 via 10.210.214.1
192.168.1.0/24 via 192.168.1.1 dev eth1
default via 202.102.152.1
}
track_script {
chk_http_port
}
nopreempt
preempt_delay 300
debug
notify_master <STRING>|<QUOTED-STRING>
notify_backup <STRING>|<QUOTED-STRING>
notify_fault <STRING>|<QUOTED-STRING>
notify <STRING>|<QUOTED-STRING>
smtp_alert
}
解析:
• notify_master/backup/fault 分別表示切換為主/備/出錯時所執行的指令碼。
• notify 表示任何一狀態切換時都會呼叫該指令碼,並且該指令碼在以上三個指令碼執行完成之後進行呼叫,keepalived會自動傳遞三個引數($1 = "GROUP"|"INSTANCE",$2 = name of group or instance,$3 = target state of transition(MASTER/BACKUP/FAULT))。
• smtp_alert 表示是否開啟郵件通知(用全域性區域的郵件設定來發通知)。
• state 可以是MASTER或BACKUP,不過當其他節點keepalived啟動時會將priority比較大的節點選舉為MASTER,因此該項其實沒有實質用途,可以理解為初始值,執行時根據priority的值改變。
• interface 節點固有IP(非VIP)的網絡卡名稱,用來發VRRP包。
• use_vmac 是否使用VRRP的虛擬MAC地址。
• dont_track_primary 忽略VRRP網絡卡錯誤。(預設未設定)
• track_interface 監控以下網絡卡,如果任何一個不通就會切換到FALT狀態。(可選項)
• mcast_src_ip 修改vrrp組播包的源地址,預設源地址為master的IP。(由於是組播,因此即使修改了源地址,該master還是能收到迴應的)
• lvs_sync_daemon_interface 繫結lvs syncd的網絡卡。
• garp_master_delay 當切為主狀態後多久更新ARP快取,預設5秒。
• virtual_router_id 取值在0-255之間,用來區分多個instance的VRRP組播。配置為主從的兩個節點該值需要相等。
• priority 用來選舉master的,要成為master,那麼這個選項的值最好高於其他機器50個點,該項取值範圍是1-255(在此範圍之外會被識別成預設值100)
• advert_int 發VRRP包的時間間隔,即多久進行一次master選舉(可以認為是健康查檢時間間隔)。
• authentication 認證區域,認證型別有PASS和HA(IPSEC),推薦使用PASS(密碼只識別前8位),配置主從的話,主從的認證方式和密碼要一致
• virtual_ipaddress 即VIP,配置的虛擬ip,主從節點VIP要一致。
• virtual_routes 虛擬路由,當IP漂過來之後需要新增的路由資訊。
• virtual_ipaddress_excluded 傳送的VRRP包裡不包含的IP地址,為減少迴應VRRP包的個數。在網絡卡上繫結的IP地址比較多的時候用。
• track_script 設定健康檢查的指令碼
• nopreempt 允許一個priority比較低的節點作為master,即使有priority更高的節點啟動。
在這有必要細說一下,首先nopreemt必須在state為BACKUP的節點上才生效(因為是BACKUP節點決定是否來成為MASTER的),其次要實現類似於關閉auto failback的功能需要將所有節點的state都設定為BACKUP。使用nopreempt可以避免搶佔master的情況,比如一般情況下主節點宕機,從節點會升級為主節點,當主節點恢復後,會搶佔成為master,從節點被迫降級。如果網站訪問量較大的話,這樣難免會出現問題。
virtual_server_group和virtual_server區域
virtual_server_group一般在超大型的LVS中用到,一般LVS用不到這東西,因此不多說。
virtual_server IP Port {
delay_loop <INT>
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT|DR|TUN
persistence_timeout <INT>
persistence_granularity <NETMASK>
protocol TCP
ha_suspend
virtualhost <STRING>
alpha
omega
quorum <INT>
hysteresis <INT>
quorum_up <STRING>|<QUOTED-STRING>
quorum_down <STRING>|<QUOTED-STRING>
sorry_server <IPADDR> <PORT>
real_server <IPADDR> <PORT> {
weight <INT>
inhibit_on_failure
notify_up <STRING>|<QUOTED-STRING>
notify_down <STRING>|<QUOTED-STRING>
# HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
HTTP_GET|SSL_GET {
url {
path <STRING>
# Digest computed with genhash
digest <STRING>
status_code <INT>
}
connect_port <PORT>
connect_timeout <INT>
nb_get_retry <INT>
delay_before_retry <INT>
}
}
}
解析:
• delay_loop 延遲輪詢時間(單位秒)。
• lb_algo 後端除錯演算法(load balancing algorithm)。
• lb_kind LVS排程型別NAT/DR/TUN。
• virtualhost 用來給HTTP_GET和SSL_GET配置請求header的。
• sorry_server 當所有real server宕掉時,sorry server頂替。
• real_server 真正提供服務的伺服器。
• weight 權重。
• notify_up/down 當real server宕掉或啟動時執行的指令碼。
• 健康檢查的方式,N多種方式。
• path 請求real serserver上的路徑。
• digest/status_code 分別表示用genhash算出的結果和http狀態碼。
• connect_port 健康檢查,如果埠通則認為伺服器正常。
• connect_timeout,nb_get_retry,delay_before_retry分別表示超時時長、重試次數,下次重試的時間延遲。
static_ipaddress和static_routes區域
static_ipaddress和static_routes區域配置的是是本節點的IP和路由資訊。如果你的機器上已經配置了IP和路由,那麼這兩個區域可以不用配置。其實,一般情況下你的機器都會有IP地址和路由資訊的,因此沒必要再在這兩個區域配置。
關於Keepalived的原理和基本配置資訊就說到這裡,這些 理論上的知識瞭解一下即可,重要的是根據這些配置,自己動手嘗試做個demo,實際驗證一下這些配置的作用,這樣才會認識的深刻。下篇部落格會使用Keepalived做個實踐:通過Keepalived實現Nginx的高可用。
相關推薦
【Linux運維-叢集技術進階】keepalived工作原理和配置檔案解析
keepalived是什麼 keepalived是叢集管理中保證叢集高可用的一個服務軟體,其功能類似於heartbeat,用來防止單點故障,它可以自動檢測叢集中伺服器的健康狀況,比如主從模式時,當主伺
【轉】【Linux運維-叢集技術進階】叢集/分散式環境下5種session處理策略
前言 在搭建完叢集環境後,不得不考慮的一個問題就是使用者訪問產生的session如何處理。如果不做任何處理的話,使用者將出現頻繁登入的現象,比如叢集中存在A、B兩臺伺服器,使用者在第一次訪問網站時,Nginx通過其負載均衡機制將使用者請求轉發到A伺服器,這時A伺服器
【Linux運維-叢集技術進階】Nginx+Keepalived+Tomcat搭建高可用/負載均衡/動靜分離的Web伺服器叢集
額,部落格名字有點長。。。 前言 終於到這篇文章了,心情是有點激動的。因為這篇文章會集中以前部落格講到的所有Nginx功能點,包括基本的負載均衡,還有動靜分離技術再加上這篇文章的重點,通過Keepalived實現的HA(High Available),為什麼
【Linux運維-叢集技術進階】Nginx的安裝配置
軟體下載 開始安裝 ① 解壓檔案 [root@localhost ~]# cd /usr/local/software/ [root@localhost software]# tar -z
【Linux 運維】 date的使用
spa 時間 ont 時間戳 都是 date 小寫 lin span date的使用 一、常用時間格式 #年、月、日 四位年大寫,其余小寫 [root@localhost ~]# date +%Y #長格式顯示四位數年 2018 [root@local
聽張老師講運維工程師的進階之路!
evo 技術 緩存 進階之路 架構 lvm 工程師 很難 amp 一、初級運維工程師(監控工程師),技術支持,掌握zabbix,3分鐘/5分/15分的故障處理時間。應急時間內搞不定,趕緊報告。(成長時間大概1~2年)二、中級運維工程師(應用運維),掌握nginx,hapro
【Linux運維入門】SonarQube和Jenkins的整合之路
安裝配置完sonar後就需要與專案在用的Jenkins進行集成了,Jenkins和Sonar整合的原理大概是這樣的,Jenkins在其外掛管理中心,下載sonar外掛並進行配置,與sonar關聯上。然後
【Linux運維入門】Jprofiler9 遠端監控Linux下JBoss
所謂“工欲善其事,必先利其器”,人類最大的進步就是創造和使用工具,好的工具確能起到事半工倍的作用。今天再給大家介紹一款非常實用的工具:JProfiler 監控JVM執行情況,用到的最多的就兩個JCon
我們2124人的【阿里Java技術進階】釘釘大群,又增添新 “成員” 啦~
上週五在社群給大家介紹了下我們的【阿里Java技術進階】釘釘群,慕名而來了很多新的小夥伴加入,離我們的史上最大Java群又近了一步。而就在剛剛,小編又得到了個新的訊息,我們的釘釘群中又加入了個新的功能“社群搜尋機器人”。下面就看看此項功能的強大之處吧!!! 在釘釘群中@社群搜尋機器人 後輸入我們
【Linux運維】rsync 數據同步備份工具筆記
批量 str arc eba 記憶 系統用戶 登錄 視頻 不用 rsync 可實現全量及增量的本地或遠程數據鏡像同步備份的優秀工具rsync官方詳細說明:http://www.samba.org/ftp/rsync/rsync.htmlrsync學習視頻:http://bl
【Linux運維入門】Linux環境編譯安裝、配置Mysql
安裝說明 系統環境:CentOS-7 64位最小模式 安裝軟體:mysql-5.1.57.tar.gz 下載地址:點我去下載mysql-5.1.57 上傳位置:/usr/local/soft
【Linux運維入門】Jstatd方式遠端監控Linux下 JVM執行情況
前言 最近一個專案部署在伺服器上執行時出現了問題,經過排查發現是java記憶體溢位的問題,所以為了實時監控伺服器java記憶體的情況,需要遠端檢視伺服器上JVM記憶體的一些情況。另外伺服器系統是Cen
【Linux運維入門】JMX方式遠端監控Linux下JVM執行情況
這篇部落格以JBoss伺服器為例,介紹JMX以方式如何配置,以遠端連線伺服器,檢視JVM執行情況。其他伺服器如Tomcat等類似。 執行環境 1. 伺服器:CentOS 7(最小化安裝) i
Linux運維之道之admin1.4(權限和歸屬,LADP認證)
達內 linux 運維admin admin1.4權限和歸屬:基本權限:基本權限的類別:訪問方式(權限):---讀取:允許查看內容--read (r權限:能夠ls瀏覽此目錄內容)---寫入:允許修改內容--write (w權限:能夠執行rm/mv/cp/mkdir/touch等更
【視覺-三維視覺技術-理論篇】三維視覺技術----雙目立體視覺,結構光等-戰略總結0
作者冀然 摘要 結構光三維測量技術是解決非接觸三維測量問題的一個有效途徑,它彌補了傳統機器視覺以二維強度影象恢復三維景物的過程中損失了深度資訊的缺陷,可實現對三維景物的完整描述。 本文
【hibernate進階】hibernate基本原理
hibernate作為SSH的持久層,是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。
JavaScript進階(六)用JavaScript讀取和儲存檔案
用JavaScript讀取和儲存檔案 因為Google還不提供同步外掛資料的功能,所以匯入和匯出外掛配置就必須和檔案打交道了。而出於安全原因,只有IE才提供訪問檔案的API;但隨著HTML 5的到來,其他瀏覽器也紛紛支援了。 首先說讀取檔案。W3C提
【Linux】make的工作原理和makefile檔案
1、make會在當前目錄下找名字叫“Makefile”或“makefile”的檔案。2、如果找到,它會找檔案中的第一個目標檔案(target),在上面的例子中,他會找到“edit”這個檔案,並把這個檔案作為最終的目標檔案。3、如果edit檔案不存在,或是edit所依賴的後面的 .o 檔案的檔案修改時間要比ed
技術鄰學院 直播預告|【進階】simufact軟件焊接仿真工藝培訓
技術分享 教學 過程 高級工程師 力學 案例 評論 代理 電子 技術鄰學院 直播預告 【進階】simufact軟件焊接仿真工藝培訓 (6月10日) 直播信息 日期: 2017年6月10日(星期六)20:00--21:30 直播地址: 熊貓直播http://pan
20170721L08-02-02老男孩Linux運維實戰培訓初級第八節課課前【上機實戰】考試講解
sersync主要還是講rsync的實踐上機實驗還有寫一些腳本下面是自動備份的腳本#bak site and logscd /var/html && tar zcf /backup/www_$(date +%F).tar.gz ./wwwcd /app && tar zc