Linux-Lvs的DR模式實(shí)現(xiàn)后端真實(shí)服務(wù)器的負(fù)載均衡
DR模式也就是用直接路由技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。它的連接調(diào)度和管理與NAT模式一樣,但它的報(bào)文轉(zhuǎn)發(fā)方法不同,DR模式通過改寫請(qǐng)求報(bào)文的 MAC地址,將請(qǐng)求發(fā)送到Real Server,而Real Server將響應(yīng)直接返回給 客戶。這種方式是負(fù)載調(diào)度機(jī)制中性能最高最好的
keepalived+lvs實(shí)現(xiàn)實(shí)現(xiàn)負(fù)載均衡及高可用功能
如果單臺(tái)LVS發(fā)生突發(fā)情況,例如宕機(jī)、發(fā)生不可恢復(fù)現(xiàn)象,會(huì)導(dǎo)致用戶無 法訪問后端所有的應(yīng)用程序。避免這種問題可以準(zhǔn)備一臺(tái)臺(tái)備用的LVS,主 LVS 宕機(jī),LVS VIP自動(dòng)切換到從,繼續(xù)提供服務(wù)??梢曰?LVS+Keepalived實(shí)現(xiàn)負(fù)載均衡及高可用功能,滿足網(wǎng)站7x24小時(shí)穩(wěn)定高效 的運(yùn)行。
下面我們直接操作:(實(shí)驗(yàn)是基于關(guān)閉selinux和firewalld的)
安裝:
yum install ipvsadm -y
配置要點(diǎn):
調(diào)度器的VIP,DIP和后端真實(shí)服務(wù)器IP必須配置在同一網(wǎng)段,都使用僅 主機(jī)模式;
客戶端的IP與路由器外網(wǎng)IP保持一個(gè)網(wǎng)段,且客戶端的網(wǎng)關(guān)設(shè)置為路由 器的外網(wǎng)地址;
后端真實(shí)服務(wù)器網(wǎng)關(guān)設(shè)置為路由器的內(nèi)網(wǎng)地址;
路由器開啟數(shù)據(jù)包的轉(zhuǎn)發(fā);
后端真實(shí)服務(wù)器要抑制VIP的arp廣播;
RS服務(wù)器和LVS服務(wù)器的VIP以子接口方式配置;
記住配置網(wǎng)卡后,都需要重啟網(wǎng)卡哦(systemctl restart network)
環(huán)境:

nginx:(vip綁定在回環(huán)的網(wǎng)卡上)
RIP:192.168.1.103? VIP:192.168.1.200/32
RIP:192.168.1.104? VIP:192.168.1.200/32
lvs:(VIP以子接口方式配置)
DIP:192.168.1.102? VIP:192.168.1.200
RS:
#服務(wù)器要抑制VIP的arp廣播:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#RIP默認(rèn)網(wǎng)關(guān)指向192.168.1.105——VIp加到回環(huán)地址里面的


LVS:
#VIP和DIP的默認(rèn)網(wǎng)關(guān)都指向192.168.1.105

#配置LVS:
ipvsadm -A -t 192.168.1.200:80 # 工作模式如果不指定,默認(rèn)是DR模式,如需指定使用-g
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.103
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.104

#添加IP_VS模塊——lvs的IP負(fù)載均衡技術(shù)是通過IP_VS模塊來實(shí)現(xiàn)的
modprobe ip_vs
路由器:
#一個(gè)ip僅主機(jī),一個(gè)ip橋接。

#開啟數(shù)據(jù)轉(zhuǎn)發(fā):
臨時(shí):
echo 1 >/proc/sys/net/ipv4/ip_forward
永久:
vim /etc/sysctl.conf——追加
net.ipv4.ip_forward = 1
system -p——查看
客戶機(jī)測試:——成功

keepalived+lvs實(shí)現(xiàn)實(shí)現(xiàn)負(fù)載均衡及高可用功能
這里我們就在Linux-Lvs的DR模式實(shí)現(xiàn)后端真實(shí)服務(wù)器的負(fù)載均衡繼續(xù)做實(shí)驗(yàn)
我們先清空LVS集群服務(wù)
ipvsadm -C

