文章目錄

  • 一、LVS-DR模式負載均衡羣集
  • 1、LVS DR模式工作原理(Direct Routing)
  • 1.1 數據包流向分析
  • 1.2 DR模式特點
  • 2、DR模式部署步驟
  • 2.1 環境規劃
  • 2.1.1 服務器規劃
  • 2.1.2 環境架構
  • 2.2 配置負載調度器(Director Server)
  • 2.2.1 系統配置
  • 2.2.2 配置虛擬IP
  • 2.2.3 調整內核參數
  • 2.2.4 配置LVS服務及調度
  • 2.3 配置節點服務器(Real Server)
  • 2.3.1 配置VIP到lo接口
  • 2.3.2 ARP參數調整(避免MAC衝突)
  • 2.3.3 安裝Web服務
  • 2.4 測試LVS羣集
  • 3、LVS面試知識點整理
  • 3.1 LVS三種工作模式
  • 3.2 LVS調度算法
  • 3.2.1 固定調度算法
  • 3.2.2 動態調度算法
  • 3.3 Nginx vs LVS vs HAProxy區別
  • 3.4 一句話總結
  • 二、LVS+Keepalived羣集
  • 1、概念與原理
  • 1.1 Keepalived
  • 1.2 VRRP工作原理
  • 1.3 Keepalived主要模塊
  • 2、腦裂問題與防護
  • 2.1 腦裂(Split Brain)
  • 2.2 腦裂原因
  • 2.3 防護策略
  • 3、部署步驟
  • 3.1 環境準備
  • 3.2 安裝與配置LVS + Keepalived
  • 3.2.1 DR服務器操作
  • 3.2.2 配置Keepalived
  • 3.2.3 VIP配置
  • 3.2.4 啓動服務
  • 3.2.5 內核參數優化
  • 3.3 配置Web節點
  • 3.4 測試
  • 3.5 小結與注意事項

一、LVS-DR模式負載均衡羣集

1、LVS DR模式工作原理(Direct Routing)

1.1 數據包流向分析

  1. 客户端向VIP(虛擬IP)發送請求,數據包到達Director Server內核空間。
  2. Director判斷目標IP為VIP,修改數據包的目標MAC為Real Server MAC、源MAC為自身MAC,IP地址保持不變後發送給Real Server。
  3. Real Server通過lo接口配置的VIP接收報文並處理請求,響應報文源IP為VIP、目標IP為客户端(CIP),直接發送給客户端。
  4. 客户端接收響應,報文不經過Director Server。

1.2 DR模式特點

  • Director Server與Real Server必須在同一物理網絡。
  • Real Server可使用私有或公網地址。
  • Director僅作為請求入口,不作為網關。
  • 所有請求經過Director,響應直接由Real Server發送。
  • Real Server的網關不能指向Director Server。
  • Real Server的lo接口需配置VIP。

2、DR模式部署步驟

2.1 環境規劃

2.1.1 服務器規劃
  • DR服務器:192.168.10.23
  • Web服務器1:192.168.10.16
  • Web服務器2:192.168.10.17
  • VIP:192.168.10.180
2.1.2 環境架構

DR模式LVS負載均衡羣集,客户端(192.168.10.200)通過外網路由器(網關192.168.10.1)訪問VIP(192.168.10.180),Director Server(192.168.10.23)轉發請求至兩台Real Server,響應直接由Real Server返回客户端。

2.2 配置負載調度器(Director Server)

2.2.1 系統配置
# 關閉防火牆
systemctl stop firewalld.service
# 關閉SELinux
setenforce 0
# 加載ip_vs模塊
modprobe ip_vs
# 安裝ipvsadm工具
yum -y install ipvsadm
2.2.2 配置虛擬IP
# 進入網絡腳本目錄
cd /etc/sysconfig/network-scripts/
# 複製網卡配置文件
cp ifcfg-ens33 ifcfg-ens33:0
# 編輯配置文件(內容如下)
vim ifcfg-ens33:0
# 激活虛擬網卡
ifup ens33:0
# 驗證配置
ifconfig ens33:0

ifcfg-ens33:0 配置內容

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.2.3 調整內核參數
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

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
2.2.4 配置LVS服務及調度
# 清空原有配置
ipvsadm -C
# 添加虛擬服務(VIP:80,輪詢調度)
ipvsadm -A -t 192.168.10.180:80 -s rr
# 添加Real Server節點(DR模式 -g)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
# 查看節點狀態(Route代表DR模式)
ipvsadm -ln

2.3 配置節點服務器(Real Server)

