wordpress顯示作者seo站長網(wǎng)怎么下載
一、集群相關概念簡述
HA是High Available縮寫,是雙機集群系統(tǒng)簡稱,指高可用性集群,是保證業(yè)務連續(xù)性的有效解決方案,一般有兩個或兩個以上的節(jié)點,且分為活動節(jié)點及備用節(jié)點。
1、集群的分類
- LB:負載均衡集群
- lvs負載均衡
- nginx反向代理
- HAProxy
- HA:高可用集群
- heartbeat
- keepalived
- redhat5 : cman + rgmanager , conga(WebGUI) --> RHCS(Cluster Suite)集群套件
- redhat6 : cman + rgmanager , corosync + pacemaker
- redhat7 : corosync + pacemaker
- 數(shù)據(jù)庫,redis
- HPC:高性能集群
- SPoF: Single Point of Failure,解決單點故障
2.系統(tǒng)可用性的計算公式
A=MTBF/(MTBF+MTTR)
- A:高可用性,指標:95%, 99%, 99.5%, ...., 99.999%,99.9999%等
- MTBF:平均無故障時間
- MTTR:平均修復時間
?3.系統(tǒng)故障
硬件故障:設計缺陷、 wear out (損耗)、非人為不可抗拒因素軟件故障:設計缺陷 bug
?4.實現(xiàn)高可用
active/passive 主 / 備active/active 雙主active --> HEARTBEAT --> passiveactive <--> HEARTBEAT <--> active
二.keepalived
1.Keepalived介紹
?Keepalived是Linux下一個輕量級別的高可用解決方案。高可用(High Avalilability,HA),其實兩種不同的含義:廣義來講,是指整個系統(tǒng)的高可用行,狹義的來講就是之主機的冗余和接管,
?? 它與HeartBeat RoseHA 實現(xiàn)相同類似的功能,都可以實現(xiàn)服務或者網(wǎng)絡的高可用,但是又有差別,HeartBeat是一個專業(yè)的、功能完善的高可用軟件,它提供了HA 軟件所需的基本功能,比如:心跳檢測、資源接管,檢測集群中的服務,在集群節(jié)點轉移共享IP地址的所有者等等。HeartBeat功能強大,但是部署和使用相對比較麻煩,
與HeartBeat相比,Keepalived主要是通過虛擬路由冗余來實現(xiàn)高可用功能,雖然它沒有HeartBeat功能強大,但是Keepalived部署和使用非常的簡單,所有配置只需要一個配置文件即可以完成,
Keepalived起初是為LVS設計的,專門用來監(jiān)控集群系統(tǒng)中各個服務節(jié)點的狀態(tài),它根據(jù)TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節(jié)點的狀態(tài),如果某個服務器節(jié)點出現(xiàn)異常,或者工作出現(xiàn)故障,Keepalived將檢測到,并將出現(xiàn)的故障的服務器節(jié)點從集群系統(tǒng)中剔除,這些工作全部是自動完成的,不需要人工干涉,需要人工完成的只是修復出現(xiàn)故障的服務節(jié)點。
? 后來Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虛擬路由冗余協(xié)議)出現(xiàn)的目的是解決靜態(tài)路由出現(xiàn)的單點故障問題,通過VRRP可以實現(xiàn)網(wǎng)絡不間斷穩(wěn)定運行,因此Keepalvied 一方面具有服務器狀態(tài)檢測和故障隔離功能,另外一方面也有HA cluster功能.
2.keepalived相關概念?
- vrrp協(xié)議:Virtual Redundant Routing Protocol 虛擬冗余路由協(xié)議
- Virtual Router:虛擬路由器
- VRID(0-255):虛擬路由器標識
- master:主設備,當前工作的設備
- backup:備用設備
- priority:優(yōu)先級,優(yōu)先級越大優(yōu)先工作,具體情況示工作方式?jīng)Q定
- VIP:虛擬IP地址,正真向客戶服務的IP地址
- VMAC:虛擬MAC地址(00-00-5e-00-01-VRID)
- 搶占式:如果有優(yōu)先級高的節(jié)點上線,則將此節(jié)點轉為master
- 非搶占式:即使有優(yōu)先級高的節(jié)點上線,在當前master工作無故障的情況運行搶占;等到此master故障后重新按優(yōu)先級選舉master
- 心跳:master將自己的心跳信息通知集群內(nèi)的所有主機,證明自己正常工作
- 安全認證機制:
- 無認證:任何主機都可成為集群內(nèi)主機,強烈不推薦
- 簡單的字符認證:使用簡單的密碼進行認證
- AH認證
- sync group:同步組,VIP和DIP配置到同一物理服務器上
- MULTICAST:組播,多播
- Failover:master故障,故障切換,故障轉移
- Failback:故障節(jié)點重新上線,故障切回
3.VRRP協(xié)議與工作原理?
在現(xiàn)實的網(wǎng)絡環(huán)境中。主機之間的通信都是通過配置靜態(tài)路由或者(默認網(wǎng)關)來完成的,而主機之間的路由器一旦發(fā)生故障,通信就會失效,因此這種通信模式當中,路由器就成了一個單點瓶頸,為了解決這個問題,就引入了VRRP協(xié)議。
VRRP可以將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由,這個虛擬路由器通過虛擬IP(一個或者多個)對外提供服務,而在虛擬路由器內(nèi)部十多個物理路由器協(xié)同工作,同一時間只有一臺物理路由器對外提供服務,這臺物理路由設備被成為:主路由器(Master角色),一般情況下Master是由選舉算法產(chǎn)生,它擁有對外服務的虛擬IP,提供各種網(wǎng)絡功能,如:ARP請求,ICMP 數(shù)據(jù)轉發(fā)等,而且其它的物理路由器不擁有對外的虛擬IP,也不提供對外網(wǎng)絡功能,僅僅接收MASTER的VRRP狀態(tài)通告信息,這些路由器被統(tǒng)稱為“BACKUP的角色”,當主路由器失敗時,處于BACKUP角色的備份路由器將重新進行選舉,產(chǎn)生一個新的主路由器進入MASTER角色,繼續(xù)提供對外服務,整個切換對用戶來說是完全透明的。
?? 每個虛擬路由器都有一個唯一的標識號,稱為VRID,一個VRID與一組IP地址構成一個虛擬路由器,在VRRP協(xié)議中,所有的報文都是通過IP多播方式發(fā)送的,而在一個虛擬路由器中,只有處于Master角色的路由器會一直發(fā)送VRRP數(shù)據(jù)包,處于BACKUP角色的路由器只會接受Master角色發(fā)送過來的報文信息,用來監(jiān)控Master運行狀態(tài),一一般不會發(fā)生BACKUP搶占的情況,除非它的優(yōu)先級更高,而當MASTER不可用時,BACKUP也就無法收到Master發(fā)過來的信息,于是就認定Master出現(xiàn)故障,接著多臺BAKCUP就會進行選舉,優(yōu)先級最高的BACKUP將稱為新的MASTER,這種選舉角色切換非常之快,因而保證了服務的持續(xù)可用性。
VRRP相關術語?
VRRP路由器:執(zhí)行VRRP協(xié)議一個或多個實例的路由器
虛擬路由器:由一個Master路由器和多個Backup路由器組成。當中,不管Master路由器還是Backup路由器都是一臺VRRP路由器,下行設備將虛擬路由器當做默認網(wǎng)關。
VRID:虛擬路由器標識,在同一個VRRP組內(nèi)的路由器必須有相同的VRID,事實上VRID就相當于一個公司的名稱,每一個員工介紹自己時都要包括公司名稱,表明自己是公司的一員,相同的道理,VRID表明了這個路由器屬于這個VRRP組。
Master路由器:虛擬路由器中承擔流量轉發(fā)任務的路由器
Backup路由器:當一個虛擬路由器中的Master路由器出現(xiàn)問題時,可以取代Master路由器工作的路由器
虛擬IP地址:虛擬路由器的IP地址,一個虛擬路由器能夠擁有一個或多個虛擬IP地址。
IP地址擁有者:接口IP和虛擬路由器IP地址同樣的路由器就叫做IP地址擁有者。
主IP地址:從物理接口設置的IP地址中選擇,一個選擇規(guī)則是總是選用第一個IP地址,VRRP通告報文總是用主IP地址作為該報文IP包頭的源IP。
虛擬MAC地址:組成方式是00-00-5E-00-01-{VRID},前三個字節(jié)00-00-5E是IANA組織分配的,接下來的兩個字節(jié)00-01是為VRRP協(xié)議指定的,最后的VRID是虛擬路由器標識,取值范圍[1,255]
?VRRP相關技術
通告:心跳,優(yōu)先級等;周期性工作方式:搶占式,非搶占式安全認證:無認證簡單字符認證:預共享密鑰MD5工作模式:主 / 備:單虛擬路由器主 / 主:主 / 備(虛擬路由器 1 ),備 / 主(虛擬路由器 2 )
?4.keepalived功能
vrrp 協(xié)議的軟件實現(xiàn),原生設計目的為了高可用 ipvs 服務官網(wǎng): http://keepalived.org/功能:基于 vrrp 協(xié)議完成地址流動為 vip 地址所在的節(jié)點生成 ipvs 規(guī)則 ( 在配置文件中預先定義 )為 ipvs 集群的各 RS 做健康狀態(tài)檢測基于腳本調(diào)用接口完成腳本中定義的功能,進而影響集群事務,以此支持 nginx 、 haproxy 等服務
?5.Keepalived體系結構
Keepalived起初是為LVS設計的,由于Keeplalived可以實現(xiàn)對集群節(jié)點的狀態(tài)檢測,而IPVS可以實現(xiàn)負載均衡功能,因此,Keepalived借助于第三方模塊IPVS就可以很方便地搭建一套負載均衡系統(tǒng),在這里有個誤區(qū),由于Keepalived可以和IPVS一起很好的工作,所以會有人以為Keepalived就是一個負載均衡軟件,這種理解是錯誤,
在Keepalived當中IPVS模塊是可配置的,如果需要負載均衡功能,可以在編譯Keepalived時開打負載均衡功能,也可以通過編譯參數(shù)關閉。
?? NetLINK模塊主要用于實現(xiàn)一些高級路由框架和一些相關參數(shù)的網(wǎng)絡功能,完成用戶空間層Netlink Reflector模塊發(fā)來的各種網(wǎng)絡請求。
??? 這個圖我們可以看到用戶空間層(user space),是建立在內(nèi)核空間層之上的(kernel sapce),
用戶空間層,主要有4個部分:
?????? Scheduler I/O Multiplexer 是一個I/O復用分發(fā)調(diào)度器,它負載安排Keepalived所有內(nèi)部的任務請求,
?????? Memory Mngt 是一個內(nèi)存管理機制,這個框架提供了訪問內(nèi)存的一些通用方法???????
?????? Control Plane? 是keepalived的控制版面,可以實現(xiàn)對配置文件編譯和解析
?????? Core componets? 這部分主要保護了下面5個部分
? ? ? ? ? ? ?1.Watchdog:是計算機可靠領域中極為簡單又非常有效的檢測工具,Keepalived正是通過它監(jiān)控Checkers和VRRP進程的。
? ? ? ? ? ? ?2.Checkers: 這是Keepalived最基礎的功能,也是最主要的功能,可以實現(xiàn)對服務器運行狀態(tài)檢測和故障隔離。
? ? ? ? ? ? ?3.VRRP Stack: 這時keepalived后來引用VRRP功能,可以實現(xiàn)HA集群中失敗切換功能。
? ? ? ? ? ? ?4.IPVS wrapper: 這個是IPVS功能的一個實現(xiàn),IPVS warrper模塊將可以設置好的IPVS規(guī)則發(fā)送的內(nèi)核空間并且提供給IPVS模塊,最終實現(xiàn)IPVS模塊的負載功能。
? ? ? ? ? ? ?5.Netlink Reflector:用來實現(xiàn)高可用集群Failover時虛擬IP(VIP)的設置和切換 ,
Netlink Reflector的所有請求最后都發(fā)送到內(nèi)核空間層的NETLINK 模塊來完成。
?6.keepalived環(huán)境準備
要求:各節(jié)點時間必須同步:ntp,chrony, 關閉防火墻和selinux?
7.keepalived相關配置文件
軟件包名:keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
配置文件示例:/usr/share/doc/keepalived/
Unit File:/lib/systemd/system/keepalived.service
Unit File的環(huán)境配置文件:/etc/sysconfig/keepalived
安裝軟件包
# yum install keepalived
配置文件參數(shù)詳解
全局配置
! Configuration File for keepalived
global_defs {
notification_email {
594233887@qq.com #keepalived 發(fā)生故障切換時郵件發(fā)送的目標郵箱,可以按行區(qū)分寫多個
timiniglee-zln@163.com
}
notification_email_from keepalived@KA1.timinglee.org #發(fā)郵件的地址
smtp_server 127.0.0.1 #郵件服務器地址
smtp_connect_timeout 30 #郵件服務器連接timeout
router_id KA1.timinglee.org #每個keepalived主機唯一標識
#建議使用當前主機名,但多節(jié)點重名不影響
vrrp_skip_check_adv_addr #對所有通告報文都檢查,會比較消耗性能
#啟用此配置后,如果收到的通告報文和上一個報文是同一 #個路由器,則跳過檢查,默認值為全檢查
vrrp_strict #嚴格遵循vrrp協(xié)議#啟用此項后以下狀況將無法啟動服務:#1.無VIP地址#2.配置了單播鄰居#3.在VRRP版本2中有IPv6地址#建議不加此項配置
vrrp_garp_interval 0 #報文發(fā)送延遲,0表示不延遲
vrrp_gna_interval 0 #消息發(fā)送延遲
vrrp_mcast_group4 224.0.0.18 #指定組播IP地址范圍:
}
配置虛擬路由器
vrrp_instance VI_1 {
state MASTER
interface eth0 #綁定為當前虛擬路由器使用的物理接口,如:eth0,可以和VIP不在一個網(wǎng)卡
virtual_router_id 51 #每個虛擬路由器惟一標識,范圍:0-255,每個虛擬路由器此值必須唯一#否則服務無法啟動#同屬一個虛擬路由器的多個keepalived節(jié)點必須相同#務必要確認在同一網(wǎng)絡中此值必須唯一
priority 100 #當前物理節(jié)點在此虛擬路由器的優(yōu)先級,范圍:1-254#值越大優(yōu)先級越高,每個keepalived主機節(jié)點此值不同
advert_int 1 #vrrp通告的時間間隔,默認1s
authentication { #認證機制
auth_type AH|PASS #AH為IPSEC認證(不推薦),PASS為簡單密碼(建議使用)
uth_pass 1111 #預共享密鑰,僅前8位有效#同一個虛擬路由器的多個keepalived節(jié)點必須一樣
}
virtual_ipaddress { #虛擬IP,生產(chǎn)環(huán)境可能指定上百個IP地址
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
172.25.254.100 #指定VIP,不指定網(wǎng)卡,默認為eth0,注意:不指定/prefix,默認32
172.25.254.101/24 dev eth1
172.25.254.102/24 dev eth2 label eth2:1
}
}
keepalived虛擬路由管理
實驗環(huán)境
設備 | 角色 | IP |
ka1 | keepalived1 | 192.168.10.170/24 |
ka2 | keepalived2 | 192.168.19.180/24 |
webserver1 | real server | 192.168.10.220/24 |
webserver2 | real server | 192.168.10.230/24 |
?注:vip設置為192.168.10.240/24
四臺主機全部關閉防火墻和selinux
webserver1,webserver2上安裝web服務,后面的測試可以更加清晰的看出結果
[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo webserver1 - 192.168.10.220 > /var/www/html/index.html
[root@webserver1 ~]# systemctl restart httpd.service
[root@webserver1 ~]# curl 192.168.10.220
webserver1 - 192.168.10.220
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver2 - 192.168.10.230 > /var/www/html/index.html
[root@webserver2 ~]# systemctl restart httpd.service
[root@webserver2 ~]# curl 192.168.10.230
webserver2 - 192.168.10.230
ka1,ka2上安裝keepalived軟件包
[root@ka1 ~]# yum install keepalived -y
[root@ka2 ~]# yum install keepalived -y
在ka1上進行配置
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf # 全局設定
global_defs {notification_email {2948250195@qq.com # 發(fā)送郵件通知給誰}notification_email_from keep@li.org #發(fā)送的郵件從哪來smtp_server 127.0.0.1 # 郵件服務器ip smtp_connect_timeout 30 # 連接郵件服務器的超時時間router_id ka1 # 虛擬路由的idvrrp_skip_check_adv_addr # 同一來源的只檢測一次
# vrrp_strict # 強制使用vrrp協(xié)議vrrp_garp_interval 0 vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18 # 接收通告數(shù)據(jù)的IP地址(組播地址)}# 虛擬路由器配置vrrp_instance VI_1 {state MASTER # 主設備interface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 100 # 優(yōu)先級advert_int 1authentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}
}
[root@ka1 ~]# systemctl restart keepalived.service
# 重啟服務
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.170 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:feea:fe5a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)RX packets 88607 bytes 6246698 (5.9 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 65079 bytes 4618871 (4.4 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)# vip 為 192.168.10.240
ka2和ka1配置相同,所以我們可以使用scp,進行復制
[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.10.180:/etc/keepalived/keepalived.conf
The authenticity of host '192.168.10.180 (192.168.10.180)' can't be established.
ECDSA key fingerprint is SHA256:Yrid63PgwDQh7wiaQmCGsLuxK3Cht8v/wekHTAza/XI.
ECDSA key fingerprint is MD5:d7:be:70:41:82:ff:81:40:5b:a7:40:10:d1:0c:ca:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.180' (ECDSA) to the list of known hosts.
root@192.168.10.180's password:
keepalived.conf 100% 4143 4.5MB/s 00:00
唯一要變的就是我們將ka1當作主設備,ka2當作從,使用需要改兩個配置
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {state BACKUP # 從設備interface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 80 # 優(yōu)先級改為80,兩個設備優(yōu)先級不一樣advert_int 1authentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}
}
[root@ka2 ~]# systemctl restart keepalived.service
測試:
[root@ka1 ~]# tcpdump -i ens33 -nn host 224.0.0.18[root@ka1 ~]# tcpdump -i ens33 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
19:06:36.826789 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:06:37.828337 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:06:38.829688 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:06:39.831263 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:06:40.832678 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:06:41.833834 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20# 使用tcpdump進行抓包
# -i 就是ens33接收到底數(shù)據(jù)
# -nn 表示不做解析
# host指定觀察的那個ip
# 224.0.0.18 組播地址
ka1的優(yōu)先級高于ka2所以正常情況看不到ka2的數(shù)據(jù)。若此時ka1發(fā)生故障,ka2則會迅速補上,此時在ka1上的vip也會跑到ka2上
[root@ka1 ~]# systemctl stop keepalived.service
[root@ka1 ~]# tcpdump -i ens33 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
19:09:39.386202 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
19:09:40.387629 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
19:09:41.388011 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
19:09:42.389522 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
19:09:43.390689 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
19:09:44.391255 IP 192.168.10.180 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
[root@ka2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.180 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:fe2c:7bd prefixlen 64 scopeid 0x20<link>ether 00:0c:29:2c:07:bd txqueuelen 1000 (Ethernet)RX packets 119533 bytes 8259027 (7.8 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 39657 bytes 3009635 (2.8 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:2c:07:bd txqueuelen 1000 (Ethernet)
因為默認是搶占模式,當ka1好了之后,vip則會跑到ka1上,流量也會回到ka1上
[root@ka1 ~]# systemctl start keepalived.service
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.170 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:feea:fe5a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)RX packets 92906 bytes 6566009 (6.2 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 67173 bytes 4781344 (4.5 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)
[root@ka1 ~]# tcpdump -i ens33 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
19:13:06.604998 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:13:07.605229 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:13:08.605816 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
19:13:09.606386 IP 192.168.10.170 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
keepalived虛擬路由的通訊設定
此時ka1,ka2是ping不通vip的,因為防止被攻擊,所有的數(shù)據(jù)流量打過來后可能會有惡意攻擊,我們最終的數(shù)據(jù)流量是要轉到real server上的,所以他默認會把你的vip訪問功能給🈲掉
[root@ka1 ~]# ping 192.168.10.240
PING 192.168.10.240 (192.168.10.240) 56(84) bytes of data.
^Z
[7]+ 已停止 ping 192.168.10.240
[root@ka1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0 match-set keepalived dstChain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
這就是導致ping不通的原因----?match-set keepalived dst
如果要想ping通,就需要在配置文件中添加參數(shù) ka1,ka2相同
global_defs {notification_email {2948250195@qq.com # 發(fā)送郵件通知給誰}notification_email_from keep@li.org #發(fā)送的郵件從哪來smtp_server 127.0.0.1 # 郵件服務器ipsmtp_connect_timeout 30 # 連接郵件服務器的超時時間router_id ka1 # 虛擬路由的idvrrp_skip_check_adv_addr # 同一來源的只檢測一次vrrp_strict # 強制使用vrrp協(xié)議vrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18 # 接收通告數(shù)據(jù)的IP地址(組播地址)vrrp_iptables
}# 在最后一行添加
# 或者將vrrp_strict 注釋掉,效果相同
測試:
[root@ka1 ~]# ping 192.168.10.240
PING 192.168.10.240 (192.168.10.240) 56(84) bytes of data.
64 bytes from 192.168.10.240: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 192.168.10.240: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 192.168.10.240: icmp_seq=3 ttl=64 time=0.035 ms
64 bytes from 192.168.10.240: icmp_seq=4 ttl=64 time=0.034 ms
^C
--- 192.168.10.240 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.021/0.029/0.035/0.007 ms
[root@ka1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
keepalived日志獨立
默認情況下keepalived的日志和其他的服務是捆在一起的
要想將其日志獨立出來就要修改其配置文件
[root@ka1 ~]# vim /etc/sysconfig/keepalived # Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
#KEEPALIVED_OPTIONS="-D -S 6"
# 指定采集日志用的id是6,0-7都行
重啟服務
[root@ka1 ~]# systemctl restart keepalived.service
編輯rsyslog.conf文件
#### RULES ##### Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages# The authpriv file has restricted access.
authpriv.* /var/log/secure# Log all the mail messages in one place.
mail.* -/var/log/maillog# Log cron stuff
cron.* /var/log/cron# Everybody gets emergency messages
*.emerg :omusrmsg:*# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler# Save boot messages also to boot.log
local7.* /var/log/boot.log
local6.* /var/log/keepalived.log
在rules模塊下可以添加 將日志采集在那個文件中,可以自定義,local加id?
重啟服務
[root@ka1 ~]# systemctl restart rsyslog.service
測試:
[root@ka1 ~]# systemctl restart rsyslog.service
[root@ka1 ~]# ll /var/log/keepalived.log
-rw-------. 1 root root 55473 8月 12 19:40 /var/log/keepalived.log
[root@ka1 ~]# tail -f /var/log/keepalived.log
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Adding sorry server [192.168.200.200]:1358 to VS [10.10.10.2]:1358
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Removing alive servers from the pool for VS [10.10.10.2]:1358
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: SMTP alert successfully sent.
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Timeout connecting server [192.168.201.100]:443.
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Check on service [192.168.201.100]:443 failed after 3 retry.
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Removing service [192.168.201.100]:443 from VS [192.168.200.100]:443
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Lost quorum 1-0=1 > 0 for VS [192.168.200.100]:443
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 12 19:40:20 ka1 Keepalived_healthcheckers[3771]: SMTP alert successfully sent.
^Z
[8]+ 已停止 tail -f /var/log/keepalived.log
keepalived獨立子配置文件
include /path/file? ? ?可以指定一個路徑
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
}# vrrp_instance VI_1 {
# state MASTER # 主設備
# interface ens33 # vip使用的真實設備是誰
# virtual_router_id 100 # 虛擬路由id(唯一的)
# priority 100 # 優(yōu)先級
# advert_int 1
# authentication {
# auth_type PASS # 發(fā)通告帶的信息
# auth_pass 1111
# }
# virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口
# 192.168.10.240/24 dev ens33 label ens33:0
# }
#}
include "/etc/keepalived/conf.d/*.conf" # 將以上注釋的內(nèi)容指定在這個文件中# 我們將以上的內(nèi)容獨立出來,放在一個新的文件里面,include指向新文件,前提是一定要有這個文件
[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d
[root@ka1 ~]# vim /etc/keepalived/conf.d/192.168.10.240.confvrrp_instance VI_1 {state MASTER # 主設備interface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 100 # 優(yōu)先級advert_int 1authentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}
}[root@ka1 ~]# systemctl restart keepalived.service
測試:
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.170 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:feea:fe5a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)RX packets 107150 bytes 7643447 (7.2 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 75971 bytes 5480440 (5.2 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)
注意:將原配置文件獨立出來后,原來的文件要么注釋掉,要么刪掉,否則獨立出來的文件會和之前的文件沖突
keepalived非搶占和延遲搶占
非搶占模式 nopreempt
默認為搶占模式 preempt ,即當高優(yōu)先級的主機恢復在線后,會搶占低先級的主機的 master 角色,這樣會使 vip 在 KA 主機中來回漂移,造成網(wǎng)絡抖動,建議設置為非搶占模式 nopreempt ,即高優(yōu)先級主機恢復后,并不會搶占低優(yōu)先級主機的 master 角色非搶占模塊下 , 如果原主機 down 機 , VIP 遷移至的新主機 , 后續(xù)也發(fā)生 down 時 , 仍會將 VIP 遷移回原主機
注意:要關閉 VIP搶占,必須將各 keepalived 服務器state配置為BACKUP ?
ka1,和ka2配置相同
vim /etc/keepalived/keepalived.conf
}vrrp_instance VI_1 {state BACKUP interface ens33 # vip使用的真實設備是誰 virtual_router_id 100 # 虛擬路由id(唯一的) priority 100 # 優(yōu)先級 advert_int 1 nopreemptauthentication {auth_type PASS # 發(fā)通告帶的信息 auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口 192.168.10.240/24 dev ens33 label ens33:0}
}# 設置非搶占模式 需要將state 改為 BACKUP 以及加一行參數(shù) nopreempt
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state BACKUP interface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 80 # 優(yōu)先級advert_int 1nopreempt authentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0
我先重啟ka2再重啟ka1,vip將會跑到ka2上,并且不會回去,當ka2掛掉,vip才會回去,不管優(yōu)先級
[root@ka2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.180 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:fe2c:7bd prefixlen 64 scopeid 0x20<link>ether 00:0c:29:2c:07:bd txqueuelen 1000 (Ethernet)RX packets 142318 bytes 10033173 (9.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 45810 bytes 3472473 (3.3 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:2c:07:bd txqueuelen 1000 (Ethernet)
[root@ka2 ~]# systemctl stop keepalived.service
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.170 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:feea:fe5a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)RX packets 111441 bytes 7967231 (7.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 78058 bytes 5653940 (5.3 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)
延遲搶占preempt_delay
搶占延遲模式,即優(yōu)先級高的主機恢復后,不會立即搶回VIP,而是延遲一段時間(默認300s)再搶回VIP
preempt_delay # #指定搶占延遲時間為#s,默認延遲300s
[root@ka1 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {state BACKUPinterface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 100 preempt_delay 10s # 搶占延遲10sadvert_int 1
# nopreempt authentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {state BACKUPinterface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 80 # 優(yōu)先級advert_int 1preempt_delay 10s
# nopreemptauthentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}
測試:由于pa1的優(yōu)先級高于pa2,我先啟動pa2 ,down掉pa1,vip會到pa2上,我再啟動pa1,vip不會立刻回到pa1上,而是10秒后
[root@ka2 ~]# systemctl restart keepalived.service
[root@ka2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.180 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:fe2c:7bd prefixlen 64 scopeid 0x20<link>ether 00:0c:29:2c:07:bd txqueuelen 1000 (Ethernet)RX packets 146839 bytes 10374458 (9.8 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 47473 bytes 3611473 (3.4 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 607 bytes 44033 (43.0 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 607 bytes 44033 (43.0 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@ka1 ~]# date
2024年 08月 12日 星期一 20:19:31 CST
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.170 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::20c:29ff:feea:fe5a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)RX packets 115304 bytes 8272918 (7.8 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 79935 bytes 5800622 (5.5 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.240 netmask 255.255.255.0 broadcast 0.0.0.0ether 00:0c:29:ea:fe:5a txqueuelen 1000 (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 942 bytes 69116 (67.4 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 942 bytes 69116 (67.4 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@ka1 ~]# date
2024年 08月 12日 星期一 20:19:48 CST
#差不多就是這個意思
VIP單播配置
[!NOTE]注意:啟用 vrrp_strict 時,不能啟用單播
# 在所有節(jié)點 vrrp_instance 語句塊中設置對方主機的 IP ,建議設置為專用于對應心跳線網(wǎng)絡的地址,而非使用業(yè)務網(wǎng)絡unicast_src_ip <IPADDR> # 指定發(fā)送單播的源 IPunicast_peer {<IPADDR> # 指定接收單播的對方目標主機 IP......}# 啟用 vrrp_strict 時,不能啟用單播 , 否則服務無法啟動 , 并在 messages 文件中記錄下面信息Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Strict mode does notsupport authentication. Ignoring.Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Unicast peers are not supported in strict modeJun 16 17:50:06 centos8 Keepalived_vrrp[23180]: Stopped - used 0.000606 usertime, 0.000000 system timeJun 16 17:50:06 centos8 Keepalived[23179]: Keepalived_vrrp exited with permanenterror CONFIG. TerminatingJun 16 17:50:06 centos8 systemd[1]: keepalived.service: Succeeded.Jun 16 17:50:06 centos8 Keepalived[23179]: Stopped Keepalived v2.0.10(11/12,2018)
?組播變單播實驗
ka1和ka2互相進行通告
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf global_defs {notification_email {2948250195@qq.com # 發(fā)送郵件通知給誰}notification_email_from keep@li.org #發(fā)送的郵件從哪來smtp_server 127.0.0.1 # 郵件服務器ipsmtp_connect_timeout 30 # 連接郵件服務器的超時時間router_id ka1 # 虛擬路由的idvrrp_skip_check_adv_addr # 同一來源的只檢測一次
# vrrp_strict #注釋此行,與vip單播模式?jīng)_突vrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18 # 接收通告數(shù)據(jù)的IP地址(組播地址)
# vrrp_iptables
}vrrp_instance VI_1 {state MASTERinterface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 100
# preempt_delay 10s # 搶占延遲10sadvert_int 1
# nopreemptauthentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}unicast_src_ip 192.168.10.170 # 發(fā)送源,就是本機ipunicast_peer {192.168.10.180 # 接收源,就是對端也就是ka2}
[root@ka2 ~]# vim /etc/keepalived/keepalived.confglobal_defs {notification_email {2948250195@qq.com # 發(fā)送郵件通知給誰}notification_email_from keep@li.org #發(fā)送的郵件從哪來smtp_server 127.0.0.1 # 郵件服務器ipsmtp_connect_timeout 30 # 連接郵件服務器的超時時間router_id ka1 # 虛擬路由的idvrrp_skip_check_adv_addr # 同一來源的只檢測一次
# vrrp_strict # 注釋此行,與vip單播模式?jīng)_突vrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18 # 接收通告數(shù)據(jù)的IP地址(組播地址)
# vrrp_iptablesvrrp_instance VI_1 {state BACKUPinterface ens33 # vip使用的真實設備是誰virtual_router_id 100 # 虛擬路由id(唯一的)priority 80 # 優(yōu)先級advert_int 1
# preempt_delay 10s
# nopreemptauthentication {auth_type PASS # 發(fā)通告帶的信息auth_pass 1111}virtual_ipaddress { # vip id # 設定網(wǎng)卡子接口192.168.10.240/24 dev ens33 label ens33:0}unicast_src_ip 192.168.10.180 # 發(fā)送源,就是本機ipunicast_peer {192.168.10.170}
測試:
[root@ka1 ~]# tcpdump -i ens33 -nn src host 192.168.10.170 and dst 192.168.10.180tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
09:43:21.998624 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
09:43:23.005985 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
09:43:24.011231 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
09:43:25.017003 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
09:43:26.017906 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
09:43:27.024354 IP 192.168.10.170 > 192.168.10.180: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20# 在170上看180到170的數(shù)據(jù)
# 在180上看170到180的數(shù)據(jù)
未完。。。。。