文章目錄
- 一:LVS+DR原理
- 二:keepalived原理
- 三、LVS-DR
- 3.1:LVSgon作業模式
- 3.2:LVS-DR中的ARP問題
- 四:Keepalived使用場景
- 4.1 Keepalived工具介紹
- 4.2: Keepalived實作原理剖析
- 4.3、Keepalived的部署
- 4.31 Keepalived案例講解
- 4.32 Keepalived安裝與啟動
- 4.33 配置Keepalived master服務器
- 4.34 Keepalived雙機熱備效果測驗
- 五: 專案部署
- 5.1:專案地址規劃
- 5.2:專案部署
- 5.3:兩臺LVS服務器都開啟路由轉發,關閉重定向
- 5.4:配置DR模式
- 5.5:配置兩臺WEB服務器節點
- 5.6:服務器部署keepdalived服務器
- 5.61:keeppalived.conf是主組態檔
- 5.7:驗證
- 5.8:備用調度器頂替
- 5.9、總結
一:LVS+DR原理
Director分配請求到不同的real server,real server處理請求后直接回應給用戶,這樣director負載均衡器僅處理客戶機與服務器的一半連接,負載均衡器僅處理一半的連接,避免了新的性能瓶頸,同樣增加了系統的可伸縮性,Direct Routing由與采用物理層(修改MAC地址)技術,因此所有服務器都必須在一個網段中,
二:keepalived原理
keepalived是以VRRP協議為實作基礎的.
虛擬路由冗余協議,可以認為是實作路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master,這樣的話就可以保證路由器的高可用了,
keepalived主要有三個模塊,分別是core、check和vrrp,
- core模塊為keepalived的核心,負責主行程的啟動、維護以及全域組態檔的加載和決議,
- check負責健康檢查,包括常見的各種檢查方式,以及對應的配置決議包括LVS的配置決議,,
- vrrp模塊是來實作VRRP協議的,
使用Keepalived為LVS調度器提供高可用功能,防止調度器單點故障,為用戶提供Web服務:
三、LVS-DR
3.1:LVSgon作業模式
關于群集的負載調度技術,可以基于IP埠,內容等進行分發,其中IP負載均衡技術是效率最高的,
在基于IP的負載均衡模式中,常見的有地址轉換,IP隧道、直接路由 這三種作業模式:
直接路由;簡稱DR模式
采用半開放式的網路結構,與TUN模式的結構類似,但各節點并不是分散在各地,而是與調度器位于同一個物理網路,
負載調度器與各節點服務器通過本地網路連接,不需要建立專用的IP隧道,

