一种玛、HA Cluster實現(xiàn)方案:
1、vrrp協(xié)議的實現(xiàn)
VRRP(Virtual Router Redundancy Protocol致燥,虛擬路由冗余協(xié)議)是一種容錯協(xié)議登疗。通常,一個網(wǎng)絡(luò)內(nèi)的所有主機都設(shè)置一條缺省路由,這樣辐益,主機發(fā)出的目的地址不在本網(wǎng)段的報文將被通過缺省路由發(fā)往路由器RouterA断傲,從而實現(xiàn)了主機與外部網(wǎng)絡(luò)的通信。當(dāng)路由器RouterA 壞掉時智政,本網(wǎng)段內(nèi)所有以RouterA 為缺省路由下一跳的主機將斷掉與外部的通信產(chǎn)生單點故障认罩。VRRP 就是為解決上述問題而提出的,它為具有多播組播或廣播能力的局域網(wǎng)(如:以太網(wǎng))設(shè)計续捂。
2垦垂、實現(xiàn)軟件有keepalived、ais(完備HA集群方案)牙瓢、RHCS(cman)乔外、heartbeat和corosync。
二一罩、工作原理
VRRP的工作過程如下:
路由器開啟VRRP功能后杨幼,會根據(jù)優(yōu)先級確定自己在備份組中的角色。優(yōu)先級高的路由器成為主用路由器聂渊,優(yōu)先級低的成為備用路由器差购。主用路由器定期發(fā)送VRRP通告報文,通知備份組內(nèi)的其他路由器自己工作正常汉嗽;備用路由器則啟動定時器等待通告報文的到來欲逃。
-
VRRP在不同的主用搶占方式下,主用角色的替換方式不同:
在搶占方式下饼暑,當(dāng)主用路由器收到VRRP通告報文后稳析,會將自己的優(yōu)先級與通告報文中的優(yōu)先級進(jìn)行比較。如果大于通告報文中的優(yōu)先級弓叛,則成為主用路由器彰居;否則將保持備用狀態(tài)。
在非搶占方式下撰筷,只要主用路由器沒有出現(xiàn)故障陈惰,備份組中的路由器始終保持主用或備用狀態(tài),備份組中的路由器即使隨后被配置了更高的優(yōu)先級也不會成為主用路由器毕籽。
如果備用路由器的定時器超時后仍未收到主用路由器發(fā)送來的VRRP通告報文抬闯,則認(rèn)為主用路由器已經(jīng)無法正常工作,此時備用路由器會認(rèn)為自己是主用路由器关筒,并對外發(fā)送VRRP通告報文溶握。備份組內(nèi)的路由器根據(jù)優(yōu)先級選舉出主用路由器,承擔(dān)報文的轉(zhuǎn)發(fā)功能蒸播。
在實際組網(wǎng)中一般會進(jìn)行VRRP負(fù)載分擔(dān)方式的設(shè)置睡榆。負(fù)載分擔(dān)方式是指多臺路由器同時承擔(dān)業(yè)務(wù),避免設(shè)備閑置,因此需要建立兩個或更多的備份組實現(xiàn)負(fù)載分擔(dān)肉微。
VRRP負(fù)載分擔(dān)方式具有以下特點:
每個備份組都包括一個主用路由器和若干個備用路由器匾鸥。
各備份組的主用路由器可以不相同。
同一臺路由器可以加入多個備份組碉纳,在不同備份組中有不同的優(yōu)先級勿负,使得該路由器可以在一個備份組中作為主用路由器,在其他的備份組中作為備用路由器劳曹。
VRRP在提高可靠性的同時奴愉,簡化了主機的配置。在具有多播或廣播能力的局域網(wǎng)中铁孵,借助VRRP能在某臺路由器出現(xiàn)故障時仍然提供高可靠的缺省鏈路锭硼,有效避免單一鏈路發(fā)生故障后網(wǎng)絡(luò)中斷的問題,而無需修改動態(tài)路由協(xié)議蜕劝、路由發(fā)現(xiàn)協(xié)議等配置信息檀头。
一個VRRP路由器有唯一的標(biāo)識:VRID,范圍為0—255?該路由器對外表現(xiàn)為唯一的虛擬MAC地址岖沛,地址的格式為00-00-5E-00-01-***?主控路由器負(fù)責(zé)對ARP請求用該MAC地址做應(yīng)答?這樣,無論如何切換暑始,保證給終端設(shè)備的是唯一一致的IP和MAC地址,減少了切換對終端設(shè)備的影響?
VRRP控制報文只有一種:VRRP通告(advertisement)?它使用IP多播數(shù)據(jù)包進(jìn)行封裝婴削,組地址為224.0.0.18廊镜,發(fā)布范圍只限于同一局域網(wǎng)內(nèi)?這保證了VRID在不同網(wǎng)絡(luò)中可以重復(fù)使用?為了減少網(wǎng)絡(luò)帶寬消耗只有主控路由器才可以周期性的發(fā)送VRRP通告報文?備份路由器在連續(xù)三個通告間隔內(nèi)收不到VRRP或收到優(yōu)先級為0的通告后啟動新的一輪VRRP選舉?
在VRRP路由器組中,按優(yōu)先級選舉主控路由器唉俗,VRRP協(xié)議中優(yōu)先級范圍是0—255?若VRRP路由器的IP地址和虛擬路由器的接口IP地址相同嗤朴,則該VRRP路由器被稱為該IP地址的所有者;IP地址所有者自動具有最高優(yōu)先級:255?優(yōu)先級0一般用在IP地址所有者主動放棄主控者角色時使用?可配置的優(yōu)先級范圍為1—254?優(yōu)先級的配置原則可以依據(jù)鏈路的速度和成本?路由器性能和可靠性以及其它管理策略設(shè)定?主控路由器的選舉中虫溜,高優(yōu)先級的虛擬路由器獲勝雹姊,因此,如果在VRRP組中有IP地址所有者吼渡,則它總是作為主控路由的角色出現(xiàn)?對于相同優(yōu)先級的候選路由器容为,按照IP地址大小順序選舉?VRRP還提供了優(yōu)先級搶占策略乓序,如果配置了該策略寺酪,高優(yōu)先級的備份路由器便會剝奪當(dāng)前低優(yōu)先級的主控路由器而成為新的主控路由器?
為了保證VRRP協(xié)議的安全性,提供了兩種安全認(rèn)證措施:明文認(rèn)證和IP頭認(rèn)證?明文認(rèn)證方式要求:在加入一個VRRP路由器組時替劈,必須同時提供相同的VRID和明文密碼?適合于避免在局域網(wǎng)內(nèi)的配置錯誤寄雀,但不能防止通過網(wǎng)絡(luò)監(jiān)聽方式獲得密碼?IP頭認(rèn)證的方式提供了更高的安全性,能夠防止報文重放和修改等攻擊?
三陨献、keepalived軟件
1盒犹、術(shù)語:
虛擬路由器:Virtual Router
虛擬路由器標(biāo)識:VRID(0-255)
物理路由器:
master:主設(shè)備
backup:備用設(shè)備
priority:優(yōu)先級
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
GraciousARP
安全工作:認(rèn)證、無認(rèn)證、簡單字符認(rèn)證和MD5
工作模式有:
主/備:單虛擬路徑器急膀;
主/主:主/備(虛擬路徑器1)沮协,備/主(虛擬路徑器2)
2、Keepalived功能:
- vrrp協(xié)議的軟件實現(xiàn)卓嫂,原生設(shè)計的目的為了高可用ipvs服務(wù):
- 基于vrrp協(xié)議完成地址流動慷暂;
- 為vip地址所在的節(jié)點生成ipvs規(guī)則(在配置文件中預(yù)先定義);
- 為ipvs集群的各RS做健康狀態(tài)檢測晨雳;
- 基于腳本調(diào)用接口通過執(zhí)行腳本完成腳本中定義的功能行瑞,進(jìn)而影響集群事務(wù);
3餐禁、組件:
- 核心組件:vrrp stack血久、ipvs wrapper、checkers
- 控制組件:配置文件分析器帮非、IO復(fù)用器氧吐、內(nèi)存管理組件
4、HA Cluster的配置前提:
(1) 各節(jié)點時間必須同步末盔,使用ntp, chrony等工具同步副砍。
(2) 確保iptables及selinux不會成為阻礙;
(3) 各節(jié)點之間可通過主機名互相通信(對KA并非必須)庄岖;
建議使用/etc/hosts文件實現(xiàn)豁翎;
(4) 確保各節(jié)點的用于集群服務(wù)的接口支持MULTICAST通信;
(5)使用D類多播地址:224-239隅忿;
四心剥、keepalived安裝配置:
- 從CentOS 6.4以后,就收錄到base倉庫提供背桐;
1优烧、程序環(huán)境:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:keepalived.service
Unit File的環(huán)境配置文件:/etc/sysconfig/keepalived配置文件組件部分:
TOP HIERACHY頂級配置段
GLOBAL CONFIGURATION
Global definitions全局定義
Static routes/addresses靜態(tài)路由
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步組;
VRRP instance(s):實例链峭,每個vrrp instance即一個vrrp路由器畦娄;
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs;
2弊仪、 基本安裝配置
[root@keepalive130 ~] yum -y install net-tools tcpdump #安裝抓包工具和網(wǎng)絡(luò)工具
[root@keepalive130 ~] vim /etc/hosts#設(shè)置解析
172.16.15.130 keepalive130#主節(jié)點
172.16.15.131 keepalive131#備節(jié)點
[root@keepalive130 ~] ping keepalive130#測試
[root@keepalive130 ~] ip link set multicast on dev eth0#開啟多播
五熙卡、keepalived實現(xiàn)主從架構(gòu)
1、主節(jié)點配置
[root@keepalive130 ~] yum -y install keepalived#安裝
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #編輯配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#郵件通知地址 励饵,這里是本機收件地址
root@localhost
}
notification_email_from keepalived@localhost #發(fā)件地址
smtp_server 127.0.0.1 #郵件服務(wù)地址驳癌,端口是25
smtp_connect_timeout 30 #連接郵件服務(wù)器超時時間30秒
router_id keepalive130 #可以使用主機名
vrrp_mcast_group4 224.1.101.33 #設(shè)置多播地址,其他主機也一樣
}
vrrp_instance VI_1 { #定義一個虛擬路由器役听,第一個
state MASTER #當(dāng)前狀態(tài)颓鲜,主的
interface eth0 #當(dāng)前的vrp應(yīng)用表窘,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 33#這個虛擬ip,與其他主機要保持一至
priority 100 #優(yōu)先級甜滨,高于其他主機
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a1b2c3d4 #密碼為8位,不能用默認(rèn)的密碼
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0 label eth0:0#別名為eth0:0
}
}
[root@keepalive130 ~]# systemctl start keepalived #啟動keepalived
[root@keepalive130 ~]# systemctl status keepalived #查詢啟動信息
......
Jul 27 14:12:55 keepalive130 Keepalived_vrrp[4242]: VRRP_Instance(VI_1) Entering MASTER STATE #主要狀態(tài)
......
2乐严、備用節(jié)點設(shè)置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #編輯配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#郵件通知地址 ,這里是本機收件地址
root@localhost
}
notification_email_from keepalived@localhost #發(fā)件地址
smtp_server 127.0.0.1 #郵件服務(wù)地址衣摩,端口是25
smtp_connect_timeout 30 #連接郵件服務(wù)器超時時間30秒
router_id keepalive131 #可以使用主機名
vrrp_mcast_group4 224.1.101.33 #設(shè)置多播地址麦备,其他主機也一樣
}
vrrp_instance VI_1 { #定義一個虛擬路由器,第一個
state BACKUP #當(dāng)前狀態(tài)昭娩,從的
interface eth0 #當(dāng)前的vrp應(yīng)用凛篙,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 33#這個虛擬ip,與其他主機要保持一至
priority 96 #優(yōu)先級栏渺,低于master主機
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a1b2c3d4 #密碼為8位,不能用默認(rèn)的密碼
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0 label eth0:0#別名為eth0:0
}
}
[root@keepalive131 ~]# systemctl start keepalived #啟動keepalived
[root@keepalive131 ~]# systemctl status keepalived #查詢啟動信息
......
Jul 27 14:13:53 keepalive131 Keepalived_vrrp[4497]: VRRP_Instance(VI_1) Entering BACKUP STATE #備用狀態(tài)
......
3呛梆、測試:
基于搶占模式工作:
當(dāng)啟用備用節(jié)點時候,發(fā)現(xiàn)沒有主節(jié)點磕诊,也沒有更高的優(yōu)先級填物,備用節(jié)點轉(zhuǎn)變成主節(jié)點。
-
當(dāng)主節(jié)點上線時候霎终,備用節(jié)點發(fā)現(xiàn)主節(jié)點存在滞磺,優(yōu)先級低于主節(jié)點,備用節(jié)點退出主節(jié)點角色莱褒,轉(zhuǎn)為備用击困,并刪除VIP虛擬地址。
-
主節(jié)點上線啟用:
抓包測試:
在備用節(jié)點上:
[root@keepalive131 ~]# tcpdump -i eth0 -nn host 224.1.101.33 #對多播地址抓包
六广凸、keepalived實現(xiàn)主主架構(gòu)
1阅茶、主節(jié)點配置
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #編輯配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#郵件通知地址 ,這里是本機收件地址
root@localhost
}
notification_email_from keepalived@localhost #發(fā)件地址
smtp_server 127.0.0.1 #郵件服務(wù)地址谅海,端口是25
smtp_connect_timeout 30 #連接郵件服務(wù)器超時時間30秒
router_id keepalive130 #可以使用主機名
vrrp_mcast_group4 224.1.101.33 #設(shè)置多播地址脸哀,其他主機也一樣
}
vrrp_instance VI_1 { #定義一個虛擬路由器,第一個
state MASTER #當(dāng)前狀態(tài)扭吁,主的
interface eth0 #當(dāng)前的vrp應(yīng)用撞蜂,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 33#這個虛擬ip,與其他主機要保持一至
priority 100 #優(yōu)先級侥袜,高于其他主機
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a1b2c3d4 #密碼為8位,不能用默認(rèn)的密碼
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0
}
}
vrrp_instance VI_2{ #定義一個虛擬路由器蝌诡,第二個
state BACKUP #當(dāng)前狀態(tài),從的
interface eth0 #當(dāng)前的vrp應(yīng)用系馆,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 34#這個虛擬ip送漠,與其他主機要保持一至
priority 96 #優(yōu)先級,低于master主機
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a6b7c8d9 #密碼為8位,不能用默認(rèn)的密碼由蘑,這里修改一下
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0
}
}
[root@keepalive130 ~]# systemctl start keepalived #啟動keepalived
2闽寡、備用節(jié)點設(shè)置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #編輯配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#郵件通知地址 ,這里是本機收件地址
root@localhost
}
notification_email_from keepalived@localhost #發(fā)件地址
smtp_server 127.0.0.1 #郵件服務(wù)地址尼酿,端口是25
smtp_connect_timeout 30 #連接郵件服務(wù)器超時時間30秒
router_id keepalive131 #可以使用主機名
vrrp_mcast_group4 224.1.101.33 #設(shè)置多播地址爷狈,其他主機也一樣
}
vrrp_instance VI_1 { #定義一個虛擬路由器,第一個
state BACKUP #當(dāng)前狀態(tài)裳擎,從的
interface eth0 #當(dāng)前的vrp應(yīng)用涎永,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 33#這個虛擬ip,與其他主機要保持一至
priority 96 #優(yōu)先級鹿响,低于master主機
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a1b2c3d4 #密碼為8位,不能用默認(rèn)的密碼
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0 label eth0:0#別名為eth0:0
}
}
vrrp_instance VI_2{ #定義一個虛擬路由器羡微,第二個
state MASTER #當(dāng)前狀態(tài),主的
interface eth0 #當(dāng)前的vrp應(yīng)用惶我,綁定到那個網(wǎng)卡設(shè)備上
virtual_router_id 34#這個虛擬ip妈倔,與其他主機要保持一至
priority 100 #優(yōu)先級,高于備用節(jié)點
advert_int 1
authentication {
auth_type PASS #密碼認(rèn)證
auth_pass a6b7c8d9 #密碼為8位,不能用默認(rèn)的密碼绸贡,這里修改一下
}
virtual_ipaddress {#虛擬ip地址
172.16.15.99/16 dev eth0
}
}
[root@keepalive131 ~]# systemctl start keepalived #啟動keepalived
測試:
主備都啟用:
主節(jié)點關(guān)閉:
[root@keepalive130 ~]# systemctl stop keepalived