keepalived原理

http://zkchang.blog.51cto.com/10574636/1706998web

 

一.keepalived和其工做原理:
 
keepalived是一個相似於Layer2,4,7交換機制的軟件。是Linux集羣管理中保證集羣高可用的一個服務軟件,其功能是用來防止單點故障。
 
keepalived的工做原理:
         keepalived是基於VRRP協議實現的保證集羣高可用的一個服務軟件,主要功能是實現真機的故障隔離和負載均衡器間的失敗切換,防止單點故障。在瞭解keepalived原理以前先了解一下VRRP協議。
 
VRRP協議:Virtual Route Redundancy Protocol虛擬路由冗餘協議。是一種容錯協議,保證當主機的下一跳路由出現故障時,由另外一臺路由器來代替出現故障的路由器進行工做,從而保持網絡通訊的連續性和可靠性。在介紹VRRP以前先介紹一些關於VRRP的相關術語:
 
虛擬路由器:由一個 Master 路由器和多個 Backup 路由器組成。主機將虛擬路由器看成默認網關。
VRID:虛擬路由器的標識。有相同 VRID 的一組路由器構成一個虛擬路由器。
Master 路由器:虛擬路由器中承擔報文轉發任務的路由器。
Backup 路由器: Master 路由器出現故障時,可以代替 Master 路由器工做的路由器。
虛擬 IP 地址:虛擬路由器的 IP 地址。一個虛擬路由器能夠擁有一個或多個IP 地址。
IP 地址擁有者:接口 IP 地址與虛擬 IP 地址相同的路由器被稱爲 IP 地址擁有者。
虛擬 MAC 地址:一個虛擬路由器擁有一個虛擬 MAC 地址。虛擬 MAC 地址的格式爲 00-00-5E-00-01-{VRID}。一般狀況下,虛擬路由器迴應 ARP 請求使用的是虛擬 MAC 地址,只有虛擬路由器作特殊配置的時候,纔回應接口的真實 MAC 地址。
 
優先級: VRRP 根據優先級來肯定虛擬路由器中每臺路由器的地位。
非搶佔方式:若是 Backup 路由器工做在非搶佔方式下,則只要 Master 路由器沒有出現故障,Backup 路由器即便隨後被配置了更高的優先級也不會成爲Master 路由器。
搶佔方式:若是 Backup 路由器工做在搶佔方式下,當它收到 VRRP 報文後,會將本身的優先級與通告報文中的優先級進行比較。若是本身的優先級比當前的 Master 路由器的優先級高,就會主動搶佔成爲 Master 路由器;不然,將保持 Backup 狀態。
 
虛擬路由示意圖:
              
 
 
      VRRP將局域網內的一組路由器劃分在一塊兒,造成一個VRRP備份組,它在功能上至關於一臺路由器的功能,使用虛擬路由器號進行標識(VRID)。虛擬路由器有本身的虛擬IP地址和虛擬MAC地址,它的外在變現形式和實際的物理路由徹底同樣。局域網內的主機將虛擬路由器的IP地址設置爲默認網關,經過虛擬路由器與外部網絡進行通訊。
 
      虛擬路由器是工做在實際的物理路由器之上的。它由多個實際的路由器組成,包括一個Master路由器和多個Backup路由器。 Master路由器正常工做時,局域網內的主機經過Master與外界通訊。當Master路由器出現故障時, Backup路由器中的一臺設備將成爲新的Master路由器,接替轉發報文的工做。(路由器的高可用)
 
VRRP的工做工程:
(1) 虛擬路由器中的路由器根據優先級選舉出 Master。 Master 路由器經過發送免費 ARP 報文,將本身的虛擬 MAC 地址通知給與它鏈接的設備或者主機,從而承擔報文轉發任務;
(2) Master 路由器週期性發送 VRRP 報文,以公佈其配置信息(優先級等)和工做情況;
(3) 若是 Master 路由器出現故障,虛擬路由器中的 Backup 路由器將根據優先級從新選舉新的 Master;
(4) 虛擬路由器狀態切換時, Master 路由器由一臺設備切換爲另一臺設備,新的 Master 路由器只是簡單地發送一個攜帶虛擬路由器的 MAC 地址和虛擬 IP地址信息的ARP 報文,這樣就能夠更新與它鏈接的主機或設備中的ARP 相關信息。網絡中的主機感知不到 Master 路由器已經切換爲另一臺設備。
(5) Backup 路由器的優先級高於 Master 路由器時,由 Backup 路由器的工做方式(搶佔方式和非搶佔方式)決定是否從新選舉 Master。
VRRP優先級的取值範圍爲0到255(數值越大代表優先級越高)
 
================================================================
 
keepalived的工做原理就是基於VRRP實現的,keepalived的體系結構圖以下:

             
 