master端:
安裝keepaalived:
yum install keepalived -y
修改配置文件:
! Configuration File for keepalived
global_defs {
? router_id node1
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 51
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.1.200/24 #指定群集vip地址
? ? }
}
virtual_server 192.168.1.200 80 {
? ? delay_loop 6
? ? lb_algo rr #指定調(diào)度算法,輪詢(rr)
? ? lb_kind DR #指定群集工作模式,直接路由(DR)
? ? persistence_timeout 0 #回話保持時(shí)間
? ? protocol TCP #應(yīng)用服務(wù)采用的是 TCP協(xié)議
? ? sorry_server 192.168.1.200 80 #當(dāng)配置在lvs上的rs都無法訪問到時(shí),就需要有一臺(tái)備用的服務(wù)器來提供報(bào)錯(cuò)頁面
? ? real_server 192.168.1.103 80 {
? ? ? ? weight 1 #節(jié)點(diǎn)的權(quán)重
? ? ? ? HTTP_GET {
? ? ? ? ? ? url {
? ? ? ? ? ? ? path /
? ? ? ? ? ? ? status_code 200 #通過返回的狀態(tài)碼判斷服務(wù)是否存活
? ? ? ? ? ? # digest ff20ad2481f97b1754ef3e12ecd3a9cc #通過配置文件的哈希值判斷 獲取哈希的方法:genhash -s 192.168.1.104 -p 80 -u /index.html
? ? ? ? ? ? }
? ? ? ? ? ? connect_timeout 3 #檢測時(shí)長
? ? ? ? ? ? nb_get_retry 3 #添加重試次數(shù)
? ? ? ? ? ? delay_before_retry 3 #添加重試間隔
? ? ? ? }
? ? }
? ? real_server 192.168.1.104 80 { #添加第二個(gè) Web節(jié)點(diǎn)的地址、端口
? ? ? ? weight 1
? ? ? ? HTTP_GET {
? ? ? ? ? ? url {
? ? ? ? ? ? ? path /
? ? ? ? ? ? ? status_code 200
? ? ? ? ? ? # digest ff20ad2481f97b1754ef3e12ecd3a9cc
? ? ? ? ? ? }
? ? ? ? ? ? connect_timeout 3
? ? ? ? ? ? nb_get_retry 3
? ? ? ? ? ? delay_before_retry 3
? ? ? ? }
? ? }
}
啟動(dòng)keepalived
systemctl start keepalived——看到集群由keepalived啟動(dòng)

backup端:
和lvs配置一樣在backup服務(wù)器上也同樣配置一遍。
安裝keepalived
修改配置文件:
! Configuration File for keepalived
global_defs {
?? router_id node1
}
vrrp_instance VI_1 {
? ? state BACKUP
? ? interface ens33
? ? virtual_router_id 51
? ? priority 90
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.1.200/24 #指定群集vip地址
? ? }
}
virtual_server 192.168.1.200 80 {
? ? delay_loop 6
? ? lb_algo rr #指定調(diào)度算法,輪詢(rr)
? ? lb_kind DR #指定群集工作模式,直接路由(DR)
? ? persistence_timeout 0 #回話保持時(shí)間
? ? protocol TCP #應(yīng)用服務(wù)采用的是 TCP協(xié)議
? ? sorry_server 192.168.1.200 80 #當(dāng)配置在lvs上的rs都無法訪問到時(shí),就需要有一臺(tái)備用的服務(wù)器來提供報(bào)錯(cuò)頁面
? ? real_server 192.168.1.103 80 {
? ? ? ? weight 1 #節(jié)點(diǎn)的權(quán)重
? ? ? ? HTTP_GET {
? ? ? ? ? ? url {
? ? ? ? ? ? ? path /
? ? ? ? ? ? ? status_code 200 #通過返回的狀態(tài)碼判斷服務(wù)是否存活
? ? ? ? ? ?? # digest ff20ad2481f97b1754ef3e12ecd3a9cc #通過配置文件的哈希值判斷 獲取哈希的方法:genhash -s 192.168.1.104 -p 80 -u /index.html
? ? ? ? ? ? }
? ? ? ? ? ? connect_timeout 3 #檢測時(shí)長
? ? ? ? ? ? nb_get_retry 3 #添加重試次數(shù)
? ? ? ? ? ? delay_before_retry 3 #添加重試間隔
? ? ? ? }
? ? }
? ? real_server 192.168.1.104 80 { #添加第二個(gè) Web節(jié)點(diǎn)的地址、端口
? ? ? ? weight 1
? ? ? ? HTTP_GET {
? ? ? ? ? ? url {
? ? ? ? ? ? ? path /
? ? ? ? ? ? ? status_code 200
? ? ? ? ? ?? # digest ff20ad2481f97b1754ef3e12ecd3a9cc
? ? ? ? ? ? }
? ? ? ? ? ? connect_timeout 3
? ? ? ? ? ? nb_get_retry 3
? ? ? ? ? ? delay_before_retry 3
? ? ? ? }
? ? }
}
啟動(dòng)keepalived
systemctl start keepalived
測試:
master端關(guān)閉keepalived
systemctl stop keepalived

可以看到vip地址發(fā)生了飄移。(幾乎一秒不到)

客戶端測試:(任然可以正常訪問,幾乎不受任何影響)
