Keepalived內核解剖
Keepalived簡介
輕量級高可用解決方案工具,實現服務節點之間的負載均衡與高可用,結構簡單,擴展性強,設計之初keepalived是專門爲LVS設計的,後來廣爲流傳使用,keepalived依賴tcp/ip協議三四五layer檢測每個服務節點狀態
原理及作用
- Keepalived作用:假設兩臺nginx反向代理實現負載均衡就可以用keepalived實現。假設主服務器崩了,就會把起初設計好的bakcup節點轉變成主節點,keepalived會將master數據流,無縫轉接到backup服務節點上,這個過程在客戶端是透明的。(最主要的功能就是主備之間的轉換)
- Keepalived
雙主模式
:爲了不讓bakcup服務節點處於空閒狀態,就有了雙主模式,也就是兩臺master服務節點同時對外提供服務,實現了高可用的作用。
VRRP 協議與工作原理
VRRP:把兩臺或多臺物理路由器虛擬成虛擬路由器,同一時間只有一臺物理路由器對外提供服務,路由器會選舉master/bakcup角色,然後運用 虛擬地址(vip) 對外提供服務,掛主上備的,需要去配置文件設置主備搶佔權,也可以不設nopreempt
深入keepalived內核解剖
Keepalived架構大體分爲兩大部分User Space and Kernel Space 內核空間處於最底層
- User Space:(包含以下)
- Scheduler I/O : I/O複用分發,安排內核任務數據之間的請求
- Memory:內核管理機制,該部分提供與內存數據之間的訪問
- Control Plane :控制面板功能,實現設置文件內容與編譯解析
- Core components(重要):keepalived核心組件
- WatchDOG:檢測VRRP數據轉換以及協議狀態
- CheCkers:三四五layer之間的protocol
- VRRP Stack:主備其一崩後數據轉移機制
- System call:Checkers and VRRP Stack 模塊之間的內核調用
- SMTP:mail 郵件模塊
- IPVS wrapper : 將設置好的ipvs規則發送到core讓core做處理
- Netlink Reflector:實現集羣中故障vip轉移與切換
配置文件模板
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_httpd {
script "killall -0 httpd"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass qwaszx
}
virtual_ipaddress {
192.168.0.0/24
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fuall "/etc/keepalived/fuall.sh"
track_script {
check_httpd
}
}
Tips: 虛擬路由id主備不能相同,並且backup的id不能大於master 的虛擬id也不能使用默認的