3.2:LVS-DR中的ARP問題
對節點 web服務器進行處理,使其不回應針對VIP的ARP請求
- 使用虛介面lo:0承載VIP地址
- 設定內核引數arp_ ignore=1: 系統只回應目的IP為本地IP的ARP請求,
新來的請求報文,路由器根據ARP表項,會將該報文轉發給RealServer,從而導致Director的VIP失效
- 解決方法:對節點服務器進行處理,設定內核引數arp_ announce=2:
系統不使用IP包的源地址來設定ARP請求的源地址,而選擇發送介面的IP地址,
修改/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.allarp_announce = 2
四:Keepalived使用場景
企業應用中,單臺服務器承擔應用存在單點故障的危險
單點故障一旦發生,企業服務將發生中斷,造成極大的危害
4.1 Keepalived工具介紹
專為LVS和HA設計的一款健康檢查工具
支持故障自動切換(Failover)
支持節點健康狀態檢查(Health Checking)
官方網站:http://www.keepalived.org
4.2: Keepalived實作原理剖析
Keepalived采用VRRP熱備份協議實作Linux服務器的多機熱備功能
VRRP(虛擬路由冗余協議)是針對路由器的一種備份解決方案
由多臺路由器組成一個熱備組,通過公用的虛擬IP地址對外提供服務
每個熱備組內同時只有一臺主路由器提供服務,其他路由器處于冗余狀態
若當前在線的路由器失效,則其他路由器會根據設定的優先級自動接替虛擬IP地址,繼續提供服務
4.3、Keepalived的部署
4.31 Keepalived案例講解
Keepalived可實作多機熱備,每個熱備組可有多臺服務器
雙機熱備的故障切換是由虛擬IP地址的漂移來實作,適用于各種應用服務器
4.32 Keepalived安裝與啟動
在LVS群集環境中應用時,也需用到ipvsadm管理工具
YUM安裝Keepalived
啟用Keepalived服務
4.33 配置Keepalived master服務器
Keepalived配置目錄位于/etc/keepalived/
keepalived.conf是主組態檔
- global_defs{…}區段指定全域引數
- vrrp_instance實體名稱{…}區段指定VRRP熱備引數
- 注釋文字以"!"符號開頭
- 目錄samples,提供了許多配置樣例作為參考
常用配置選項
- router_id HA_TEST_R1:本路由器(服務器)的名稱
- vrrp_instance V1_1:定義VRRP熱備實體
- state MASTER:熱備狀態,MASTER表示主服務器
- interface ens33:承載VIP地址的物理介面(之前的版本是eth0,一定要修改)
- virtual_router_id 1:虛擬路由器的ID號,每個熱備組保持一致
常用配置選項 - priority 100:優先級,數值越大優先級越高(0-100)
- adver_int 1:通告間隔秒數(心跳頻率)
- auth_type PASS:認證型別
- auth_pass 123456:密碼字串
- virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多個
Keepalived備份服務器的配置與master的配置有三個選項不同
router_id:設為自有名稱
state:設為BACKUP (大寫)
priority:值低于主服務器
其他選項與master相同
4.34 Keepalived雙機熱備效果測驗
測驗雙機熱備的效果
主、備均啟用Web服務,設定不同內容
先后禁用、啟用主服務器的網卡
執行的測驗
測驗1:使用ping檢測192.168.158.10的
測驗2:訪問http://192.168.158.10,確認可用性及內容變化
測驗3:查看日志檔案/var/log/messages中的變化
五: 專案部署
5.1:專案地址規劃