2.3.1 配置VIP到lo接口
# 進入網絡腳本目錄
cd /etc/sysconfig/network-scripts/
# 複製lo接口配置
cp ifcfg-lo ifcfg-lo:0
# 編輯配置文件(內容如下)
vim ifcfg-lo:0
# 激活接口
ifup lo:0
# 驗證配置
ifconfig lo:0
# 添加路由(綁定VIP到lo接口)
route add -host 192.168.10.180 dev lo:0

ifcfg-lo:0 配置內容

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.3.2 ARP參數調整(避免MAC衝突)
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

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
2.3.3 安裝Web服務
# 安裝httpd(兩台Real Server均執行)
yum -y install httpd
systemctl start httpd

# 192.168.10.16 服務器配置首頁
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html

# 192.168.10.17 服務器配置首頁
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html

2.4 測試LVS羣集

# 客户端執行(或直接瀏覽器訪問 http://192.168.10.180/)
curl http://192.168.10.180/
# 多次執行,應輪詢顯示不同節點頁面內容(延遲50秒刷新)

3、LVS面試知識點整理

3.1 LVS三種工作模式

模式

原理

優缺點

NAT(VS/NAT)

Director改變數據包目標IP並轉發,RS響應包回到Director再發客户端

優點:節點可任意OS;缺點:Director是瓶頸

DR(VS/DR)

Director改變目標MAC地址,RS直接響應客户端

優點:Director不處理響應;缺點:節點需與Director同網段

TUN(VS/TUN)

Director封裝IP包到隧道,RS解封直接響應客户端

優點:Director不處理響應;缺點:節點需支持IP隧道

3.2 LVS調度算法

3.2.1 固定調度算法
  • rr:輪詢,每個RS均攤請求
  • wrr:加權輪詢,權重高的分配更多請求
  • dh:目的地址哈希分配
  • sh:源地址哈希分配
3.2.2 動態調度算法
  • lc:最少連接數
  • wlc:加權最少連接
  • lblc:基於地址的最少連接

3.3 Nginx vs LVS vs HAProxy區別

特性

Nginx

LVS(Linux Virtual Server)

HAProxy

定位

Web服務器+反向代理+負載均衡

內核級四層負載均衡

專業負載均衡器(四層+七層)

工作層級

四層(TCP)+七層(HTTP/HTTPS)

四層(TCP/UDP,傳輸層)

四層+七層

性能

高(軟件級,單機可達十萬級併發)

極高(內核態,百萬級併發)

高(接近Nginx,但更專注負載均衡)

功能特點

靜態資源服務、反向代理、緩存、支持HTTP/HTTPS負載均衡

高性能轉發、調度算法豐富、內核態轉發幾乎無性能損耗

專注於負載均衡、健康檢查更強大、支持會話保持、SSL卸載等

健康檢查

簡單(TCP/HTTP)

依賴Keepalived或其他工具

強大(多協議、多方式)

配置複雜度

簡單

較複雜(需ipvsadm/keepalived配合)

中等(配置文件靈活)

適用場景

Web代理、動靜分離、中小型集羣

超大規模集羣、核心四層調度

高可用集羣、對健康檢查要求高的業務

優缺點

優點:功能多,易上手;缺點:七層性能不如LVS/HAProxy

優點:性能最強,穩定;缺點:只能四層,配置偏複雜

優點:專業負載均衡,健康檢查強;缺點:不自帶Web服務

3.4 一句話總結

  • Nginx:輕量、全能,適合Web服務和中小型負載均衡。
  • LVS:極致性能,適合四層超大規模集羣,但功能單一。
  • HAProxy:專業負載均衡器,四層+七層均可,健康檢查能力最強。

二、LVS+Keepalived羣集

1、概念與原理

1.1 Keepalived

  • 基於VRRP協議實現高可用(HA),初衷為LVS負載均衡提供高可用方案,後支持Nginx、MySQL等其他服務。
  • 核心功能:LVS集羣管理、節點健康檢查(Health Check)、故障自動切換(Failover)、高可用VIP(虛擬IP)接管。

1.2 VRRP工作原理

  • MASTER節點向BACKUP節點發送心跳(通告)。
  • BACKUP節點收不到心跳時,接管VIP。
  • MASTER恢復時,可搶回VIP(搶佔模式)或不搶回(非搶佔模式)。
  • 默認多播地址:224.0.0.18,優先級決定MASTER節點(數值越大越優先)。

1.3 Keepalived主要模塊

模塊

功能

core

核心進程、配置文件加載解析

vrrp

VRRP協議實現,高可用

check

健康檢查,支持TCP/HTTP/腳本檢查

2、腦裂問題與防護

2.1 腦裂(Split Brain)

  • 定義:兩個節點失去心跳連接,均認為對方掛掉。
  • 後果:共享資源衝突、數據損壞(如數據庫)。

