目錄
LVS-DR工作原理
1、LVS-DR資料包流向分析
Keepalived概述
keepalived工具介紹
keepalived服務重要功能
keepalived實作原理
VRRP虛拟備援協定
Keepalived體系主要子產品
使用Keepalived實作雙機熱備
部署LVS-DR叢集實驗
1、實驗準備
主DR伺服器配置
備DR伺服器
編輯 web伺服器1配置
web伺服器2配置
部署keepalivd(主-備)
驗證
LVS-DR工作原理
LVS-DR(Linux Virtual Server Director Server)工作模式,是生産環境最常用的一種工作模式
LVS-DR模式,Director Server作為群集的通路入口,不作為網關使用 節點Director Server與Real Server需要在同一個網絡中,傳回給用戶端的資料不需要經過Director Server 為了對整個群集的通路,Director Server和Real Server都需要配置VIP位址
1、LVS-DR資料包流向分析
1、Clinent向目标VIP送出請求,Director(負載均衡器)接收
源IP:用戶端ip,目标ip:虛拟ip,源MAC:用戶端MAC位址,目标MAC:負載均衡器的MAC位址
2、Director根據負載均衡算法選擇RealServer_1(真實伺服器),不修改也不封裝IP封包,而是将資料幀的MAC位址改為RealServer_1的MAC位址,然後在區域網路上發送。
3、RealServer_1收到這個振,解封裝後發現目标IP與本機比對(RealSERVERRS事先綁定了VIP)于是處理這個封包,随後重新封裝封包,發送到區域網路。
源ip:虛拟ip,目标ip:客戶機ip,源MAC:真實ens33網卡MAC,目标MAC:用戶端MAC
注意:如果跨網段,則封包通過路由器由internet傳回給使用者
4、Client收到回複封包,Client認為得到正常的服務,而不會知道是哪一台伺服器處理的
①用戶端向目标VIP發送請求, 負載均衡器接收
②負載均衡器根據負載均衡算法選擇後端真實伺服器,不修改也不封裝IP封包,而是将資料幀的
MAC位址改為後端真實伺服器的MAC位址,然後在區域網路上發送
①後端真實伺服器收到這個幀,解封裝後發現目标IP與本機比對(事先綁定了VIP),于是處理
這個封包。
田随後重新封裝封包,将響應封包通過1o接口傳送給實體網卡然後向外發出用戶端将收到回複封包
。用戶端認為得到正常的服務,而不會知道是哪一-台伺服器處理的如果跨網段,則封包通過路由器經由internet傳回給使用者
5、LVS-DR中的ARP問題
在LVS-DR負載均衡集樣中,負載均衡與節點伺服器都要配置相同的VIP位址。
2、在區域網路中具有相同的IP位址,勢必會造成各伺服器ARP通信的系亂。
當ARPE播發送到VS-DR叢集時,因為負載均衡器和節點伺服器都是連接配接到相同網絡上,它們都會接收到ARP廣播。隻有前端的負
載均衡器進行響應,其他節點伺服器不應該響應ARP廣播。
3、對節點伺服器進行處理,使其不響應針對VIP的ARP請求。
使用虛接口1o:0 承載VIP位址設定核心參數arp_ ignore=1:系統隻響應目的IP為本地IP的ARP請求
4、 Rea1Serter傳回封包(源IP是VIP)經路由器轉發, 重新封裝封包時,需要先擷取路由器的MAC位址
5、發送ARP請求時,Linux預設使用IP包的源IP位址(即VIP)作為ARP請求包中的源IP位址,而不使
用發送接口的IP位址如: ens33
6、路由器收到ARP請求後,将更新ARP表項
7、原有的VIP對應Director的MAC位址會被更新為VIP對應RealServer的MAC位址
8、路由器根據ARP表項, 會将新來的請求封包轉發給Realserver, 導緻Di rector的VIP失效
解決方法:對節點伺服器進行處理,設定核心參數arp_announce=2:系統不使用IP包的源位址來設定ARP請求的源位址,而選擇發送接口的IP位址
Keepalived概述
Keepalived是企業應用中,單台伺服器承擔應用存在單點故障的危險,單點故障一旦發生,企業伺服器将會發生終端,造成極大的危害和損失
keepalived工具介紹
- keepalived 負載均衡軟體設計的,用來管理并監控 LVS 叢集中各個服務節點的狀态,後來又加入了可以實作高可用的 VRRP 功能。是以,keepalived 除了能夠管理 LVS 叢集外,還可以為其他服務(例如:Nginx、Haproxy、MySQL等)實作高可用。
- keepalived 軟體主要是通過 VRRP 協定實作高可用功能的。VRRP 是 Virtual Router Redundancy Protocol(虛拟路由器備援協定的縮寫,VRRP 出現的目的就是為了解決靜态路由單點故障的問題,它能夠保證當個别節點當機時,整個網絡可以不間斷地運作。是以,keepalived 一方面具有配置管理 LVS 的功能,同時還具有對 LVS 下面節點進行健康檢查的功能,另一方面也可實作系統網絡服務的高可用。
keepalived服務重要功能
- 管理LVS負載均衡軟體
- 支援故障自動切換(Failover)
- 實作LVS叢集中節點的健康檢查(Health Checking)
- 實作LVS負載排程節點伺服器的高可用性(HA)
對于節點伺服器:健康檢查如果發現有故障的節點就會将其隔離或者剔除叢集,待其回複後再重新加入的叢集當中去
負載均衡器:健康檢查會定時去檢查主機的狀态(包括主機和服務的狀态),如果出現故障就會自動切換到備主機上待主機恢複,在重新讓主承載業務請求
keepalived實作原理
VRRP虛拟備援協定
VRRP會把多個路由組成一個虛拟路由組VRID,VRRP會生成一個虛拟路由(包含虛拟IP、虛拟MAC,區域網路内,使用者不需要關心誰是主路由/誰是備路由,他們隻用虛拟路由器的虛拟IP作為他們的網關),實際上虛拟IP就是承載在Master路由上,也就是說實際的資料是通過Master進行轉發的,Backup是通過優先級來決定哪一個是Master路由,優先級最大的那台就是Master,Backup隻是用來監聽Master定時發送的VRRP封包,如果逾時未收到Master發來的VRRP封包,則Backup就會搶占Master,虛拟IP也會一起漂移到Backup上。當Master恢複後,虛拟IP會漂移回到Master上(非健康檢查模式)
keepalived時一款高可用軟體,可以工作在三層(網絡層)、四層(傳輸層)和五層(應用層)上,進行健康檢測功能。
我們可以手動配置,選擇主用裝置和備用裝置,選擇搶占和非搶占。當開啟搶占模式時,原有的主用裝置恢複後會搶占原有的備用裝置,恢複對VIP的響應,而原有的備用裝置則會恢複到備用裝置的狀态。一般情況下,我們都會把一個硬體性能好的裝置作為主用裝置,是以我們通常會開啟搶占功能。
keepalived可以工作在類似三層、四層和五層的模式上,當keepalived工作在三層模式時,以IP的形式去進行健康檢測,當keepalived工作在四層模式時,以IP+端口的形式去進行健康檢測,當keepalived工作在五層模式時,以自定義腳本的方式去進行健康檢測。
Keepalived體系主要子產品
子產品 | 作用 |
---|---|
croe子產品 | 為Keepalived的核心,負載主程序的啟動、維護及全局配置檔案的加載和解析 |
vrrp子產品 | 是來實作VRRP協定的 |
check子產品 | 負責健康檢查,常見的方式有端口及URL檢查 |
使用Keepalived實作雙機熱備
- 基于VRRP協定的熱備方式Keepalived可以用作故障切換,每個熱備組可以有多台伺服器,當然最常用的還是雙機熱備
- 在雙機熱備方案中,故障切換主要針對虛拟IP位址的漂移來實作,是以可以适用于各種應用伺服器(如:Web、FTP、Mail、SSH、DNS…)
- 其中主、備伺服器都需要安裝Keepalived
部署LVS-DR叢集實驗
1、實驗準備
主DR伺服器:192.168.127.129
備DR伺服器:192.168.127.139
web伺服器1:192.168.127.149
web伺服器2:192.168.127.159
VIP:192.168.127.100
主DR伺服器配置
yum install -y ipvsadm keepalived
modprobe ip_vs #加載ip_vs子產品資訊
cat /proc/net/ip_vs #檢視ip_vs子產品資訊
配置網卡
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens33:0
ifup ens33:0 #開啟
ifconfig #檢視
調整proc響應參數
由于LVS負載均衡器和各節點需要公用vip位址,應該關閉linux核心的重定向相應參數,不充當路
由器(轉發、重定向)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects =0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p #加載
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
cd /opt
寫一個腳本,并且執行
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.32.100:80 -s rr
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
ipvsadm
備DR伺服器
yum install -y ipvsadm keepalived
modprobe ip_vs #加載ip_vs子產品資訊
cat /proc/net/ip_vs #檢視ip_vs子產品資訊
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens33:0
調整proc響應參數
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects =0
net.ipv4.conf.ens33.send_redirects = 0
cd /opt
寫一個腳本,并且執行
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.32.100:80 -s rr
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
ipvsadm
web伺服器1配置
yum install -y httpd #安裝
route add -host 192.168.127.100 dev lo:0 #路由禁锢
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
cd /var/www/html/
vim index.html
web伺服器2配置
yum install -y httpd #安裝
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-lo:0
route add -host 192.168.127.100 dev lo:0 #路由禁锢
調整核心的ARP相應參數以阻止更新VIP的MAC位址,防止沖突
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
準備頁面檔案
cd /var/www/html/
vim index.html
<html><body><h1>yyh</h1></body></html>
部署keepalivd(主-備)
主
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #備份
vim keepalived.conf
global_defs {
router_id lvs_01
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.127.100
}
}
virtual_server 192.168.127.100 80 {
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.127.149 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.127.159 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
備
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #備份
global_defs {
router_id lvs_02
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.32.100
}
}
virtual_server 192.168.127.100 80 {
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.127.149 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.127.159 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
驗證
主dr伺服器
備dr伺服器
關閉主dr伺服器keepalived,檢視
檢視備dr伺服器