Keepalived

                                        Keepalived

 

主要目的是爲lvs提供高可用功能,併爲lvs提供規則檢查後端服務器健康狀態.工作原理是通過軟件方式模擬實現vrrp---virtual redundent route protocol協議

wKiom1QgvKWCBLWBAAE9MnD8p4c390.jpg


將多個路由器配置成一個虛擬路由器,此虛擬路由器有vipvmac每個時刻只能被主路由捕獲,每個路由都有優先級,優先級最高的才能獲得此地址的使用權,並且主路由在一定時間內廣播自己的存活消息,當某一時刻,一旦各從路由收不到消息是會根據優先級選取另一個作爲主路由,若優先級相等,則比較IP地址大的獲取資源使用權限.可以配置多個vipvmac每個組都有自己的標識.虛擬路由標識(vrid) vmac格式爲00-00-5E-00-01-{vrid},前面的5段是固定的vrid8

Keepalived爲了實現虛擬路由協議內部設有許多組件

軟件結構爲

wKioL1QgvOaSTHelAAHVPg-QpzQ337.jpg



適用的場景:lvs  ngnix  haproxy

配置文件介紹

全局段

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_instance VI_1 {   ----------------  實體的名稱
    state MASTER    ---------------- 狀態MASTER或是BACKUP
    interface eth0     ----------------  配置在哪個接口上
virtual_router_id 51-------------- --  VRRID
    priority 100      - ---------------  優先級
    advert_int 1      ---------------   發送心跳的間隔時間
    authentication {   ---------------   認證
       auth_type PASS  ------------------認證算法 PASS||AH
        auth_pass 1111 密碼
    }
virtual_ipaddress {      -------------------   VIP  
格式爲   <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
例如      192.168.200.18/24 dev eth2 label eth2:1
        192.168.200.16
        192.168.200.17
        192.168.200.18
}
notify_master    當變爲MASTER時執行的腳本
notify_backup    當變爲BACKUP時執行的腳本
notify_fault      當故障時執行的腳本


例如: notify_master   /etc/init.d/nginx start

}

虛擬服務器段

 

virtual_server 192.168.200.100 443 {  ------------- 定義一個lvs
    delay_loop 6                  
    lb_algo rr       ----------------- lvs的調度算法 lb_algo rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind NAT    ------------------lvs模型lb_kind NAT|DR|TUN
    nat_mask 255.255.255.0  ------------ 掩碼網絡
    persistence_timeout 50   ------------- 持久連接的超時時間
    protocol TCP           ------------- 協議類型
    sorry_server <IPADDR> <PORT>  ------------- 所有realserver不可用時使用的服務器地址
    real_server 192.168.201.100 443 {   ----------------- realserver 定義段 地址
        weight 1           -------------權重
        SSL_GET {        健康狀態檢測時使用的方法
            url {          檢測哪個url
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc  此頁面的特徵碼
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3  連接超時時間
            nb_get_retry 3     重試時間
            delay_before_retry 3 重試前的時間間隔
        }
    }
}


 

下面通過實驗說明問題

利用keepalived創建lvs-dr的高可用方案

 

實驗拓撲圖爲

wKiom1QgvPXSzCnsAAG3WMQrzT0343.jpg



配置realserver

Httpd server1
Yum install httpd
Vim /var/www/html/index.html
<h1> Server2 172.16.101.202 </h1>
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@localhost ~]# ifconfig lo:0 172.16.101.22 netmask 255.255.255.255 broadcast 172.16.101.22
[root@localhost ~]# route add -host 172.16.101.22 dev lo:0


 

Httpd server 2

 

Yum install httpd
Vim /var/www/html/index.html
<h1> Server2 172.16.101.201 </h1>
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@localhost ~]# ifconfig lo:0 172.16.101.22 netmask 255.255.255.255 broadcast 172.16.101.22
[root@localhost ~]# route add -host 172.16.101.22 dev lo:0


 

Keepalived server 配置文件

! Configuration File for keepalived
 
global_defs {
   notification_email {
   [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance lvs-dr {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass hzm132
    }
    virtual_ipaddress {
        172.16.101.22
    }
}
 
virtual_server 172.16.101.22 80 {
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
 
    real_server 172.16.101.201 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
     real_server 172.16.101.202 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


啓動keepalived測試結果

產看master keepalived IP地址

 

[root@node2 keepalived]# ip addr show 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 08:00:27:ce:12:9b brd ff:ff:ff:ff:ff:ff

    inet 172.16.101.200/16 brd 172.16.255.255 scope global eth0

    inet 172.16.101.22/32 scope global eth0

    inet6 fe80::a00:27ff:fece:129b/64 scope link 

       valid_lft forever preferred_lft forever

打開網頁測試

wKioL1QgvUyTZW8vAAGLJMvSAR4245.jpg

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章