LVS+Keepalive 實現負載均衡高可用叢集

Sun__s發表於2021-01-03

一、LVS 介紹

        目前LVS已經被整合到Linux核心模組中。LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器,該專案在Linux核心中實現了基於IP的資料請求負載均衡排程方案,終端網際網路使用者從外部訪問公司的外部負載均衡伺服器,終端使用者的Web請求會傳送給LVS排程器,排程器根據自己預設的演算法決定將該請求傳送給後端的某臺Web伺服器,比如,輪詢演算法可以將外部的請求平均分發給後端的所有伺服器,終端使用者訪問LVS排程器雖然會被轉發到後端真實的伺服器,但如果真實伺服器連線的是相同的儲存,提供的服務也是相同的服務,終端使用者不管是訪問哪臺真實伺服器,得到的服務內容都是一樣的,整個叢集對使用者而言都是透明的。最後根據LVS工作模式的不同,真實伺服器會選擇不同的方式將使用者需要的資料傳送到終端使用者,LVS工作模式分為NAT模式、TUN模式、以及DR模式。

二、LVS叢集搭建

(1)環境搭建:client --> DR -->RS --client

LVS無需安裝

安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive

ipvsadm是通過命令列管理,而keepalive讀取配置檔案管理

主機名主機IP備註
server1172.25.1.1

1.這裡使用的是redhat7.6系統

2.防火牆和selinux都關閉

3.server2、3的作為RS機子http訪問結果為主機名

4.server1 作為DR機 下載ipvsam

5.server1 新增虛擬ip地址(VIP)

172.25.1.100

server2172.25.1.2
server3172.25.1.3
server4172.25.1.4

 (2)安裝ipvsam管理工具

yum install ipvsadm -y

 (3) 在server1 eth0網路卡繫結VIP地址(高可用)

ip addr add 172.25.1.100/24 dev eth0

(4) 新增虛擬服務以及將其關聯到真實伺服器上去

ipvsadm -A -t 172.25.1.100:80 -s rr       # 新增虛擬服務
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.2:80 -g    #將虛擬服務關聯到真實服務上
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g

#LVS預設無80埠,需另外新增新的虛擬IP記錄

(5) 檢視配置結果

(6)web伺服器配置

給兩臺伺服器上的網路卡繫結VIP地址

[root@server2 ~]# ip addr add 172.25.1.100/32 dev eth0
[root@server3 ~]# ip addr add 172.25.1.100/32 dev eth0

抑制ARP響應(noarp)

作用使得

yum install arptables.x86_64 -y
[root@server2 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server2 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2


[root@server3 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server3 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.3

檢視策略 

實驗效果:實現負載均衡

arp解析檢視 

arp詳解
01.ARP協議,全稱"Address Resolut ion Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的實體地址(MAC地址)

 ARP協議要求通訊的主機雙方必須在同一個物理網段(即區域網環境)!

02.為了提高IP轉換MAC的效率,系統會將解析結果儲存下來,這個結果叫做ARP快取

三、LVS叢集的工作模式

DR直接路由模式

client --> DR -->RS --client

DR模式是通過改寫請求報文的目標MAC地址,將請求傳送給真實伺服器的,而真實伺服器響應後的處理結果直接返回給客戶端使用者。

DR技術可極大地提高叢集系統的伸縮性,但要求排程器與真實伺服器RS都有一塊物理網路卡連在同一物理網段上,即必須在同一區域網(VLAN)環境。

NAT模式

client --> vs --> rs --> vs --> client

通過網路地址轉換,排程器重寫請求報文的目標地址,根據預設的排程演算法,將請求分派給後端的真實伺服器,真實伺服器的響應報文處理之後,返回時必須通過排程器,經過排程器時報文的源地址被重寫,再返回給客戶,完成整個副在排程過程。

TUN 工作模式(隧道工作模式)

客戶請求包封裝在一個IP tunnel裡面,然後傳送給RS節點伺服器,節點伺服器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址傳送給客戶不用經過LB伺服器
不足:

1、RS配置複雜(IPIP模組)
2、RS上繫結VIP,風險比較大

FULLNAT(系統不自帶)

LVS的DR和NAT模式要求RS和LVS在同一VLAN 中,導致部署成本過高,TUNNEL模式雖然可以跨vlan,但RealServer 上需要部署ipip隧道模組等,網路拓撲上需要連通外網,教為複雜,不易運維,

為解決上述問題,開發出FULLNAT,該模式和NAT模式的區別是:資料包進入時,除了做DNAT,還做SNAT(使用者ip-->內網ip),從而實現lvs-真實伺服器之間可以跨vlan通訊,真實伺服器需要連線內網。類似於地鐵站多個閘機。

四、Keepalive+LVS實現

Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網路服務的高可用功能。

(1)在server1和server4上安裝Keepalive 

[root@server1 ~]# yum install keepalived -y
[root@server4 ~]# yum install   ipvsadm keepalived -y

(2)編寫keepalived.conf配置檔案

server1

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalive@localhost
   smtp_server 127.0.0.1        
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.1.100
    }
}

virtual_server 172.25.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.1.2 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
   real_server 172.25.1.3 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

server4

(3)開啟keepalived服務

systemctl start keepalived.service

檢視vip

檢視LVS狀態

 keepalive健康檢查功能

delay_loop 隔多長時間做一次健康檢測,單位為秒 

connect_timeout  連線超時時間,單位為秒

nb_get_retry  檢測失敗後的重試次數,如果達到重試次數仍然失敗,將後端從伺服器池中移除。

delay_before_retry  失敗重試的間隔時間,單位為秒

測試:

注意:因為虛擬的ip重啟之後就會失效,故須加入開機啟動項rc.local檔案並賦予其可執行許可權

 

 

 

 

相關文章