1、什麼是 keepalived
Keepalived是一個免費開源的,用C編寫的相似於layer3, 4 & 7交換機制軟件,具有咱們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現須要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是經過VRRP協議實現多臺機器之間的故障轉移服務。 html
上圖是Keepalived的功能體系結構,大體分兩層:用戶空間(user space)和內核空間(kernel space)。
內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其餘相關的網絡功能)兩個部份。
用戶空間:linux
- WatchDog:負載監控checkers和VRRP進程的情況
- VRRP Stack:負載負載均衡器之間的失敗切換FailOver,若是隻用一個負載均稀器,則VRRP不是必須的。
- Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,能夠沒有VRRP Stack,但健康檢查healthchecking是必定要有的。
- IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
- Netlink Reflector:用來設定vrrp的vip地址等。
Keepalived的全部功能是配置keepalived.conf文件來實現的。nginx
2、安裝 keepalived
下載keepalived地址:http://www.keepalived.org/download.html vim
wget http://www.keepalived.org/software/keepalived-1.4.1.tar.gz #指定解壓路徑 tar -zxvf keepalived-1.4.1.tar.gz -C /usr/local/
#安裝依賴的軟件包
yum install -y openssl openssl-devel
#安裝和編譯
cd /usr/local/keepalived-1.4.1/ && ./configure --prefix=/usr/local/keepalived
make && make install服務器
keepalived安裝成Linux系統服務
keepalived的默認安裝路徑(默認路徑:/usr/local)此處沒有使用默認安裝方式網絡
mkdir /etc/keepalivedapp
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/負載均衡
而後複製keepalived腳本文件:ide
cp /usr/local/keepalived-1.4.1/keepalived/etc/init.d/keepalived /etc/init.d/ 測試
(或 : cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/)
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
能夠設置開機啓動:chkconfig keepalived on
service keepalived start
service keepalived stop
3、配置nginx主備自動重啓
兩臺 linux 電腦安裝了 nginx
備註:nginx 已成功安裝在默認路徑 /usr/local/nginx
修改 keepalived 的配置文件 vim /etc/keepalived/keepalived.conf
能夠備份源配置文件粘貼下面配置 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf :wq
vim /etc/keepalived/nginx_check.sh
賦予可執行權限:chmod +x /etc/keepalived/nginx_check.sh
/usr/local/nginx/sbin/nginx
service keepalived start
ps -ef | grep nginx
ps -ef | grep keepalived
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機之後,自動開啓服務 interval 2 #檢測時間間隔 weight -20 #若是條件成立的話,則權重 -20 } # 定義虛擬路由,VI_1 爲虛擬路由的標示符,本身定義名稱 vrrp_instance VI_1 { state MASTER #來決定主從 interface enth1 # 綁定虛擬 IP 的網絡接口,根據本身的機器填寫 virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須同樣 mcast_src_ip 192.168.110.141 #填寫本機ip priority 100 # 節點優先級,主要比從節點優先級高 nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題 advert_int 1 # 組播信息發送間隔,兩個節點設置必須同樣,默認 1s authentication { auth_type PASS auth_pass 1111 } # 將 track_script 塊加入 instance 配置塊 track_script { chk_nginx #執行 Nginx 監控的服務 }i viirtual_ipaddress { 192.168.110.110 # 虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途普遍。可配置多個。 } }
實際配置以下:
測試
首先看一下倆臺機器的ip a 命令下 都會出現一個虛擬ip,能夠停掉一個機器的keepalived,而後測試,命令:service keepalived stop。結果發現當前停掉的機器已經不可用,keepalived 配置的虛擬 ip 會自動切換到另外一臺機器上。
中止後:
經過該虛擬 ip 能夠進行訪問 nginx
4、測試 keepalived 重啓 nginx
強殺掉nginx進程便可,發現也會實現自動切換服務器節點。
5、Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是經過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)來實現的。
在 Keepalived服務正常工做時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點本身還活看,當主 Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主 Master節點的心跳了,因而調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
那麼,什麼是VRRP呢?
VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名爲虛擬路由冗餘協議 ,VRRP的出現就是爲了解決靜態踣甶的單點故障問題,VRRP是經過一種競選機制來將路由的任務交給某臺VRRP路由器的。