<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于LVS+Keepalived實現高可用負載均衡

馬哥Linux運維 ? 來源:cnblogs ? 2024-04-09 12:30 ? 次閱讀

前言

在業務量達到一定量的時候,往往單機的服務是會出現瓶頸的。此時最常見的方式就是通過負載均衡來進行橫向擴展。其中我們最常用的軟件就是 Nginx。通過其反向代理的能力能夠輕松實現負載均衡,當有服務出現異常,也能夠自動剔除。但是負載均衡服務自身也可能出現故障,因此需要引入其他的軟件來實現負載均衡服務的高可用。本文就介紹了一種基于 LVS+Keepalived 的方式,來實現高可用 Web 集群。

LVS 與 Keepalived

LVS 是一種預裝在 Linux 系統中,基于四層、具有強大性能的反向代理服務器。ipvsadm 是 LVS 的命令行管理工具。

LVS 特點是:

首先它是基于 4 層的網絡協議的,抗負載能力強,對于服務器的硬件要求除了網卡外,其他沒有太多要求;

配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,大大減少了人為出錯的幾率;

應用范圍比較廣,不僅僅對 web 服務做負載均衡,還可以對其他應用(mysql)做負載均衡;

LVS 架構中存在一個虛擬 IP 的概念,需要向 IDC 多申請一個 IP 來做虛擬 IP。

Keepalived 是一個基于 VRRP 協議來實現的服務高可用方案,可以利用其來避免 IP 單點故障,一般與其它負載均衡技術(如 LVS 、HAProxy 、Nginx)一起工作來達到集群的高可用。Keepalived 是 LVS 的擴展項目, 因此它們之間具備良好的兼容性,可直接通過 Keepalived 的配置文件來配置 LVS。

LVS 的工作原理可見參考文獻

關于 LVS 和 Keepalived 詳細的結構和原理,以及 LVS 和我們常用的 LB 軟件 Nginx 的異同,可以閱讀末尾提供的參考文獻。接下來將介紹如何部署一個高可用的負載均衡集群。

相關術語

LB (Load Balancer 負載均衡)

HA (High Available 高可用)

Failover (失敗切換)

Cluster (集群)

LVS (Linux Virtual Server Linux 虛擬服務器)

DS (Director Server),指的是前端負載均衡器節點

RS (Real Server),后端真實的工作服務器

VIP (Virtual IP),虛擬的 IP 地址,向外部直接面向用戶請求,作為用戶請求的目標的 IP 地址

DIP (Director IP),主要用于和內部主機通訊的 IP 地址

RIP (Real Server IP),后端服務器的 IP 地址

CIP (Client IP),訪問客戶端的 IP 地址

測試環境

軟件環境:CentOS7、Keepalived1.3.5、ipvsadm1.27

DS1(MASTER):172.17.13.120

DS1(BACKUP):172.17.13.123

RS1:172.17.13.142:80 Nginx

RS1:172.17.13.173:80 Nginx

VIP:172.17.13.252

                              |
             +----------------+-----------------+
             |                                  |
172.17.13.120|----     VIP:172.17.13.252    ----|172.17.13.123
     +-------+--------+                +--------+-------+
     |     DS1       |                |       DS2      |
     | LVS+Keepalived |                | LVS+Keepalived |
     +-------+--------+                +--------+-------+
             |                |
             +----------------+-----------------+
                              |
  +------------+              |               +------------+
  |     RS1    |172.17.13.142 |  172.17.13.173|     RS2    |
  | Web Server +--------------+---------------+ Web Server |
  +------------+                              +------------+

集群的架構圖如上圖所示。DS1、DS2 為兩個 LB 節點,RS1、RS2 為兩個真實的服務節點,通過一個虛擬的 IP 地址對外提供服務。

最終我們要達到的目標為:

Client 通過 VIP 訪問服務能夠將請求根據配置的規則進行分發(LB)

當 MATSER 的 LB 節點故障時,自動切換到 BACKUP 的 LB 節點上,保證服務正常訪問;MASTER 恢復后,再次作為主 LB 負載節點

當某個 RS 節點故障時,自動剔除該節點;恢復后,再次加入集群

詳細配置流程

安裝相關軟件

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

配置 Keepalived

DS1(MASTER) 節點

[root@localhost ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER            # 兩個 DS,一個為 MASTER 一個為 BACKUP
    interface enp1s0        # 當前 IP 對應的網絡接口,通過 ifconfig 查詢
    virtual_router_id 62    # 虛擬路由 ID(0-255),在一個 VRRP 實例中主備服務器 ID 必須一樣
    priority 200            # 優先級值設定:MASTER 要比 BACKUP 的值大
    advert_int 1            # 通告時間間隔:單位秒,主備要一致
    authentication {        # 認證機制,主從節點保持一致即可
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.17.13.252       # VIP,可配置多個
    }
}