| 主機名 | 真實ip | 漂移地址 |
|---|---|---|
| LVS1 | 192.168.158.10 | (ens33:0)192.168.158.100 |
| LVS2 | 192.168.158.20 | (ens33:0)192.168.158.100 |
| WEB1 | 192.168.158.30 | (lo:0)192.168.158.100 |
| WEB2 | 192.168.158.40 | (lo:0)192.168.158.10 |
5.2:專案部署
//keepalived:雙機熱備要用到的,ipvsadm:調度管理要用
[root@lvs01 ~]# yum install keepalived ipvsadm -y
[root@lvs02 ~]# yum install keepalived ipvsadm -y
5.3:兩臺LVS服務器都開啟路由轉發,關閉重定向
#尾行插入下段配置
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#多載配置,使之生效
[root@lvs01 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
虛擬網卡:ens33:0 真實網卡ens33
LVS1
[root@lvs01 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs01 network-scripts]# vim ifcfg-ens33:0 //編輯虛擬IP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.158.100
NETMASK=255.255.255.0
[root@lvs01 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #修改為static
IPADDR=192.168.158.10
NETMASK=255.255.255.0
GATEWAY=192.168.158.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=915032f7-b91a-4e95-8247-3bbabd595285
DEVICE=ens33
ONBOOT=yes
LVS2
[root@lvs02 network-scripts]# vim ifcfg-ens33:0 //編輯虛擬IP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.158.100
NETMASK=255.255.255.0
[root@lvs02 network-scripts]# vim ifcfg-ens33
IPADDR=192.168.158.20
NETMASK=255.255.255.0
GATEWAY=192.168.158.2
改為主機模式

systemctl restart network
#重啟網卡,查看虛擬地址是否存在

5.4:配置DR模式
兩臺lvs都要配置
cd /etc/init.d/
vim dr.sh
//腳本內容:
#!/bin/bash
GW=192.168.158.2
VIP=192.168.158.100
RIP1=192.168.158.30
RIP2=192.168.158.40
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting ---- ------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm stoped----------------------"
exit 1
else
echo "ipvsamd Runing------------[ok]"
fi
;;
*)
echo "Usage: $0 {start I stop I status }"
exit 1
esac
exit 0
//添加權限,注意:先不要執行腳本!!!
chmod +x dr.sh
兩臺LVS服務器都重各項配置
//開啟dr服務配置
[root@lvs01 network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
//關倍訓關閉防護功能
[root@lvs01 network-scripts]# setenforce 0
[root@lvs01 network-scripts]# systemctl restart network
[root@lvs01 network-scripts]# systemctl stop
[root@lvs02 network-scripts]# systemctl restart network
5.5:配置兩臺WEB服務器節點
- 1、安裝httpd包,關閉防火墻
yum -y install httpd
systemctl stop firewalld
setenforce 0
- 2、添加網頁內容,用于驗證
cd /var/www/html/
echo "<h1>this is web1</h1>" > index.html
//另一臺web服務器輸入內容:test02區分一下,
cd /var/www/html/
echo "<h1>this is web2</h1>" > index.html
- 3、設定回環地址
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
#內容全部洗掉,添加以下內容:
DEVICE=lo:0
IPADDR=192.168.158.100
NETMASK=255.255.255.0
ONBOOT=yes
- 4、撰寫web服務腳本
cd /etc/init.d/
vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
chmod +x web.sh
- 把模式改為主機模式,修改IP地址,重啟網路
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33
//修改為static模式,并添加以下內容:
IPADDR=192.168.158.30 #另一臺 web2 的IP地址為192.168.158.40
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@shuai network-scripts]# systemctl stop firewalld.service
[root@shuai network-scripts]# setenforce 0
[root@shuai network-scripts]# service web.sh start
[root@shuai network-scripts]# service wed.sh start
RealServer Start OK


5.6:服務器部署keepdalived服務器
5.61:keeppalived.conf是主組態檔
指定全域引數
LVS1
#洗掉所有
! Configuration File for keepalived
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER #備用服務器LVS2改為BACKUP
interface ens33
virtual_router_id 10
priority 100 #優先級,備用LVS2優先級小于100,設為90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.158.100
}
}
virtual_server 192.168.158.100 80 { #虛擬地址和埠
delay_loop 6
lb_algo rr
lb_kind DR #LVS的DR模式
#persistence_timeout 50 #一定時間內使來自于同一個Client的所有TCP請求被負載到同一個RealServer上
protocol TCP
real_server 192.168.158.30 80 { #web1服務器節點
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.158.40 80 { #web2的服務器節點
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
LVS2
! Configuration File for keepalived
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP #備用服務器LVS2改為BACKUP
interface ens33
virtual_router_id 10
priority 90 #優先級,備用LVS2設為90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.158.100
}
}
virtual_server 192.168.158.100 80 { #虛擬地址和埠
delay_loop 6
lb_algo rr
lb_kind DR #LVS的DR模式
#persistence_timeout 50 #一定時間內使來自于同一個Client的所有TCP請求被負載到同一個RealServer上
protocol TCP
real_server 192.168.158.30 80 { #web1服務器節點
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.158.40 80 { #web2的服務器節點
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 啟動服務,把組態檔傳給LVS2服務器
systemctl start keepalived
5.7:驗證
修改win10的IP地址,并改為主機模式,

重啟VMnet1或指定到同一網段

5.8:備用調度器頂替
在瀏覽器輸入192.168.158.100,等待一段時間重繪界面


keepalived工具可以自動故障切換,把LVS1服務器服務關閉,模擬故障,如果客戶端依舊可以和虛擬 IP地址 互通,且能夠正常訪問網站的話,就說明 LVS2 就代替 LVS1 作業了,防止單點故障的效果實作了,

再次訪問虛擬地址


5.9、總結
我們的LVS-DR負載均衡和keepalived雙機熱備已經搭建成功,
雙機熱備的故障切換是由虛擬IP地址的漂移來實作,適用于各種應用服務器,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205899.html
標籤:AI
上一篇:FTP服務原理及配置
下一篇:在LIUNX下的檔案定時備份操作
