高性能集群软件keepalived
背景
網絡的飛速發展,給網絡帶寬和服務器性能帶來了巨大的挑戰,基于互聯網的應用系統越來越多地瓶頸出現在服務器端,這就對服務器提出了更高的要求,來保證服務的持續性。
集群簡介
定義:集群是一組協同工作的服務集合。在外界看來,集群就是一個獨立的服務實體,但實際上,在集群的內部,有兩個或兩個以上的服務器實體在協調、配合完成一系列復雜的工作。
組成:集群一般由兩個或兩個以上的服務器組建而成。每個服務器稱為一個集群節點。同時,還需要有串口線、集群軟件、共享存儲設備(例如磁盤陣列)等。
集群節點通信方式:一種是基于RS232線的心跳監控,另一種是用一塊單獨的網卡跑心跳。
作用:集群主要用來提供比單一服務更穩定、更高效、更具擴展性的服務平臺。當一個節點出現故障時,集群的另一個節點可以自動接管故障節點的資源,從而保證服務持久、不間斷地運行。
特點:集群具有節點間服務狀態監控功能,同時必須具有服務實體的擴展功能,可以靈活地增加和剔除某個服務實體。
集群的特點和功能
-
高可用性:必須保證服務24小時不間斷運行。集群最大的優點之一就是具有高可用性,在服務器出現故障時,集群可以自動將服務從故障節點切換到另一個備用節點
-
可擴展性:當集群服務實體不能滿足需求時,可以向集群中動態地加入一個或多個服務節點,增強集群的整體性能
-
負載均衡:集群系統可以靈活、有效地分擔系統負載,通過集群自身定義的負載分擔策略,將客戶端的訪問分配到各個服務節點。常見策略:輪詢、權重分配等
-
錯誤恢復:當一個任務在一個節點上還沒有完成時,由于某種原因,執行失敗,此時另一個服務節點應該能接著完成此任務。通過錯誤重定向的方式,保證每個執行任務都能有效地完成。
-
心跳監測:心跳監測技術可以實現負載均衡、提供高可用服務和執行錯誤恢復,心跳線的數量應該為集群節點數減1。如果通過網卡來做心跳,每個節點需要兩塊網卡,其中一塊通過私網直接連接到對方機器相應的網卡,用來監測對方心跳。心跳監控的效率直接影響故障切換時間的長短。
-
漂移IP地址(一般稱為VIP):在集群系統中,為了保證服務的不間斷性,對外提供服務的IP地址一定是這個漂移的IP地址,這樣才能在雙機熱備架構中,實現主節點宕機,備節點繼續提供服務的效果。
集群的分類
-
高可用集群
High Availability Cluster,HA集群,高可用指的是最大限度地可以使用。用于保障用戶的應用程序持久、不間斷提供服務。
常見的HA集群:雙機熱備、雙機互備、多機互備等,一般由兩個或兩個以上的節點組成。
高可用集群軟件:HeartBeat HA、Red Hat提供的RHCS、商業軟件ROSE、Keepalived等
-
負載均衡集群
Load Balance Cluster ,LB集群,分為前端負載調度和后端節點服務,負載調度負責把客戶端的請求按照不同的策略分配給后端服務節點,后端服務節點是真正提供應用程序服務的
與HA不同的是,在LB集群中,所有后端節點都處于活動狀態(Active),它們都對外提供服務,分攤系統工作負載。適用于業務繁忙、大負荷訪問的應用系統。
缺點:當一個節點出現故障時,前端調度系統并不知道此節點已經不能提供服務,仍然會把客戶端的請求調度到故障節點上來,這樣就會訪問失敗。解決辦法:負載調度系統一般都引入了節點監控系統,用于監控后端服務節點,當某個節點出現故障后,節點監控系統會自動將故障節點從集群中剔除;當此節點恢復正常后,節點監控系統又會自動將其加入集群中。
負載均衡軟件:軟件包括開源LVS集群、Oracle的RAC集群等,硬件為F5 Networks等
-
分布式計算集群
Distributed Computing Cluster,DC集群。提供單個計算機所不能提供的強大的計算分析能力,包括數值計算和數據處理,并且傾向于追蹤綜合性能。
開源分布式計算平臺:Hadoop、Spark,用于開發和處理海量數據。在這個平臺上,分布式任務是并行運行的,因此處理速度非常快。
Hadoop工作原理:Hadoop可將大數據直接存儲到HDFS這個分布式文件系統上,Hadoop的MapReduce功能實現了將單個任務打碎,并將碎片任務發送到多個節點上,之后再以單個數據集的形式加載到數據倉庫里。
Keepalived簡介
Keepalived是Linux下一個輕量級的高可用解決方案。主要通過虛擬路由冗余來實現高可用功能。根據第3~5層的交換機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或者工作出現故障,Keepalived將檢測到,并將出現故障的服務節點從集群系統中剔除;而在故障節點恢復正常后,Keepalived又可以自動將此服務節點重新加入到服務器集群中,這些工作全部自動完成。后來,Keepalived又加入了VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議),目的是為了解決靜態路由出現的單點故障問題,通過VRPP可以實現網絡不間斷地、穩定地運行。
VRRP與工作原理
VRRP是一種主備協議,通過VRRP可以在網絡發生故障時透明地進行設備切換而不影響主機間的數據通信,這涉及到兩個概念:物理路由器和虛擬路由器。
VRRP可以將兩臺或多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務。在虛擬路由器內部,多個物理路由器協同工作,同一時間只有一臺物理路由器對外提供服務。每個虛擬路由器都有一個唯一標識,稱為VRID,一個VRID與一組IP地址構成了一個虛擬路由器。
對外提供服務的物理服務器稱為MASTER,一般情況下通過選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如ARP請求、ICMP、數據轉發等。其他物理服務器僅僅接收MASTER的VRRP狀態通告信息,這些路由器統稱為BACKUP。當主路由器失效時,處于BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色,繼續對外提供服務。
Keepalived工作原理
Keepalived工作在TCP/IP參考模型的第三層、第四層和第五層,也就是網絡層、傳輸層和應用層。根據各層所能實現的功能,Keepalived運行機制如下:
-
網絡層的4個重要協議:互聯網協議(IP)、互聯網控制報文協議(ICMP)、地址轉換協議(ARP)以及反向地址轉換協議(RARP)。Keepalived主要通過ICMP向服務器集群中的每個節點發送一個ICMP數據包,如果某個節點沒有返回響應數據包,則認為此節點發生了故障,Keepalived將報告此節點失效,并從服務器集群中剔除故障節點。
-
傳輸層的2個重要協議:傳輸控制協議(TCP)、用戶數據協議(UDP)。TCP可以提供可靠的數據傳輸服務,要獲得TCP服務,需要在發送機的一個端口上和接收機的一個端口上建立連接,Keepalived在傳輸層就是利用TCP的端口連接和掃描技術來判斷集群節點是否正常,如果發現TCP端口沒有響應數據返回,就認為這些端口發生異常,然后強制將此端口對應的節點從服務器集群組中移除。
-
應用層協議:FTP、TELNET、SMTP、DNS等各種不同類型的高層協議,用戶可以自定義Keepalived工作方式,例如通過編寫程序來運行Keepalived,而Keepalived將根據用戶的設定監測各種程序或服務是否運行正常,如果Keepalived的監測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除。
Keepalived體系結構
Keepalived是一個高度模塊化的軟件,結構簡單,但是擴展性很強。Keepalived的體系結構從整體上分為兩層,分別是用戶空間(User Space)層和內核空間(Kernel Space)層。
內核空間層,包括IPVS和NETLINK兩個模塊,IPVS是Keepalived引入的第三方模塊,通過IPVS可以實現基于IP的負載均衡集群。IPVS默認包含在LVS集群軟件中。在keepalived中,IPVS模塊是可配置的,如果需要負載均衡功能,可以在編譯Keepalived時打開負載均衡功能,反之,也可以通過配置編譯參數關閉。NETLINK模塊主要用于實現高級路由框架和一些相關的網絡功能,完成用戶空間層Netlink Reflector模塊發來的各種網絡請求。
用戶空間層,包括Core components(核心組件)、Control Plane(控制面板:對配置文件進行編譯和解析)、Memory Management(Mngt)(內存管理機制:訪問內存的方法)、Scheduler I/O Multiplexer(IO復用調度:處理內部的任務請求)
?
核心組件中各個模塊的功能如下:
-
WatchDog:用來監控Checkers和VRRP進程。
-
Checkers:對服務器運行狀態監測和故障隔離
-
VRRP Stack:實現HA集群中的故障切換功能
-
IPVS wrapper:將設置好的IPVS規則發送到內核空間并提交給IPVS模塊
-
Netlink Reflector:實現HA集群中故障轉移時虛擬IP(VIP)的設置和切換
Keepalived的安裝
官方下載地址:Keepalived for Linux
# 安裝依賴 # yum install -y libnl libnl-devel 用于支持IPv6 # yum install -y openssl-devel ? wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz tar zxf keepalived-2.2.4.tar.gz ./configure --sysconf=/etc make make install默認配置文件位置:/usr/local/etc/keepalived/keepalived.conf
默認可執行文件位置:/usr/local/sbin/keepalived
Keepalived的配置
Keepalived配置分為三類,分別是:全局配置(Global Configuration)、VRRPD配置和LVS配置。Keepalived的配置文件都是以塊(block)的形式組織的,每個塊的內容都包含在{}中,以“#”和“!”開頭的行都是注釋。
一、全局配置
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0 }-
以global_defs為標識
-
notification_email:設置報警郵件地址,每行一個。如果開啟郵件報警,需要開啟本機的Sendmail服務
-
notification_email_from:郵件發送地址
-
smtp_server:郵件的SMTP服務器
-
smtp_connect_timeout:連接SMTP服務器的超時時間
-
router_id:運行Keepalived服務器的一個標識,是發送郵件時顯示在郵件主題中的信息
二、VRRPD配置
VRRP同步組配置:實現把多個實例放在一個組中管理。
vrrp_sync_group G1 {group {VI_1VI_2VI_5}notify_backup "/usr/local/bin/vrrp.back arg1 arg2"notify_master "/usr/local/bin/vrrp.mast arg1 arg2"notify_fault "/usr/local/bin/vrrp.fault arg1 arg2" } vrrp_sync_group G2 {group {VI_3VI_4} }-
vrrp_sync_group是組標識,后面跟組名
-
notify_master:進入Master狀態時要執行的腳本,可以是一個狀態報警腳本,也可以是一個服務管理腳本,允許腳本傳入參數
-
notify_backup:進入Backup狀態時要執行的腳本,可以是一個狀態報警腳本,也可以是一個服務管理腳本,允許腳本傳入參數
-
notify_fault:進入Fault狀態時要執行的腳本,可以是一個狀態報警腳本,也可以是一個服務管理腳本,允許腳本傳入參數
-
notify_stop:當Keepalived程序終止時,需要執行的腳本
VRRP實例配置:配置節點角色(主或從)、實例綁定的網絡接口、節點間驗證機制、集群服務IP等
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1mcast_src_ip <IPADDR>garp_master_delay 10track_interface {eth0eth1}authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {# <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.16192.168.200.17 dev eth1192.168.200.18 dev eth2}virtual_routers {# src <IPADDR> [to] <IPADDR>/<MASK> via | gw <IPADDR> dev <STRING> scope <SCOPE>src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1192.168.110.0/24 via 192.168.200.254 dev eth1192.168.111.0/24 dev eth2192.168.112.0/24 via 192.168.100.254192.168.113.0/24 via 192.168.100.252 or 192.168.100.253}nopreemptpreemtp_delay 300 }-
vrrp_instance是VRRP實例開始的標識,后面是實例名
-
state:MASTER 表示主服務器,BACKUP表示備用服務器
-
interface:指定HA監測網絡的接口
-
virtual_router_id:虛擬路由標識,同一個vrpp實例使用唯一的標識,在同一個vrrp_instance下,MASTER和BACKUP必須是一致的
-
priority:定義節點優先級,數字越大優先級越高,在同一個vrrp_instance下,MASTER優先級必須大于BACKUP的優先級
-
advert_int:設定MASTER和BACKUP主機之間同步檢查的時間間隔,單位是秒
-
mcast_src_ip:設置發送多播包的地址,不設置的話,默認使用綁定的網卡所對應的IP地址
-
garp_master_delay:在切換到MASTER狀態后,延時進行Gratuitous arp請求的時間
-
track_interface:用于設置一些額外的網絡監控接口,其中任何一個網絡接口出現故障,Keepalived都會進入FAULT狀態
-
authentication:用于設定節點間通信驗證類型和密碼,驗證類型主要有:PASS 和 AH 兩種,在一個vrrp_instance 下,MASTER和BACKUP必須使用相同的密碼才能正常通信
-
virtual_ipaddress:設定虛擬IP地址(VIP),可以設置多個,每行一個。Keepalived通過“ip address add”命令的形式將VIP添加到系統中,通過“ip add”可查看系統中的VIP地址
-
virtual_routers:同virtual_ipaddress,使用“ip route”可以查看路由信息是否添加成功。
-
nopreempt:設置高可用集群中不搶占功能,為了避免頻繁切換,一般需要做此設置。在使用此功能時,只能在state狀態為“BACKUP”的節點上設置,而且這個節點的優先級必須高于其他節點
-
preemtp_delay:設置搶占的延時時間,單位是秒。有時系統啟動或重啟之后,網絡需要經過一段時間才能正常工作,在這種情況下沒必要進行主備切換
三、LVS配置
virtual_server 10.10.10.3 1358 {delay_loop 3lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPha_suspendvirtualhost <STRING>sorry_server 192.168.200.200 1358 ?real_server 192.168.200.4 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl3/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}connect_timeout 3retry 3delay_before_retry 3}} ?real_server 192.168.200.5 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl3/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}connect_timeout 3retry 3delay_before_retry 3}} }-
virtual_server是LVS的配置標識,后面跟虛擬IP地址和服務端口,IP與端口之間用空格隔開
-
delay_loop:設置健康檢查的時間間隔,單位是秒
-
lb_algo:設置調度算法,可選配置項:rr、wrr、lc、wlc、lblc、sh、dh等,常用為:rr和wlc
-
lb_kind:設置LVS實現負載均衡的機制,可選配置項:NAT、TUN、DR
-
persistence_timeout:會話保持時間,單位是秒,此參數標識最大無響應超時時間,如果用戶在操作動態頁面時,在50秒內沒有執行任何操作,后面的操作會被分發到另外的節點,但是用戶一直在操作動態頁面不受50秒的時間限制
-
protocol:轉發協議類型,有TCP和UDP兩種可選
-
ha_suspend:節點從MASTER到BACKUP切換時,暫不啟用real server節點的健康檢查
-
virtualhost:通過HTTP_GET/SSL_GET做健康檢查時,指定的Web服務器的虛擬主機地址
-
sorry_server:相當于備節點,在所有real_server失效后,這個備節點才啟用
-
real_server:是真實服務器段的開始標識,用來指定real server節點,用IP地址端口配置,中間用空格隔開
-
weight:設置real server權重值大小,數字越大,權重值越高
-
inhibit_on_failure:在檢測到real server節點失效后,把weight值設置為0,而不是從IPVS中刪除
-
notify_up:后面跟一個腳本,在檢測到real server節點服務處于UP狀態后執行的腳本
-
notify_down:后面跟一個腳本,在檢測到real server節點服務處于DOWN狀態后執行的腳本
Keepalived的健康檢查
健康檢測段允許多種檢查方式,常見的有HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。
TCP_CHECK檢測配置
TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3 }-
connect_port:健康檢查端口,如不指定,默認是real_server指定的端口
-
connect_timeout:表示無響應超時時間,單位是秒
-
nb_get_retry:表示重試次數
-
delay_before_retry:表示重試間隔時間,單位是秒
HTTP_GET | SSL_GET檢測配置
HTTP_GET | SSL_GET {url {path /index.htmldigest <STRING>status_code 200}connect_port 80bindto 192.168.12.80connect_timeout 3nb_get_retry 3delay_before_retry 2 }-
url:用來指定HTTP/SSL檢查的URL信息,可以指定多個URL
-
path:跟詳細的URL路徑
-
digest:SSL檢查的摘要信息,可通過genhash命令工具獲取,用法:genhash -s server-address -p port -u url
-
status_code:指定HTTP檢查返回正常狀態碼的類型,一般是200
-
bindto:表示通過此地址來發送請求對服務器進行健康檢查
MISC_CHECK檢測配置
MISC_CHECK {misc_path /usr/local/bin/script.shmisc_timeout 5!misc_dynamic }MISC健康檢查可以通過執行一個外部程序來判斷real server節點的服務狀態,使用非常靈活。
-
misc_path:指定外部程序或者腳本
-
misc_timeout:設定執行腳本的超時時間
-
misc_dynamic:是否啟用動態調整real server節點權重
注意事項:Keepalived在啟動時并不檢測配置文件的正確性,即使沒有配置文件,Keepalived也照樣能夠啟動,所以一定要保障配置文件正確。
總結
以上是生活随笔為你收集整理的高性能集群软件keepalived的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将 Kali v.2020_2 x64
- 下一篇: matlab自动排课,matlab数学建