1、keepalived簡介:node
keepalived是一個相似於layer3, 4 & 5交換機制的軟件,也就是咱們平時說的第3層、第4層和第5層交換。Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。linux
工做原理nginx
Layer3,4&5工做在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別以下:web
Layer3:Keepalived使用Layer3的方式工做式時,Keepalived會按期向服務器羣中的服務器發送一個ICMP的數據包(既咱們平時用的Ping程序),若是發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器羣中剔除,這種狀況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效做爲服務器工做正常與否的標準。shell
Layer4:若是您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工做正常與否。如web server的服務端口通常是80,若是Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。vim
Layer5:Layer5就是工做在具體的應用層了,比Layer3,Layer4要複雜一點,在網絡上佔用的帶寬也要大一些。Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。centos
2、實驗步驟:bash
1.建立管理節點在node1上,創建雙機互信node1和node2,而後同步時間,安裝keepalived服務器
2.在node1上配置文件須要作一下修改網絡
3.把配置文件複製到node2上一份,並修改初始狀態和優先級
在node1上開始啓動服務[root@node1 ~]# servicekeepalived start
而後檢查ip地址
4.如今把node1的keepalived停掉
[root@node1keepalived]# service keepalived stop
Stoppingkeepalived: [ OK ]
驗證node2是否把virtual_ipaddress拿走
驗證成功
能夠在配置文件中手動經過vrrp_script定義一個外圍的檢測機制,並在vrrp_instance中經過定義track_script來追蹤腳本執行過程,實現節點轉移
實驗測試在/etc/keepalived/keepalived.conf中作一下修改
在node2上作一樣的操做,但不建立down文件,以後一塊兒重啓服務
進行檢測
此時將node1中/etc/keepalived/下的down刪除,進行查看
驗證成功
3、詳細介紹如下四個功能實現操做
1.如何在狀態轉換時進行通知?
2.如何配置Ipvs?
3.如何對某特定服務作高可用
4.如何實現基於多虛擬路由的master/master模型?
1.要在狀態轉換是進行通知,須要定義通知腳本能夠在
vrrp_sync_group{
}中定義,也能夠在
vrrp_instance{
}中定義
經過man keepalived命令能夠查看通知腳本定義的兩種方法
第一種
# to MASTER transition
notify_master /path/to_master.sh
# to BACKUP transition
notify_backup /path/to_backup.sh
# FAULT transition
notify_fault "/path/fault.sh VG_1"
第二種
#arguments
# $1 ="GROUP"|"INSTANCE"
# $2 = name of group or instance
# $3 = target state of transition
# ("MASTER"|"BACKUP"|"FAULT")
notify /path/notify.sh
例如:
轉換爲MASTER的狀態通知
其餘狀態轉換相似
下面用一個腳本notify.sh實現狀態轉換通知的簡單示例:
進行測試
經過傳參數master|backup|fault驗證均可以成功
在配置文件keepalived.conf中進行腳本調用
爲node2提供一樣的配置而後進行測試
[root@node1keepalived]# ls
down keepalived.conf keepalived.conf.bak notify.sh
[root@node1keepalived]# rm -f down
[root@node1keepalived]# mail
>N18 root Thu Sep 2621:57 18/700 "node1.magedu.comto be master: 172.16.2.8 floating"截取了一條
驗證均可以成功
二、如何配置ipvs
在node2上作一樣的修改,啓動httpd服務,keepalived能自動生成規則,而後查看ipvsadm規則
三、如何對某特定服務作高可用?以nginx爲例進行講解
在兩個節點上安裝nginx
[root@node1~]# ansible all -m yum -a 'name=nginx state=present'
啓動nginx服務,啓動以前注意要中止httpd服務
對node1和node2中/etc/keepalived/下的notify.sh腳本進行修改
而後啓動keepalived服務,能夠看到在node1上80端口開始啓用
[root@node1keepalived]# ss -tanl | grep :80
LISTEN 0 128 *:80 *:*
而後在/etc/keepalive/下建立down文件,看nginx服務是否能夠轉移到node2上
驗證成功,說明實現了nginx的高可用服務
總結:要對某特定服務作高可用有兩個要點
一是:要提供監控服務腳本
二是:在vrrp實例中追蹤服務
修改配置文件keepalived.conf
在node2上作一樣的修改
測試:
[root@node2keepalived]# killall nginx
Youhave new mail in /var/spool/mail/root
[root@node2keepalived]# ss -tanl | grep :80
[root@node2keepalived]#
在node1上
[root@node1keepalived]# ss -tanl | grep :80
LISTEN 0 128 *:80 *:*
驗證成功
四、如何實現基於多虛擬路由的master/master模型?
要實現雙主模型須要定義兩個vrrp_instance,在node1的配置文件中要一下修改:
在node2上作一樣的修改,重啓keepalived,進行測試
在node2上
驗證成功