2.2 腦裂原因

  1. 心跳線故障(斷線、老化)。
  2. 網卡/驅動故障。
  3. 心跳網絡設備故障(網卡及交換機)。
  4. 仲裁機器異常。
  5. 防火牆阻擋VRRP心跳消息。
  6. 配置不一致(virtual_router_id、優先級、實例名)。
  7. vrrp實例名字不一致、優先級一致。

2.3 防護策略

  • 雙心跳線冗餘:減少心跳線故障概率。
  • 磁盤鎖(鎖定共享資源):避免共享資源爭搶,可採用“智能”鎖機制。
  • 仲裁機制(Ping參考IP):通過ping網關等參考IP判斷自身網絡狀態,決定是否競爭VIP。
  • 腳本監控報警:及時發現並告警腦裂問題。

3、部署步驟

3.1 環境準備

  • 主DR(MASTER):192.168.10.80
  • 備DR(BACKUP):192.168.10.23
  • VIP:192.168.10.180
  • Web節點:192.168.10.16、192.168.10.17
  • 客户端:192.168.10.100

3.2 安裝與配置LVS + Keepalived

3.2.1 DR服務器操作
# 關閉防火牆
systemctl stop firewalld
# 關閉SELinux
setenforce 0
# 安裝工具
yum -y install ipvsadm keepalived
# 加載ip_vs模塊
modprobe ip_vs
# 檢查模塊
cat /proc/net/ip_vs
3.2.2 配置Keepalived
# 編輯配置文件
vim /etc/keepalived/keepalived.conf

MASTER節點 keepalived.conf 配置

global_defs {
    router_id LVS_01  # 路由ID,BACKUP節點設為LVS_02
    smtp_server 127.0.0.1
}

vrrp_instance VI_1 {
    state MASTER  # BACKUP節點設為BACKUP
    interface ens33  # 綁定網卡
    virtual_router_id 10  # 虛擬路由ID,主備需一致
    priority 100  # 優先級,BACKUP設為90
    advert_int 1  # 心跳間隔1秒
    authentication {
        auth_type PASS
        auth_pass abc123  # 認證密碼,主備需一致
    }
    virtual_ipaddress {
        192.168.10.180  # VIP地址
    }
}

virtual_server 192.168.10.180 80 {
    delay_loop 6  # 健康檢查間隔
    lb_algo rr  # 調度算法(輪詢)
    lb_kind DR  # 負載均衡模式(DR)
    persistence_timeout 50  # 會話保持時間
    protocol TCP  # 協議

    real_server 192.168.10.16 80 {
        weight 1  # 權重
        TCP_CHECK {
            connect_port 80  # 檢查端口
            connect_timeout 3  # 超時時間
            nb_get_retry 3  # 重試次數
            delay_before_retry 3  # 重試間隔
        }
    }

    real_server 192.168.10.17 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
3.2.3 VIP配置
# 編輯虛擬網卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 重啓網絡
systemctl restart network
# 激活網卡
ifup ens33:0

ifcfg-ens33:0 配置內容

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
3.2.4 啓動服務
# 啓動keepalived
systemctl start keepalived
# 查看VIP(確認是否綁定)
ip addr
# 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm
# 啓動ipvsadm
systemctl start ipvsadm
# 查看LVS配置
ipvsadm -ln
3.2.5 內核參數優化
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

sysctl.conf 添加參數

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

3.3 配置Web節點

# 關閉防火牆
systemctl stop firewalld
# 關閉SELinux
setenforce 0
# 安裝httpd
yum -y install httpd
# 啓動httpd
systemctl start httpd

# 192.168.10.16 配置首頁
echo 'this is kgc web!' > /var/www/html/index.html
# 192.168.10.17 配置首頁
echo 'this is benet web!' > /var/www/html/index.html

# 配置lo:0接口(同DR模式Real Server配置)
# 配置ARP參數(同前)

3.4 測試

# 1. 客户端訪問VIP,驗證服務
curl http://192.168.10.180/

# 2. 停掉MASTER的Keepalived,觀察BACKUP是否接管VIP
systemctl stop keepalived  # MASTER節點執行
ip addr  # BACKUP節點執行,查看VIP是否出現

# 3. 啓動MASTER的Keepalived,觀察VIP是否迴歸
systemctl start keepalived  # MASTER節點執行
ip addr  # MASTER節點執行,查看VIP是否迴歸

3.5 小結與注意事項

項目

注意點

VIP

DR節點配置VIP網卡ens33:0,Web節點配置lo:0

搶佔模式

MASTER恢復會搶回VIP,非搶佔模式需配置nopreempt

健康檢查

Keepalived支持TCP/HTTP檢查,可防止故障節點被調度

防火牆

Firewalld需關閉,確保VRRP心跳消息暢通

腦裂防護

採用雙心跳線、磁盤鎖、仲裁IP、腳本監控等策略