# LB 配置
virtual_server 172.17.13.252 80  {
    delay_loop 3                    # 設置健康狀態檢查時間
    lb_algo rr                      # 調度算法,這里用了 rr 輪詢算法
    lb_kind DR                      # 這里測試用了 Direct Route 模式
    persistence_timeout 50          # 持久連接超時時間
    protocol TCP
real_server 172.17.13.173 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3      # 舊版本為 nb_get_retry 
            delay_before_retry 3
            connect_port 80
        }
    }
 real_server 172.17.13.142 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

DS2(BACKUP) 節點

復制之前的配置文件,修改vrrp_instance VI_1中的state為BACKUP。

配置完成后,分別重啟 Keepalived 服務。

[root@localhost ~]# systemctl restart keepalived

配置 RS

RS 配置主要分兩部分,一部分是 web 服務,另一部分是網絡轉發配置。

web 服務部署不多展開了,根據實際情況來,可以是 Tomcat 也可以是 Nginx,只要能通過 ip:port 能訪問到即可。

在網絡轉發配置上,LVS 支持多種通信模型(NAT、DR、TUN),本文采用 DR 模型來進行通信,大致的流程如下圖所示。請求數據包從到達 LB 后,LVS 會將這個數據包的 MAC 地址改成輪詢到的 RS 的 MAC 地址,并丟給交換機;RS 收到后進行處理并從網卡的 lo 端口發送出去,響應報文到達交換機后直接轉發給 Client。

f76f4746-f58e-11ee-a297-92fbcf53809c.png

因此,我們需要在 RS 的網卡上配置 lo 為 VIP。配置腳本如下

#!/bin/bash 
SNS_VIP=172.17.13.252
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_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 $SNS_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 Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

本地創建完后,并執行。

[root@localhost ~]# chmod a+x lvs-web.sh
[root@localhost ~]# ./lvs-web.sh start

配置完成后,通過 VIP 就可以訪問到 RS 上的服務了。

HA 測試

配置完雙機熱備后,我們就可以測試下,節點發生故障后以及 LB 切換失敗后,能否保證服務的 HA。

在 LB 的主節點上輸入ip a,可以看到 VIP 目前已經正確配置在網卡上。

f7857fd4-f58e-11ee-a297-92fbcf53809c.png

輸入watch ipvsadm -Ln --stats可實時看到負載均衡的結果,正常。

f798fd16-f58e-11ee-a297-92fbcf53809c.png

接下面我們試著訪問一下 VIP。

[root@localhost ~]# while true ; do curl 172.17.13.252; sleep 1;done

看到服務可正常輪詢。

f7af6baa-f58e-11ee-a297-92fbcf53809c.png

此時手動停止一個 RS,再次訪問 VIP,LVS 會自動剔除無法訪問的服務,重啟后,服務會被自動添加。

f7bd2542-f58e-11ee-a297-92fbcf53809c.png

f7d019ea-f58e-11ee-a297-92fbcf53809c.png

如果此時,手動停止 MASTER 上的 Keepalived,模擬 LB MASTER 節點掛了,VIP 會自動飄到 BACKUP LB 上。

f7e910b2-f58e-11ee-a297-92fbcf53809c.png

f8037664-f58e-11ee-a297-92fbcf53809c.png

此時,如果重啟 MASTER 后,VIP 又會飄回去。MASTER 的優先級高于 BACKUP,從而實現 HA。

f819eb9c-f58e-11ee-a297-92fbcf53809c.png

總結

本文介紹了使用 LVS+Keepalived 來實現高可用負載均衡,這能使得我們的服務能夠更加的穩定。Keepalived 默認是運行在 LVS 之上的,有較好的兼容性,當然我們也可以使用戶 Nginx 作為 LB 的軟件,可根據業務和兩者的異同進行選擇。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1241

    瀏覽量

    68633
  • 服務器
    +關注

    關注

    12

    文章

    8249

    瀏覽量

    82887
  • 網絡協議
    +關注

    關注

    3

    文章

    242

    瀏覽量

    21392
  • 數據包
    +關注

    關注

    0

    文章

    231

    瀏覽量

    24136
  • 負載均衡
    +關注

    關注

    0

    文章

    97

    瀏覽量

    12237

