keepalived:是一個類似於 layer3, 4 & 7 交換機制的軟件,也就是我們平時說的第 3 層、第 4 層和第 7層交換。 Keepalived 的作用是檢測 web 服務器的狀態,如果有一臺 web 服務器死機,或工作出現故障,Keepalived 將檢測到,並將有故障的 web 服務器從系統中剔除,當 web 服務器工作正常後 Keepalived 自動將web 服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web 服務器。
keepalived程序是vrrp協議在linux主機上以守護進程的方式實現的,能夠根據配置文件生成IPVS規則,並對各real server的健康做監測,以及Loadbalance主機和backup主機之間failover的實現。
keepalived在TCP/IP七層中的三層各層原理分別如下:
Layer3(IP層): Keepalived 使用 Layer3 的方式工作式時, Keepalived 會定期向服務器羣中的服務器發送一個 ICMP 的數據包(既我們平時用的 Ping 程序) , 如果發現某臺服務的 IP 地址沒有激活,Keepalived 便報告這臺服務器失效,並將它從服務器羣中剔除,這種情況的典型例子是某臺服務器被非法關機。 Layer3 的方式是以服務器的 IP 地址是否有效作爲服務器工作正常與否的標準。
Layer4(TCP層): 主要以 TCP 端口的狀態來決定服務器工作正常與否。如 web server 的服務端口一般是80,如果 Keepalived 檢測到 80 端口沒有啓動,則 Keepalived 將把這臺服務器從服務器羣中刪除。
Layer7(應用層):Layer5 就是工作在具體的應用層了,比 Layer3,Layer4 要複雜一點,在網絡上佔用的帶寬也要大一些。 Keepalived 將根據用戶的設定檢查服務器程序的運行是否正常,如果與用戶的設定不相符,則 Keepalived 將把服務器從服務器羣中剔除;
比如訪問一個頁面,如果沒有這個頁面,就會將該節點剔除
keepalived的作用:
1、管理VIP(虛擬IP): VIP會在LVS(虛擬主機)之間漂移
2、監控LVS分發器:運行在主分發的 Keepalived 會以組播的形式向網絡中宣告自己,即主分發器還活着,備用節點能收到。當備用節點,在一個時間單位中收不到組播,備用節點會認爲主 LVS 掛了,開始接手主分發器工作,把VIP 配給自己
3、管理RS : keepalived會每隔一個時間段去做一次類似於訪問的操作
一般Keepalived是實現前端高可用,常用的前端高可用的組合有,就是我們常見的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived
keepalived的配置文件keepalived.conf每段說明:
Global configuration : 全局配置
global_defs{
…
}
VRRP Configuration : 配置VRRP實例
vrrp_instance name{
…
}
LVS Configuration : IPVS的相關配置
virtual_server ip port {
…
real_server ip port {
…
}
}
安裝方式省略,可採用源碼編譯,也可採用官方yum源安裝
主要配置文件:
keepalived配置文件keepalived.conf詳解:
#全局定義部分
global_defs {
notification_email {
[email protected] #設置報警郵件地址,收件人郵箱,可以設置多個,每行一個。注意,如果要開啓郵件報警,需要開啓本機的sendmail服務。
}
notification_email_from Keepalived@localhost #發件人郵箱。
smtp_server 192.168.200.1 #設置smtp server地址。
smtp_connect_timeout 30 #設置連接smtp服務器超時時間。
router_id LVS_MASTER #運行Keepalived服務器的一個標識。建議寫主機名
}
#vrrp實例定義部分
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER表示此主機是主用服務器,BACKUP表示是備用服務器。
interface eth0 #指定HA監測網絡的接口。
virtual_router_id 51 #虛擬路由標識,這個標識是一個數字,並且同一個vrrp實例使用唯一的標識,即同一個vrrp_instance下,MASTER和BACKUP必須是一致的。
priority 100 #定義優先級,數字越大,優先級越高,在一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級。
advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒。
authentication { #設定驗證類型和密碼。
auth_type PASS #設置驗證類型,主要有PASS和AH兩種。
auth_pass 1111 #設置驗證密碼,在一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信。
}
virtual_ipaddress { #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個。
192.168.12.135
}
}
#虛擬服務器定義部分
virtual_server 192.168.12.135 80 { #設置虛擬服務器,需要指定虛擬ip地址和服務端口,ip與端口之間用空格隔開。
delay_loop 6 #設置健康檢查時間,單位是秒。
lb_algo rr #設置負載調度算法,這裏設置爲rr,即輪詢算法。
lb_kind DR #設置LVS實現負載均衡的機制,可以有NAT、TUN和DR三個模式可選。
persistence_timeout 50 #會話保持時間,單位是秒,這個選項對於動態網頁是非常有用的,爲集羣系統中session共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話保持時間。需要注意的是,這個會話保持時間,是最大無響應超時時間,也就是說用戶在操作動態頁面時,如果在50秒內沒有執行任何操作,那麼接下來的操作會被分發到另外節點,但是如果一直在操作動態頁面,則不受50秒的時間限制。0爲不可用
protocol TCP #指定轉發協議類型,有tcp和udp兩種。
real_server 192.168.12.246 80 { #配置服務節點1,需要指定real server的真實IP地址和端口,ip與端口之間用空格隔開。
weight 3 #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值的大小可以爲不同性能的服務器分配不同的負載,可以對性能高的服務器設置較高的權值,而對性能較低的服務器設置相對較低的權值,這樣就合理的利用和分配了系統資源。
TCP_CHECK { #realserve的狀態檢測設置部分,單位是秒
connect_timeout 10 #10秒無響應超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔
}
}
real_server 192.168.12.237 80 { #配置服務節點2
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
http://blog.51cto.com/lanlian/1303195 keepalived詳細配置案例
keepalived配置文件案例: keepalived一般搭建都是主從各一個
global_defs {
notification_email {
[email protected] #郵箱寫自己的即可
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
router_id master #keepalived 服務器名稱,主寫master,備寫backup,或用服務器名字命名
}
vrrp_instance VI_1 {
state MASTER #若是備用keepalived,則填BACKUP
interface enp0s8
virtual_router_id 51
priority 100 # 主備keepalived最好不一樣,一般備的該值比主的低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.200 #虛IP,即VIP
}
}
主備keepalived配置文件的主要區別在:
state 一個是MASTER,一個是BACKUP
priority 主keepalived的值比從keepalived的值大
編譯安裝keepalived的步驟:
keepalived最少3臺服務器:
一臺主keepalived服務器、一臺備keepalived服務器、至少一臺提供httpd、nginx或tomcat服務的服務器
tar zxvf keepalived源碼包
cd keepalived-版本號
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
touch /etc/init.d/keepalived keepalived啓動腳本,解壓的源碼包裏有
chmod +x /etc/init.d/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
vi /etc/keepalived/keepalived.conf #配置文件,解壓的源碼包裏有
chkconfig --add keepalived
chkconfig keepalived on
service keepalived start
more /var/log/messages |grep -E "\\[" |grep keepalived #查看keepalived運行日誌