Keepalived原理 Keepalived原理 keepalived也是模塊化設計,不一樣模塊複雜不一樣的功能,下面是keepalived的組件 core check vrrp libipfwc libipvs-2.4 libipvs-2.6 core:是keepalived的核心,複雜主進程的啓動和維護,全局配置文件的加載解析等 check:負責healthchecker(健康檢查),包括了各類健康檢查方式,以及對應的配置的解析包括LVS的配置解析 vrrp:VRRPD子進程,VRRPD子進程就是來實現VRRP協議的 libipfwc:iptables(ipchains)庫,配置LVS會用到 libipvs*:配置LVS會用到 注意,keepalived和LVS徹底是兩碼事,只不過他們各負其責相互配合而已 keepalived啓動後會有三個進程 父進程:內存管理,子進程管理等等 子進程:VRRP子進程 子進程:healthchecker子進程 有圖可知,兩個子進程都被系統WatchDog看管,兩個子進程各自複雜本身的事,healthchecker子進程複雜檢查各自服務器的健康程度,例如HTTP,LVS等等,若是healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,而且去掉虛擬IP,轉換爲BACKUP狀態
genhash 用法:
[root@localhost bin]# ./genhash -s 192.168.100.101 -p 80 -u / #genhash http 頁面探測時檢查hash 值,首先要獲取hash 值 MD5SUM = 47f174a067d193f370407ec4aa882ab0 [root@localhost bin]#
配置文件詳解:本次測試着重點在keepalived 中使用LVS 功能算法
[root@localhost keepalived]# cat keepalived.conf ! Cconfiguration File for keepalived global_defs { #全局配置段 notification_email { #定義報警郵件接收地址 test1@ppap.com test2@ppap.com test3@ppap.com } notification_email_from error_from@ppap.com #定義告警郵件發送郵箱 smtp_server 114.114.114.114 #定義郵箱服務器 smtp_connect_timeout 30 #定義郵件發送超時時間 router_id lvs_1 #定義路由標識信息,相同局域網惟一 } vrrp_instance VI_1 { #定義vrrp 實例,實例能夠定義多個,在主+主,主+主+備 分別在不通服務器調用 state MASTER #狀態參數,標識在當前主機上,實列狀態,有master/backup interface ens33 #指定綁定虛IP的網卡設備 virtual_router_id 51 #路由 id 標識,用於區分不一樣vrrp 實例,相同實例id 必須一致:[0-255] priority 100 #定義當前實例的優先級,優先級大小決定主備 advert_int 1 #主備通信時間間隔 authentication { auth_type PASS #定義實例認證類型 auth_pass 1111 #定義認證密碼 } virtual_ipaddress { #定義vrrp 須要發佈的虛擬ip ,能夠綁定網卡 192.168.100.201/24 192.168.100.202/24 192.168.100.203/24 dev eth2 label eth2:1 指定網卡和名稱 } nopreempt #開啓不搶佔功能,默認搶佔 } virtual_server 192.168.100.201 80 { #定義虛擬服務地址端口 delay_loop 10 #查詢後端real_server 狀態間隔時間 lvs_sched wlc #定義lvs 負載算法 lvs_method DR #定義lvs 模式 persistence_timeout 300 #定義會話保持時間 protocol TCP #定義負載協議爲tcp real_server 192.168.100.101 80 { #定義real_server weight 1 #設置權重爲1 ,默認爲1 uthreshold 10000 #最大鏈接閾值 TCP_CHECK { connect_timeout 5 #定義探測超時時間默認爲5 s retry 3 #嘗試三次 } } real_server 192.168.100.103 80 { weight 1 # 設置權重爲1,默認1 uthreshold 5000 # 設置鏈接最大閾值 HTTP_GET { url { path / digest c32410fe653866bfc3e85c896a4abc94 status_code 200 #正常應該是 200 狀態碼 } connect_timeout 5 #定義探測超時時間,默認5s retry 3 # 嘗試 3 次 } } }
測試結果:後端
[root@localhost keepalived]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:50:56:2d:b8:9a brd ff:ff:ff:ff:ff:ff inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.100.201/24 scope global secondary ens33 valid_lft forever preferred_lft forever inet 192.168.100.202/24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::18a9:d1fe:4955:8559/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost keepalived]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.201:80 wlc persistent 300 -> 192.168.100.101:80 Route 1 0 4 -> 192.168.100.103:80 Route 1 0 0
中止其中一個節點服務: 重啓節點只能從新加載keepalived 配置服務器
[root@localhost /]# systemctl stop httpd
[root@localhost /]#
Mar 1 04:30:12 localhost Keepalived_healthcheckers[2966]: Error connecting server [192.168.100.103]:80. Mar 1 04:30:15 localhost Keepalived_healthcheckers[2966]: Error connecting server [192.168.100.103]:80. Mar 1 04:30:15 localhost Keepalived_healthcheckers[2966]: Check on service [192.168.100.103]:80 failed after 1 retry. Mar 1 04:30:15 localhost Keepalived_healthcheckers[2966]: Removing service [192.168.100.103]:80 from VS [192.168.100.201]:80 Mar 1 04:30:15 localhost Keepalived_healthcheckers[2966]: Remote SMTP server [114.114.114.114]:25 connected.