keepalived問題闡述及配置
- 問題:怎么完成維護模式keeplived切換(完成keepalived高可用)?
答:我們一般進行主從切換測試時都是關閉keepalived或關閉接口,有沒有一種方法能夠實現在不關閉keepalived下或網卡接口來實現維護呢?在新版keepalived中,支持腳本vrrp_script,只需要創建個文本做引子,來讓腳本成功執行,就會自動進行主備切換了。
(1)定義腳本
vrrp_script chk_schedown { script "[ -e /etc/keepalived/down ] && exit 1 || exit 0" interval 1 //監控間隔 weight -11 //主動減少優先級 fall 2 //監控失敗次數 rise 1 //監控成功次數 } vrrp_script chk_nginx { script "`killall -0 nginx` && exit 0 || exit 1" //測試能不能殺掉nginx,為1才會執行以下操作 interval 1 weight -11 fall 2 rise 1 }
(2)執行腳本:在實例中調用執行
track_script { chk_schedown //執行定義的腳本名稱 chk_nginx }
在keepalived配置文件中直接寫后端服務器的負載均衡效果時,keepalived會自己調用lvs的api接口去寫規則,並且生效
~]# ip addr add 192.168.1.100 dev eth0 //此處添加VIP ~]# ip addr del 192.168.1.100 dev eth0 !Configuration File for keepalived
global_defs {
notification_email {
localhost@root.com
}
notification_email_from root
smtp_server 127.0.0.1 //郵件服務器地址
smtp_connect_timeout 30
router_id LVS_DEVEL //標識虛擬路由ID,主從得不同
vrrp_mcast_group4 224.0.10.10 //組播地址,用來發送VRRP報文
}
vrrp_script chk_schedown {
script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
interval 1
weight -11
fall 2
rise 1
}
vrrp_script chk_nginx { //此處檢測nginx只需在主上有即可,如果從上也有話,就會導致主上的nginx,down的一瞬間,又起來了,優先級混亂
script "killall -0 nginx
&& exit 0 || exit 1"
interval 1
weight -11
fall 2
rise 1
}vrrp_instance VI_1 { //實例
state MASTER //模式配置,當前為Master
interface eth0 //應用於哪個網卡
virtual_router_id 10 //虛擬路由ID組,這個主從得相同
priority 100 //優先級
adver_int 1 //1秒一個報文
authentication {
auth_type PASS //簡單報文加密
auth_pass 12345678} virtual_ipaddress { 172.16.254.35 //VIP地址,也就是漂移地址 } track_script { //調用腳本 chk_schedown chk_nginx }
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
} //這三句是在狀態發生變換的時候,主動調用腳本來發郵件來通知管理員,同時啟動備用nginx//這里在添加一個實例就是雙主了,另一台state,virtual_router_id,auth_pass不同就行
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 11
priority 91
adver_int 1
authentication {
auth_type PASS
auth_pass 12345687
}
virtual_ipaddress {
172.16.254.36
}track_script { chk_schedown chk_nginx }
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
此段就相當於之前博客所寫的nginx的upstream和stream的集合,nginx模塊實現負載均衡效果,下面的語句直接接在上面的配置文件中,也就相當於upstream的效果,upstream配置截圖在下面:
virtual_server 172.16.254.35 80 { //定義的負載均衡的后端主機的IP及端口 delay_loop 6 //服務輪詢的時間間隔 lb_algo wrr //輪詢算法為權重輪詢 lb_kind DR //集群類型 nat_mask 255.255.0.0 #persistence_timeout 50 //持久連接時長 protocol TCP //協議類型,默認為TCP
real_server 172.16.250.84 80 { //后端服務器地址 weight 2 //權重 HTTP_GET { //狀態檢測 url { path / status_code 200 //狀態為200才算后端主機正常,也有tcp檢測,但是檢測效果不准確 } connect_timeout 2 //連接超時 nb_get_retry 3 //嘗試幾次連接后斷定結果 delay_before_retry 1 //延遲1秒后嘗試 } } } } real_server 172.16.252.113 80 { //第二個后端服務器 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 2 nb_get_retry 3 delay_before_retry 1 } } sorry_server 127.0.0.1 80 //備用服務器,當后端服務器都掛了的時候,本機上能提供一個SORRY
}
- nginx搭配最上面的配置實例,可實現雙主高可用負載
events { worker_connections 1024; } http { upstream web { server 172.16.252.113; server 172.16.250.84; server 127.0.0.1:80 backup; } server { listen 80; server_name www.godilgence.com; index index.html; location / { proxy_pass http://web; } } server { listen 127.0.0.1:80; index index.html; root /usr/share/nginx/html; } }
- 在之前的博文里寫的lvs-dr模式后端主機的配置實例
#!/bin/bash
VIP=172.16.254.35
case $1 in
start)
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore ip addr add dev lo:0 "$VIP"/32 >/dev/null ip route add $VIP dev lo:0 ;;
stop)
ifdown lo:0
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore ;;
status)
a=ip a l lo:0 | grep $VIP
b=ip route | grep lo:0 | grep $VIP
if [ $a -a $b ];then echo "Realserver is running." else echo "Realserver is stopping." fi ;;
*)
echo "$0:Usage $0 {start|stop|staus} "
esac
- 當主備模式發生變換的時候,郵件通知管理員,並將主備機器上的say sorry的web服務器打開
#!/bin/bash VIP=172.16.254.35
notify() {
mailsubject="hostname
to be $1:$VIP is floating."
mailcontent="date +%F %H:%M:%S
,vrrp transition,hostname
changed to be $1"
echo $mailsubject | mail -s "$mailcontent" root@localhost
}case $1 in
master)
systemctl start nginx.service
notify master
;;
backup)
systemctl start nginx.service
notify backup
;;
fault)
systemctl stop nginx.service
notify faultesac
<li style="font-size:18px;font-weight:bold">產生背景:一般來說,主機通過設置默認網關來與外部網絡聯系,網關出現問題時,主機與外部的網絡就會中斷。如果手動修改網關,那會經網絡管理員帶來無盡的麻煩,為了解決這個問題,給網關做備份。<br /><br />
<li style="font-size:18px;font-weight:bold">VRRP是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另一台路由器來代替出現故障的路由器進行工作,從而保持網絡通信的連續性和可靠性。
相關術語:
虛擬路由:由一個Master路由器和多個Backup路由器組成。主機將虛擬路由器當作默認網關。
VRID:虛擬路由器的標識,有相同VRID的一組路由器構成一個虛擬路由器
Master:虛擬路由器中承擔報文轉發任務的路由器
Backup:Master路由器出現故障時,能夠代替Master路由器工作的路由器
虛擬IP地址:一個虛擬路由器可以擁有一個或多個IP地址
IP地址擁有者:接口IP地址與虛擬IP地址相同的路由器被稱為IP地址擁有者
虛擬MAC地址:一個虛擬路由器擁有一個虛擬MAC地址,虛擬MAC地址的格式為00-00-5E-00-01-VRID,路由器回應ARP請求使用的是虛擬MAC地址
優先級:VRRP根據優先級來確定虛擬路由器中每台路由器的地位。
<br /><br />
<li style="font-size:18px;font-weight:bold">虛擬路由器簡介:
VRRP將局域網內的一組路由器划分在一起,形成一個VRRP備份組,它在功能上相當於一台虛擬路由器,使用虛擬路由器號進行標識。<br /><br />
<li style="font-size:18px;font-weight:bold">VRRP工作過程:
(1)路由器通過發送免費ARP報文,將自己的虛擬MAC地址通知給與它連接的設備或者主機,從而承擔報文轉發任務
(2) 免費ARP,自問自答,虛擬ip拿走后,主動發送arp廣播,在自己回答,客戶機就會更新arp緩存,從而網絡中的主機感知不到Master路由器已經切換為另一台設備。
<br /><br />
<li style="font-size:18px;font-weight:bold">VRRP Master 選舉機制:<br />
(1)如果VRRP報文中Master路由器的優先級高於自己的優先級,則路由器保持在Backup狀態。<br />
一般主路由器處於Master狀態,備份路由器處於Backup狀態<br />
Master和Backup之間需要實時通信,Master路由器周期性地發送VRRP報文,在虛擬路由器中公布其配置信息(優先級等)和工作狀況。Backup路由器通過接收到VRRP報文的情況來判斷Master路由器是否工作正常,其過程中VRRP狀態上報機制如下(簡要):<br /><br />
VRRP通告報文時間間隔定時器:<br />
I、如果Backup路由器在等待了3個時間間隔后,依然沒有收到VRRP通告報文,則認為自己是Master路由器,並對外發送VRRP通告報文,重新進行Master路由器的選舉。<br />
II、如果Master發現自己的鏈路不通,Master路由器主動放棄Master地位<br /><br />
VRRP搶占延遲時間定時器:<br />
I、在性能不穩定的網絡中,Backup路由器可能因為網絡堵塞而在Master_Down_Interval期間內沒有收到Master路由器的報文,而主動搶占為Master位置,如果此時原Master路由器報文又到達了,就會出現虛擬路由器的成員頻繁的進行Master搶占現象。為了避免組內成員頻繁進行主備狀態轉換,特制定了延遲等待定時器,就是在時間間隔定時器后不立馬搶占,而是在等待延遲定時器,時間全都結束了,才會搶占Master。
<br /><br />
<li style="font-size:18px;font-weight:bold">Backup搶占方式:<br />
(1)非搶占方式:只要Master路由器沒有出現故障,Backup路由器即使隨后被配置了更高的優先級也不會成為Master路由器<br />
(2)搶占式(默認):Backup一旦發現自己的優先級比當前Master路由器的優先級高,就會對外發送VRRP通告報文,導致備份組內路由器重新選舉Master路由器,並最終取代原有Master路由器。相應地,原Master路由器會變成Backup路由器
<br /><br />
<li style="font-size:18px;font-weight:bold">認證方式:<br />
(1)無認證:不提供安全性保障<br />
(2)Simple(簡單字符認證):發送VRRP報文的路由器將認證字填入到VRRP報文中,而收到VRRP報文的路由器會將收到的VRRP報文中的認證字進行比較。如果認證字相同,則認為接收到的報文是合法的VRRP報文,否則認為接收到的報文是非法報文。
(3) md5認證:
<br /><br />
<li style="font-size:18px;font-weight:bold">VRRP虛擬轉發器監視功能:<br />
VRRP的監視接口能更好的擴充了備份功能,不僅能在備份組中的某路由器的接口出現故障時提供備份功能,還能在路由器的其它接口(比如連接上行鏈路的接口)不可用時提供備份功能,
路由器連接上行鏈路的接口出現故障時,備份組無法感知上行鏈路的故障,如果該路由器此時處於Master狀態,將會導致局域網內的主機無法訪問外部網絡。通過監視