在這個機構圖中,處於內核的IPVS和NETLINK,其中NETLINK是提供高級路由及其餘相關的網絡功能,若是在負載均衡器上啓用iptables/netfilter,將會直接影響它的性能。對於圖中不一樣模塊功能的介紹以下:
 
         - VRRP Stack 負責負載均衡器之間的失敗切換FailOver;//LVS中負責DR調度器組的
 
         - Checkers 負責檢查調度器後端的Real server 或者 Upstream Server的健康情況; // 檢查RS的狀態,決定是否將其剔除
   - WatchDog 負責監控checkers和VRRP進程的情況;
   - IPVS wrapper 用來發送設定的規則到內核IPVS;
   - Netlink Reflector 用來設定VRRP的vip地址。// VIP也有‘人’管
 
keepalived運行時,會啓動3個進程,分別爲:core(核心進程),check和vrrp 
    - core:負責主進程的啓動,維護和全局配置文件的加載;
    - check:負責健康檢查
    - vrrp:用來實現vrrp協議
 
總結:在vrrp協議的基礎上實現了服務器主機的負載均衡,VRRP負責調度器之間的高可用。
 
Keepalived 配置文件介紹:
 
              在yum安裝好keepalived以後,keepalived會產生一個配置文件/etc/keepalived/keepalived.conf ,配置文件包含了三個段:
  全局定義段、VRRP實例定義段、虛擬服務器定義段。
 
  1. global_defs {
  2. notification_email { 指定keepalived在發生切換時須要發送email到的對象。
  3. acassen@firewall.loc
  4. }
  5. notification_email_from huangxin202823@163.com #指定發件人
  6. smtp_server smtp.163.com #指定smtp服務器地址
  7. smtp_connect_timeout 3 #指定smtp鏈接超時時間
  8. router_id LVS_DEVEL #運行keepalived的一個標識
  9. }
  10. vrrp_sync_group VG_1{ #監控多個網段的實例
  11. group{
  12. inside_network #實例名
  13. outside_network }
  14. notify_master /path/xx.sh #指定當切換到master時,執行的腳本
  15. netify_backup /path/xx.sh #指定當切換到backup時,執行的腳本
  16. notify_fault "path/xx.shVG_1" #故障時執行的腳本
  17. notify /path/xx.sh #腳本所在目錄
  18. smtp_alert #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知}
  19. #VRRP實例定義段
  20. vrrp_instance VI_1 {
  21. state MASTER #指定哪一個爲master,哪一個爲backup
  22. interface eth0 #設置實例綁定的網卡
  23. virtual_router_id 51 #VRID標記
  24. priority 100 #優先級,高優先級的DR會搶佔爲master (默認爲搶佔模式)
  25. advert_int 1 #檢查間隔,1秒
  26. authentication { #設置認證
  27. auth_type PASS #認證方式
  28. auth_pass 1111 #認證字符串(使用 openssl rand -hex 6生成隨機字符串)
  29. }
  30. virtual_ipaddress { #設置VIP
  31. <IPADDR>/<MASK> brd <IPADDR> dev <STRING>scope <SCOPE> label <LABEL>
  32. 192.168.200.17/24 deveth1
  33. 192.168.200.100/24 deveth2 label eth2:1
  34. }
  35. sorry_server 127.0.0.1 80 #web服務器所有失敗,能夠指定Sorry web
  36. }
  37. virtual_server 192.168.200.100 443 {
  38. delay_loop 6 #健康檢查時間間隔,單位秒
  39. lb_algo rr #負載調度算法,支持的算法:rr|wrr|lc|wlc|lblc|sh|dh
  40. lb_kind DR #LVS的類型:有NAT|DR|TUN
  41. nat_mask255.255.255.0 #子網掩碼
  42. persistence_timeout50 #會話保持時間,單位秒(能夠適當延長時間以保持session)
  43. protocol TCP #轉發協議類型,有TCP和UDP兩種
  44.   real_server 192.168.201.100443 { #定義RS 服務
  45. weight 1#權重
  46. #inhibit_on_failure #當服務器健康檢查失效時,將weight設置爲0不是直接從ipvs中刪除
  47. #notify_up <STRING>|<QUOTED-STRING>#Server啓動時執行的腳本
  48. #notify_down <STRING>|<QUOTED-STRING>#Server down時執行的腳本
  49. #後端RS服務器的檢查 (HTTP_GET 和SSL_GET):
  50. SSL_GET {
  51. url { #檢查url,能夠指定多個,status_codeand digest
  52. path /
  53. digest ff20ad #或者status_code 200 ....
  54. }
  55. connect_timeout 3 #鏈接超時時間
  56. nb_get_retry 3 #重連次數
  57. delay_before_retry 3 #重連間隔時間
  58. }
  59. #也能夠經過TCP_CHECK判斷RealServer的健康情況:
  60. }
  61. }
相關文章
相關標籤/搜索