原文標題:你必須會的LVS高可用負載均衡方案

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    解析keepalived+nginx實現可用方案技術

    的位置,Nginx的高可用影響到整個系統的穩定性。如果nginx服務器宕機,后端web服務將無法提供服務,影響嚴重。所以如何保證Nginx 的穩定和高可用非常重要,接下來就來介紹Nginx + keepalived
    的頭像 發表于 09-30 15:52 ?3514次閱讀
    解析<b class='flag-5'>keepalived</b>+nginx<b class='flag-5'>實現</b>高<b class='flag-5'>可用</b>方案技術

    負載均衡器的誕生和工作機制

    今天我們來深度揭秘一下負載均衡LVS 的秘密,相信大家看了你管這破玩意兒叫負載均衡?這篇文章后,還是有不少疑問,比如
    的頭像 發表于 01-04 12:26 ?521次閱讀
    <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>器的誕生和工作機制

    基于KeepAlive的可用配置

    KeepAlived集群可用搭建
    發表于 06-11 16:36

    PHP開發中,如何處理負載、并發?

    負載均衡轉發,可以對MySQL讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,大家可
    發表于 07-03 10:33

    nginx實現負載均衡

    nginx實現負載均衡
    發表于 05-04 13:42

    16nginx+keepalived +zuul如何實現可用負載均衡

    學習筆記微服務-16 nginx+keepalived +zuul 實現可用負載均衡
    發表于 05-22 10:16

    Keepalived+Haproxy如何實現可用負載綜合實驗

    Keepalived+Haproxy實現可用負載綜合實驗
    發表于 06-02 16:53

    雙機熱備與負載均衡的設計與實現

    針對OpenFlow SDN系統中的策略管理模塊提出了一種新型的雙機熱備和負載均衡方案,采用了服務器集群的方式,通過Keepalived和Heartbeat實現了雙機熱備模塊,通過Ng
    發表于 12-24 17:57 ?10次下載

    云環境中基于LVS集群的負載均衡算法

    為了解決傳統負載均衡技術應用到云計算環境中引發的新問題,提出一種云環境下基于LVS集群分組負載均衡算法。該算法首先根據硬件性能計算各節點的權
    發表于 11-24 11:05 ?1次下載
    云環境中基于<b class='flag-5'>LVS</b>集群的<b class='flag-5'>負載</b><b class='flag-5'>均衡</b>算法

    超詳細!使用 LVS 實現負載均衡原理及安裝配置詳解

    負載均衡集群是 load balance 集群的簡寫,翻譯成中文就是負載均衡集群。常用的負載均衡
    發表于 01-21 14:01 ?1003次閱讀

    keepalivedLVS概述,KeepAlived工作原理

    Checkers :此功能模塊主要負責真實服務器的健康檢查( HealthChecking ),是Keepalived最主要的功能之一,因為HealthChecking是負載均衡功能穩定運行的基礎,
    的頭像 發表于 06-25 14:08 ?5.4w次閱讀
    <b class='flag-5'>keepalived</b>及<b class='flag-5'>LVS</b>概述,<b class='flag-5'>KeepAlived</b>工作原理

    負載均衡能否能直接從LVS打到站點層

    上一篇負載均衡的文章有一個點不少人有疑問,所以我覺得有必要單獨寫篇文章解釋一下,先看下上篇文章展示的架構圖: 這里一些朋友的疑問點是 Nginx 是否多此一舉,能否能直接從 LVS 打到
    的頭像 發表于 08-17 10:29 ?1226次閱讀
    <b class='flag-5'>負載</b><b class='flag-5'>均衡</b>能否能直接從<b class='flag-5'>LVS</b>打到站點層

    負載均衡keepalived的工作原理

    問題初現 「滴~~~」,釘釘突然響起了很多客服轉發來的用戶投訴信息,說是網絡連接不上了,經過排查發現是其中一臺機器(RS2)掛了 ? 但是 LVS 依然持續地把流量打到這臺機器上,持續造成線上
    的頭像 發表于 10-11 17:49 ?2034次閱讀

    LVS是什么?LVS的四種模式與十種調度算法介紹

    LVS是基于4層的負載均衡技術,它是Linux內核的一個模塊。
    的頭像 發表于 02-17 09:18 ?3549次閱讀

    搭建Keepalived+Lvs+Nginx高可用集群負載均衡

    Server)實現可用負載均衡 附:LVS負載均衡
    的頭像 發表于 06-25 15:39 ?1911次閱讀
    搭建<b class='flag-5'>Keepalived+Lvs</b>+Nginx高<b class='flag-5'>可用</b>集群<b class='flag-5'>負載</b><b class='flag-5'>均衡</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>