keepalived keepalived: 基於vrrp(虛擬冗餘路由協議)的實現 virtual server: 對於IPVS vrrp_script: 調用外部腳本 nginx haproxy等輕量級的實現 所謂的vrrp就是為瞭解決前端路由器如果發生單點故障導致後方伺服器全部不能與外部通信的 ...
keepalived
keepalived:
基於vrrp(虛擬冗餘路由協議)的實現
virtual server: 對於IPVS
vrrp_script: 調用外部腳本 nginx haproxy等輕量級的實現
所謂的vrrp就是為瞭解決前端路由器如果發生單點故障導致後方伺服器全部不能與外部通信的問題。於是兩台路由器通過vrrp協議連接,兩個路由器都給予虛擬的IP地址(VIP)和虛擬的MAC地址(VMAC),當發生故障的時候,兩個地址一起轉移,而不像其他的高可用功能一樣,需要進行一次虛假的mac地址的通告。因此,所以所謂的keepalived就是將VRRP協議實現在了LINUX上,但是又不僅僅限制於轉換地址的功能,也能夠提供如轉移一些nginx的服務的功能。
而keepalived之間的資源轉移是通過降低主節點的優先順序的方式,將資源轉移到副節點的方式
/etc/keepalived/keepalived.conf
/etc/rc.d/init.d/keepalived
keepalived.conf
global_defs { #全局配置段,一般來配置郵件功能
notification_email {#收件人
root@localhost
}
notification_email_from kaadmin@localhost #發件人
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 { #虛擬路由段的配置
state MASTER #初始狀態,如果這邊設置了master 那麼backup的priority 的值一定要小於master的
interface eth0 #通信網卡
virtual_router_id 51 #虛擬路由的ID號,不能大於255 還是MAC地址的最後一位,所以MAC地址就可以直接由這個來定義
priority 100 #初始優先順序
advert_int 1 #初始化通告的個數
authentication { #認證方式
auth_type PASS #認證類型
auth_pass 1111 #認證密碼
}
virtual_ipaddress { #VIP配置段
192.168.1.103
}
track_script{
abc #引用腳本名稱
}
}
vrrp_script abc{ #可以定義一個額外的腳本
#腳本功能
}
1.如何在狀態轉換時進行通知?
一般在vrrp_instance{}中進行使用
to MASTER transition
notify_master /path/to_master.sh
to BACKUP transition
notify_backup /path/to_backup.sh
FAULT transition
notify_fault "/path/to_backup.sh VG_1"
MASTER通知腳本實例:
#!/bin/bash
#
vip=192.168.1.103
contact='root@localhost'
thisip=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F: '{print $2}'` #獲取IP地址的
nofity(){
mailbody="vrrp transition,$vip floated to $thisip"
subject="$thissip is to be $vip master"
echo $mailbody | mail -s $subject $contact
}
nofity
或者合併為一個腳本,在keepalived.txt中有提供案例
在vrrp_instance配置中只需要加入
notify_master "/path/notify.sh master"
notify_backup "/path/notify.sh backup"
notify_fault "/path/notify.sh fault"
2.如何配置ipvs?
virtual server
realserver
health check
keepalived.conf 中的示例
virtual_server 172.168.100.100 80 {# VIP 地址和埠
delay_loop 6
lb_algo rr #負載均衡方法
lb_kind DR #LVS工作模型
nat_mask 255.255.0.0
persistence_timeout 0 #持久功能
protocol TCP #基於什麼工作方式
real_server 172.16.100.17 80 {#RIP
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.100.18 80 {#RIP
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3.如何對某特定服務做高可用
1丶監控服務
vrrp_script{
}
2丶追蹤監控服務
track_script{
}
另外應該在nofity腳本中定義根據狀態來啟動或停止nginx
notify_master "/path/notify.sh master"
notify_backup "/path/notify.sh backup"
notify_fault "/path/notify.sh fault"
設置vrrp_script監控服務,防止因為nginx進程以及停止了,服務卻還沒有停止,導致無法轉移的情況
vrrp_script chk_nginx{
script "killall -0 nginx"
inerval 1
weight -2
fall 2 失敗次數一次
rise 1 成功次數一次就行
}
4.如何實現基於多虛擬路由的master/master 模型
在配置文件中定義兩個vrrp_instance
vrrp_instance VI_1 { #虛擬路由段的配置
state MASTER #初始狀態,如果這邊設置了master 那麼backup的priority 的值一定要小於master的
interface eth0 #通信網卡
virtual_router_id 51 #虛擬路由的ID號,不能大於255 還是MAC地址的最後一位,所以MAC地址就可以直接由這個來定義
priority 100 #初始優先順序
advert_int 1 #初始化通告的個數
authentication { #認證方式
auth_type PASS #認證類型
auth_pass 1111 #認證密碼
}
virtual_ipaddress { #VIP配置段
192.168.1.103
}
vrrp_instance VI_2 { #虛擬路由段的配置
state BACKUP #初始狀態,如果這邊設置了master 那麼backup的priority 的值一定要小於master的
interface eth0 #通信網卡
virtual_router_id 55 #虛擬路由的ID號,不能大於255 還是MAC地址的最後一位,所以MAC地址就可以直接由這個來定義
priority 99 #初始優先順序
advert_int 1 #初始化通告的個數
authentication { #認證方式
auth_type PASS #認證類型
auth_pass 1111 #認證密碼
}
virtual_ipaddress { #VIP配置段
192.168.1.102
}
另外一個機子的配置文件只需要改變兩邊的初始狀態 和初始優先順序