Keepalived 工作原理及簡要安裝
來自: http://my.oschina.net/luciamoore/blog/607034
===============================
高性能集群軟件-Keepalived
===============================
keepalived 介紹
>>>-------------------------------------------------------------
keepalived 是 Linux下一個輕量級的高可用解決方案
keepalived 主要通過虛擬路由冗余(VRRP)來實現高可用功能
優點:部署及使用簡單,只需一個配置文件即可完成
功能:1. 服務器狀態檢測和故障隔離功能
2. HA(High Available) cluster
<<<-------------------------------------------------------------
keepalived 發展
>>>--------------------------------------------------------------------------------------------------
keepalived起初是為LVS(Linux Virtual System)設計,專門監控集群系統中各個服務節點的狀態
根據TCP/IP參考模型 第三、第四、第五層交換機制檢測每個服務節點的狀態(詳細見本頁keepalived工作原理)
e.g: keepalived檢測WEB服務器的狀態;
如果一臺WEB服務器死機/工作出現古裝,keepalived檢測到此狀況后會將故障服務器從系統中剔除;
直至該服務器工作正常后keepalived自動將該服務器加入到服務器群中;
以上工作keepalived自動完成,無需人工干涉,人工干預僅是修復出現故障的服務節點;
<<<----------------------------------------------------------------------------------------------------------
>>>---------------------------------------------------------------------------------------------------
keepalived 后續加入了VRRP功能
VRRP(Virtaul Router Redunadancy Protocol,虛擬路由器冗余協議)
目的:解決靜態路由出現的單點故障問題,實現網絡不間斷穩定運行
<<<------------------------------------------------------------------------------------------------------
VRRP 協議與工作原理
? 引入VRRP概念
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*說明*:圖片來源百度百科;左側圖片為局域網組網;右側圖片為VRRP組網
>>>------------------------------------------------------------------------------------------------------------
局域網組網 e.g:
網絡內的所有主機會設置一條默認網關(10.100.10.1),當主機發出的目的地址不在本網段(10.100.10.0/24)的報文;
通過默認網關發往路由器A,從而實現主機與外部網絡的通信
該組網缺點:當路由器A壞掉時,本網段內通過以RA為默認網關下一跳的主機將斷掉與外界的通信,產生單點故障
----------------------------------------------------------------------------------------------------------------------------
VRRP組網 e.g:
RA:Master 活動路由器 10.100.10.2
RB:Backup 備份路由器 10.100.10.3
VRIP : 虛擬路由器IP 10.100.10.1
VRRP將局域網中的一組路由器【 RA和RB】組成一個虛擬路由器------>>>備份組
虛擬路由器擁有自己的IP地址 10.100.10.1
局域網內的主機僅知道虛擬路由器IP地址為10.100.10.1,不知道具體的Master與Backup路由器IP
局域網內的主機將默認網關下一跳的地址設置為該虛擬路由器IP地址,通過該地址與其他網絡進行通信
該組網優點:當備份組內的Master路由器DOWN掉,會進行選舉策略選出一個新的Master路由器,繼續往網絡內的主機提供路由服務
從而實現網絡內的主機不間斷地與外部網絡進行通信
<<<----------------------------------------------------------------------------------------------------------------------------------
? VRRP 協議
>>>------------------------------------------------------------------------------------------------------------------------------
VRRP:解決局域網中配置靜態網關出現單點失效的路由協議
設計目標:網絡發生故障時透明地進行設備切換而不影響主機間的數據通信
<<<----------------------------------------------------------------------------------------------------------------------------------
? VRRP 工作原理
>>>------------------------------------------------------------------------------------------------------------------------
VRRP協議將兩臺或多臺路由器設備虛擬成一個虛擬路由器,對外提供虛擬路由器IP(一個或多個);
而在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER, 或者是通過算法選舉產生;
MASTER實現針對虛擬路由器IP的各種網絡功能,如ARP請求,ICMP,以及數據的轉發等;
其他設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。
當主機失效時,BACKUP將接管原先MASTER的網絡功能。
? 如何判定多個路由器在同一組虛擬路由器中?
VRID:每個虛擬路由器都有一個唯一標識(VRID是一個0~255的正整數)
配置VRRP協議時需要配置每個路由器的虛擬路由器ID(VRID)和優先權值,
使用VRID將路由器進行分組,具有相同VRID值的路由器為同一個組
? BACKUP 為什么沒有發生搶占?
VRRP通告:它使用IP多播數據包進行封裝,組地址為224.0.0.18,發布范圍只限于同一局域網內
在一個虛擬路由器中,只有處于MASTER角色的路由器會一直發送VRRP通告信息;
處于BACKUP狀態的路由器只接收MASTER發過來的報文信息,用來監控MASTER運行狀態, 除非它的優先級比MASTER更高
? 什么時候發生選舉?
當MASTER不可用時,BACKUP無法收到MASTER發過來的報文信息;
認定MASTER出現故障,然后多臺BACKUP就開始進行選舉;
? Master選舉
虛擬路由器IP=路由器本身配置IP
該路由器始終將是MASTER;IP地址所有者自動具有最高優先級:255
優先級選舉主控路由器(優先級范圍是0—255)
優先級0一般用在IP地址所有者主動放棄主控者角色時使用。可配置的優先級范圍為1—254
優先級相等,則比較路由器的實際IP,IP值較大的優先權高
<<<-----------------------------------------------------------------------------------------------------
? VRRP 應用實例
>>>------------------------------------------------------------------------------------------------------------------------
+-----------+ +-----------+ | Rtr1 | | Rtr2 | |(MR VRID=1)| |(BR VRID=1)| |(BR VRID=2)| |(MR VRID=2)| VRID=1 +-----------+ +-----------+ VRID=2 IP A ---------->* *<---------- IP B | | | | ------------------+------------+-----+--------+--------+--------+-- ^ ^ ^ ^ | | | | (IP A) (IP A) (IP B) (IP B) | | | | +--+--+ +--+--+ +--+--+ +--+--+ | H1 | | H2 | | H3 | | H4 | +-----+ +-----+ +--+--+ +--+--+ Legend: ---+---+---+-- = Ethernet, Token Ring, or FDDI H = Host computer MR = Master Router BR = Backup Router * = IP Address (IP) = default router for hosts
-------------------------------------------------------------------------------------------------------------
+ VRID 1 | Rtr1(Master) | Rtr2(Backup) + 正常情況下 H1與H2走R1;反之 走R2
-------------------------------------------------------------------------------------------------------------
+ VRID 2 | Rtr1(Backup) | Rtr2 (Master) + 正常情況下 H3與H4走R2;反之 走R1
------------------------------------------------------------------------------------------------------------
<<<------------------------------------------------------------------------------------------------------------------------
Keepalived 工作原理
>>>------------------------------------------------------------------------------------------------------------------------
根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制如下:
網絡層
協議: IP(Internet Protocol網際協議)
ARP(Address Resolution Protoco 地址轉換協議)
RARP(Reverse Address Resolution Protocol 反向地址轉換協議 )
ICMP(Internet Control Message Protocol 網絡控制報文協議)
常用:通過ICMP協議向服務器集群中的每個節點發送一個ICMP的數據包(類似ping實現)
如果某個節點沒有返回響應數據包,那么認為此節點發生了故障
keepalived將報告該節點失效,并從服務器集群中剔除故障節點
傳輸層
協議: TCP (傳輸控制協議)(三次握手、安全可靠)
UDP (用戶數據協議)
------------------------------------------------------------------------------------
TCP提供可靠的數據傳輸服務、IP地址和端口,代表TCP的一個連接端
獲取TCP服務,需要在發送機的一個端口上和接收機上一個端口上建立連接
-------------------------------------------------------------------------------------
常用:利用TCP協議的端口連接和掃描技術來判斷集群節點是否正常
e.g: SSH服務默認22端口,WEB服務器80端口····Keepalived在傳輸層探測某端口沒有響應數據
判定端口異常,強制將此端口對應的節點從服務器及群組中移除
應用層
協議:FTP、TELNET、SMTP、DNS ····
-----------------------------------------------------------------------
用戶可以通過自定義Keepalived的工作方式
-----------------------------------------------------------------------
e.g:用戶編輯程序運行Keepalived,而Keepalived 根據用戶設定檢測各種程序或服務是否允許正常
? keepalived 結構體系
圖片來源:http://www.keepalived.org/documentation.html
<<<------------------------------------------------------------------------------------------------------------------------
keepalived 安裝
>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
實驗需求:
安裝keepalived(僅安裝)
實驗實現:
服務器:CentOS 6.5-minimal
軟 件:Keepalived ( V_1.2.19 )
安裝過程:
>>>下載安裝包并解壓,查看相關參數
[root@lucia tmp]# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz # 下載Keepalived安裝包 [root@lucia tmp]# tar -zxf keepalived-1.2.19.tar.gz #解壓安裝包 [root@lucia tmp]# cd keepalived-1.2.19 [root@lucia keepalived-1.2.19]# ./configure --help #查看confiure編譯參數 #================================================ # 指定安裝在/etc/ {--sysconfdir=/etc} # 指定使用內核源碼中的頭文件 {--with-kernel-dir} # 注:使用LVS時,需要用到"--with-kernel-dir" #===============================================
>>>編譯安裝
[root@lucia keepalived-1.2.19]# [ -z /usr/src/kernels/ ] && yum -y install kernel-headers kernel-devel || echo "The kernel file already exists" The kernel file already exists #=========================== # 判斷kernels目錄是否存在文件 #=========================== [root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64 #============================================================================ # ./configure 對即將安裝的軟件進行配置,檢查當前的環境是否滿足要安裝軟件的依賴關系 #============================================================================ configure: error: in `/tmp/keepalived-1.2.19': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details #============================================================================ # 報錯:gcc編譯器沒有安裝 # [root@lucia keepalived-1.2.19]# yum -y install gcc #============================================================================= 繼續返回上一步預安裝./configure [root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64 configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!! #========================================================================= # 報錯:OpenSSL 沒有安裝 # [root@lucia keepalived-1.2.19]# yum -y install openssl* #========================================================================= ./configure 成功后,顯示是Keepalived 輸出的加載模塊信息 Keepalived configuration ------------------------ Keepalived version : 1.2.19 Compiler : gcc Compiler flags : -g -O2 Extra Lib : -lssl -lcrypto -lcrypt Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : No fwmark socket support : Yes Use VRRP Framework : Yes Use VRRP VMAC : Yes SNMP support : No SHA1 support : No Use Debug flags : No [root@lucia keepalived-1.2.19]# make && make install #編譯&&安裝 [root@lucia keepalived-1.2.19]# ln -s /usr/local/sbin/keepalived /sbin/ #軟鏈接到系統使用的管理程序目錄中 [root@lucia keepalived-1.2.19]# chkconfig --add keepalived #添加到系統服務 [root@lucia keepalived-1.2.19]# chkconfig --level 35 keepalived on #添加到開機啟動
? Keepalived 配置詳解
[root@lucia keepalived-1.2.19]# cd /etc/keepalived/ [root@lucia keepalived-1.2.19]# ls keepalived.conf samples # ================================================================ # Keepalived 配置文件路徑為/etc/keepalived/keepalived.conf # samples 目錄下存放著keepalived配置的示例 # ================================================================
#============================================================ # keepalived.conf 配置 #------------------------------------------------------------ # 1、Keepalived 配置文件以block形式組織,每個塊內容都包含在{} # 2、“#” “!” 開頭行為注釋 # 3、keepalived 配置為三類: # 全局配置:對整個keepalived都生效的配置 # VRRPD 配置:核心配置,主要實現keepalived高可用功能 # LVS配置 #============================================================ ! Configuration File for keepalived ######################## # 全局配置 ######################## global_defs { # global_defs 全局配置標識 ------------------------------------------ notification_email { # notification_email用于設置報警郵件地址 acassen@firewall.loc # 可以設置多個,每行一個 failover@firewall.loc # 設置郵件報警,需開啟本機Sendmail 服務 sysadmin@firewall.loc # yum -y install mailx sendmail } ---------------------------------------------- notification_email_from Alexandre.Cassen@firewall.loc # 設置郵件發送地址 smtp_server 192.168.200.1 # 設置郵件的smtp server地址 smtp_connect_timeout 30 # 設置連接smtp sever超時時間 router_id LVS_DEVEL # 表示運行keepalived服務器標識,發郵件時顯示在郵件主題中的信息 } ###################### # VRRPD配置 ###################### vrrp_instance VI_1 { # VRRPD 配置標識 VI_1是實例名稱 state MASTER # 指定Keepalvied角色 MASTER表示此主機為主服務器 BACKUP則是表示為備用服務器 interface eth0 # 指定 HA 監測網絡的接口 virtual_router_id 51 # 虛擬路由標識,標識為數字,同一個VRRP實例使用唯一的標識,即可表示在同一個vrrp_instance下 MASTER_ID = BACKUP_ID priority 100 # 定義節點優先級,數字越大表示節點的優先級越高,同一個VRRP_instance下,MASTE_PRIORITY > BACKUP_PRIORITY advert_int 1 # 設定MASTER與BACKUP主機質檢同步檢查的時間間隔,單位為秒 authentication { # 設定節點間通信驗證類型和密碼,驗證類型主要有PASS和AH兩種 auth_type PASS # 同一個vrrp_instance,MASTER驗證密碼和BACKUP保持一致 auth_pass 1111 } virtual_ipaddress { # 設置虛擬IP地址 (VIP),又叫做漂移IP地址 192.168.200.16 192.168.200.17 192.168.200.18 } #------------------------------------------------------------------------------- # 問:為什么叫漂移IP地址? # 答:當Keepalived切換到MASTER狀態時,IP地址會自動添加到系統中 # 當Keepalvied切換到BACKUP狀態時,IP地址將自動從系統中刪除 # # keepalived通過“ip address add”命令的形式將VIP添加到系統 # 通過“ip add”查看系統中添加的VIP地址 #-------------------------------------------------------------------------------- } ###################### # LVS配置 ###################### virtual_server 192.168.200.100 443 { # virtual_server LVS配置標識 # 格式:virtual_server VIP port [IP 和 port 之間空格隔開] delay_loop 6 # 設置健康檢查時間間隔,單位為秒 lb_algo rr # 設置負載調度算法,可用的調度算法有:rr、wlc、lc、lblc、sh、dh等 lb_kind NAT # 設置LVS實現負載均衡的機制,有NAT、TUN和DR三種模式可選 nat_mask 255.255.255.0 # NAT子網掩碼 persistence_timeout 50 # 會話保持時間 protocol TCP # 指定轉發協議類型 #---------------------------------------------------------------------------------------------------- # persistence_timeout 會話保持時間對動態網頁非常有用,為集群系統中的seesion共享提供了一個很好的解決方案 # 用戶的請求會一直分發到某個服務節點,直至超過這個會話的保持時間(指最大無響應超時時間) # =[用戶操作動態頁面如果在50s沒有執行任何操作則被分發到另外的節點] #---------------------------------------------------------------------------------------------------- real_server 192.168.201.100 443 { # 設置real server段開始的標識 [ IP為真實IP地址] # 格式:real_server realIP port [IP 和 port 之間空格隔開] ----------------------------------------------------------------- weight 1 # 用于配置real server節點的權值,權值大小用數字表示,數字越大,權值越高 # 設置權值大小可以為不同性能的服務器分配不同的負載 ------------------------------------------------------------------ SSL_GET { # 健康檢查 SSL_GET url { # 指定SSL檢查的URL信息,可以指定多個 path /index.html # 后跟詳細的URL路徑 digest ff20ad2481f97b1754ef3e12ecd3a9cc # SSL檢查后的摘要信息,可以通過genhash命令工具獲取 #----------------------------------------------------------------- # [root@lucia keepalived]# genhash -s 192.168.201.100 -p 80 -u /index.html #----------------------------------------------------------------- } url { path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 # 表示無響應超時時間,單位為秒 nb_get_retry 3 # 表示重試次數 delay_before_retry 3 # 表示充實間隔 } } } virtual_server 10.10.10.2 1358 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP sorry_server 192.168.200.200 1358 # 備份節點,在所有real serer失效后,啟用備份節點 }
#---------------------------------------------------------------------------------------------------------------#
VRRP原理參考文檔如下:
http://bbs.nanjimao.com/thread-790-1-1.html (此篇寫的很好)
http://blog.chinaunix.net/uid-26575352-id-3529109.html
keepalived.conf 參考書籍 《高性能Linux服務器構建實戰》
本人高度近視,文檔手打會出現個別字符錯誤,請指出
關于VRRP原理 部分為自己理解所拼湊,邏輯出現問題請指出
Lucia 2016/01
#----------------------------------------------------------------------------------------------------------------#