Keepalived
主要目的是爲lvs提供高可用功能,併爲lvs提供規則檢查後端服務器健康狀態.工作原理是通過軟件方式模擬實現vrrp---virtual redundent route protocol協議
將多個路由器配置成一個虛擬路由器,此虛擬路由器有vip和vmac每個時刻只能被主路由捕獲,每個路由都有優先級,優先級最高的才能獲得此地址的使用權,並且主路由在一定時間內廣播自己的存活消息,當某一時刻,一旦各從路由收不到消息是會根據優先級選取另一個作爲主路由,若優先級相等,則比較IP地址大的獲取資源使用權限.可以配置多個vip和vmac每個組都有自己的標識.虛擬路由標識(vrid) vmac格式爲00-00-5E-00-01-{vrid},前面的5段是固定的vrid爲8位
Keepalived爲了實現虛擬路由協議內部設有許多組件
軟件結構爲
適用的場景:lvs ngnix haproxy
配置文件介紹
全局段
global_defs {
notification_email { ------------------------ 郵件發送到的地址
}
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的高可用方案
實驗拓撲圖爲
配置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
打開網頁測試