keepalived + lvs

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.
相關文章
相關標籤/搜索