LVS原理詳解及LVS負載均衡工作模式

什么是虛擬服務器(LVS)

虛擬服務器是高度可擴展且高度可用的服務器 構建在真實服務器集群上。服務器集群的架構 對最終用戶完全透明,并且用戶與 cluster 系統,就好像它只是一個高性能的虛擬 服務器。請考慮下圖。

真實服務器和負載均衡器可以通過以下方式互連 高速 LAN 或地理位置分散的 WAN。負載Balancer 可以將請求分派到不同的服務器,并發出 Parallel 服務在 單個 IP 地址和請求分派可以使用 IP 負載平衡技術或應用程序級負載平衡技術。系統的可擴展性是通過透明地實現的 在集群中添加或刪除節點。提供高可用性 通過檢測節點或守護程序故障并重新配置系統 適當地。

目標

Linux 虛擬服務器項目的基本目標是:

構建高性能、高可用的服務器 對于使用集群技術的 Linux,它提供了良好的 可擴展性、可靠性和可維護性。

LVS 集群系統也稱為負載平衡服務器集群。

結構

使用LVS架設的服務器集群系統有三個部分組成:最前端的負載均衡層,用Load Balancer表示,中間的服務器群組層,用Server Cluster表示,最底端的數據共享存儲層,用Storage表示,在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務

?LVS/NAT:網絡地址轉換模式

以下包含有關虛擬工作原理的信息 server 通過 NAT 和 VS/NAT 系統的配置示例。

網絡地址轉換

由于 IPv4 中 IP 地址的不足和一些安全性 原因,越來越多的網絡使用內部 IP 地址(例如 作為 10.0.0.0/255.0.0.0、172.16.0.0/255.240.0.0 和 192.168.0.0/255.255.0.0),該版本不能在 Internet 上使用。 當主機在 內部網絡希望訪問 Internet 并被訪問 互聯網。

網絡地址轉換是 IP 地址 從一個組映射到另一個組。當地址映射為 N-to-N,稱為靜態網絡地址轉換;當 映射是 M 到 N (M>N),稱為動態網絡地址 譯本。網絡地址端口轉換是 基本 NAT,在眾多網絡地址及其 TCP/UDP 端口中 轉換為單個網絡地址及其 TCP/UDP 端口。 這是 N-to-1 映射,Linux IP 偽裝是 實現。有關網絡地址轉換的更多描述 位于?RFC1631?和?draft-rfced-info-srisuresh-05.txt?中。

在 Linux 上通過 NAT 的虛擬服務器由網絡地址完成 端口轉換。代碼在 Linux IP 上實現 偽裝代碼,以及 Steven Clarke 的一些端口轉發 代碼被重復使用。

通過 NAT 的虛擬服務器如何工作?

首先看下圖,

當用戶訪問服務器提供的服務時 cluster 中,目標為虛擬 IP 地址的請求數據包( 負載均衡器的外部 IP 地址)到達負載 平衡器。負載均衡器檢查數據包的目的地 地址和端口號。如果它們與虛擬服務器匹配 根據虛擬服務器規則表的服務,一個真實的服務器 通過調度算法從集群中選擇,并且 connection 被添加到哈希表中,該哈希表記錄了 已建立連接。然后,目標地址和 數據包的 port 被重寫為所選服務器的 port, 并將數據包轉發到服務器。當傳入的 數據包屬于此連接,并且所選服務器可以是 在哈希表中找到,數據包將被重寫,并且 轉發到所選服務器。當回復數據包返回時, 負載均衡器會重寫 數據包復制到虛擬服務的數據包。連接后 terminates 或 timeouts,則連接記錄將在 哈希表。

困惑?讓我舉個例子來說明這一點。在 示例,計算機的配置如下:

注意 真實服務器可以運行任何支持 TCP/IP 的作系統, 真實服務器的默認路由必須是虛擬服務器 (本例中為 172.16.0.1)。ipfwadm 實用程序用于使 虛擬服務器接受來自真實服務器的數據包。在 示例,命令如下:

    echo 1 > /proc/sys/net/ipv4/ip_forwardipfwadm -F -a m -S 172.16.0.0/24 -D 0.0.0.0/0

下圖說明了 具有虛擬服務器支持的 Linux 盒子。

協議虛擬 IP 地址港口真實 IP 地址港口重量
TCP 協議202.103.106.580172.16.0.2801
172.16.0.380002
TCP 協議202.103.106.521172.16.0.3211

發往 IP 地址 202.103.106.5 端口 80 的所有流量均為 通過實際 IP 地址 172.16.0.2 端口 80 和 172.16.0.3 端口 8000。發往 IP 地址的流量 202.103.106.5 端口 21 端口轉發到真實 IP 地址 172.16.0.3 端口 21.

數據包重寫的工作原理如下。

Web 服務的傳入數據包將具有 source 和 目標地址為:

202.100.1.2:3456DEST202.103.106.5:80

負載均衡器將選擇一個真實服務器,例如 數據包將被重寫并轉發到 服務器為:

202.100.1.2:3456DEST172.16.0.3:8000

回復將返回到負載均衡器,如下所示:

172.16.0.3:8000DEST202.100.1.2:3456

數據包將被寫回虛擬服務器 地址并返回給客戶端:

202.103.106.5:80DEST202.100.1.2:3456

如何構建內核

首先,獲取 正確的版本。其次,將虛擬服務器補丁應用于 內核。第三,確保以下內核編譯選項位于 最少。

1. 適用于內核 2.0.36 或更高版本的 VS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers
Networking options --->[*] Network firewalls....[*] IP: forwarding/gatewaying....[*] IP: firewalling....[*] IP: masquerading....[*] IP: ipportfw masq & virtual server support

而且,選擇一種調度算法。

    Virtual server scheduling algorithm(X) WeightedRoundRobin( ) LeastConnection( ) WeightedLeastConnection

最后,重新構建內核。一旦你有了你的內核 正確構建后,更新您的系統內核并重新啟動。

最后,從 ippfvsadm.c 程序構建 ippfvsadm 實用程序。 而且,虛擬服務器規則可以由 ippfvsadm 指定。為 例如,對于上表中的規則,我們可以使用 以下命令。

    ippfvsadm -A -t 202.103.106.5:80 -R 172.16.0.2:80 -w 1ippfvsadm -A -t 202.103.106.5:80 -R 172.16.0.3:8000 -w 2ippfvsadm -A -t 202.103.106.5:21 -R 172.16.0.3:21

2. 內核 2.2.x 的 IPVS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network firewalls...[*] IP: forwarding/gatewaying...[*] IP: firewalling...[*] IP: masquerading...[*] IP: masquerading virtual server support (EXPERIMENTAL)(12) IP masquerading table size (the Nth power of 2)<M> IPVS: round-robin scheduling<M> IPVS: weighted round-robin scheduling<M> IPVS: least-connection scheduling<M> IPVS: weighted least-connection scheduling<M> IPVS: locality-based least-connection scheduling<M> IPVS: locality-based least-connection with replication scheduling

正確構建內核后,請更新系統內核 并重新啟動。最后,切換到 ipvsadm 源并鍵入 “make” install“將 ipvsadm 安裝到您的系統目錄中。

使負載均衡器轉發偽裝數據包

    echo 1 > /proc/sys/net/ipv4/ip_forwardipchains -A forward -j MASQ -s 172.16.0.0/24 -d 0.0.0.0/0

添加虛擬服務并將調度程序鏈接到它

    ipvsadm -A -t 202.103.106.5:80 -s wlc  (Weighted Least-Connection scheduling)ipvsadm -A -t 202.103.106.5:21 -s wrr  (Weighted Round Robing scheduling )

添加真實服務器并選擇轉發方式

    ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.2:80 -m ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.3:8000 -m -w 2 ipvsadm -a -t 202.103.106.5:21 -r 172.16.0.2:21 -m 

3. 內核 2.4.x 的 IPVS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network packet filtering (replaces ipchains)[ ]   Network packet filtering debugging...IP: Netfilter Configuration  --->IP: Virtual Server Configuration  ---><M> virtual server support (EXPERIMENTAL)[*]   IP virtual server debugging(12)   IPVS connection table size (the Nth power of 2)--- IPVS scheduler<M>   round-robin scheduling<M>   weighted round-robin scheduling<M>   least-connection scheduling scheduling<M>   weighted least-connection scheduling<M>   locality-based least-connection scheduling<M>   locality-based least-connection with replication scheduling<M>   destination hashing scheduling<M>   source hashing scheduling--- IPVS application helper<M>   FTP protocol helper

LVS/TUN: 隧道模式

IP 隧道

IP 隧道 (IP encapsulation) 是一種用于封裝 IP 數據報中的 IP 數據報,允許目標為 將一個 IP 地址包裝并重定向到另一個 IP 地址。IP 封裝現在常用于 Extranet, 移動 IP、IP 多播、隧道主機或網絡。請參閱 NET-3-HOWTO 文檔了解詳細信息。

如何在虛擬服務器上使用 IP 隧道

首先,讓我們看看通過 IP 的虛擬服務器圖 隧道。通過 IP 隧道實現虛擬服務器最不同的事情 到 NAT 的虛擬服務器的 NAT 是負載均衡器發送 前者中通過 IP 隧道向后端服務器發出請求,并加載 Balancer 通過網絡地址轉換向真實服務器發送請求 在后者中。

當用戶訪問服務器提供的虛擬服務時 cluster 的 IP 地址,一個發往虛擬 IP 地址的數據包( 虛擬服務器)到達。負載均衡器會檢查數據包的 目標地址和端口。如果它們與虛擬 service 中,根據 連接調度算法,并將連接添加到 記錄連接的哈希表。然后,負載均衡器 將數據包封裝在 IP 數據報中,并將其轉發到 已選擇服務器。當傳入數據包屬于此連接且 所選服務器可以在哈希表中找到,數據包將為 再次封裝并轉發到該服務器。當服務器 接收封裝后的數據包,它會解封裝數據包并 處理請求,最后將結果直接返回給用戶 根據它自己的路由表。連接終止后或 timeouts,則連接記錄將從 Hash 中刪除 桌子。該工作流如下圖所示。

請注意,真實服務器可以在任何網絡中擁有任何真實 IP 地址。 它們可以分布在不同的地理位置,但必須支持 IP encapsulation 協議。他們的隧道設備都已配置好,因此 系統可以解封裝收到的封裝數據包 正確,并且必須在 <虛擬 IP 地址> 上配置 非 ARP 設備或非 ARP 設備的任何別名,或者系統可以是 配置為將<虛擬 IP 地址>的數據包重定向到 local 套接字。

最后,當封裝的數據包到達時,真實服務器 解封裝它,發現數據包的目的地是 <Virtual IP Address>,它說,“哦,這是給我的,所以我做。 處理請求并將結果直接返回給用戶在 結束。

如何構建內核

首先,獲取 right 的 Linux 內核源代碼的新副本 版本。其次,獲取正確版本的 IP 虛擬服務器補丁和 將其應用于內核。第三,確保一些內核編譯 必須選擇選項。第四,重建內核。一旦你擁有 您的內核已正確構建,請更新您的系統內核并重新啟動。

1. 內核 2.0.36 的 VS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network firewalls...[*] IP: forwarding/gatewaying...[*] IP: firewalling...[*] IP: masquerading...[*] IP: ippfvs(LinuxDirector) masquerading (EXPERIMENTAL)Virtual server request dispatching technique---( ) VS-NAT(X) VS-Tunneling( ) VS-DRouting

而且,您必須選擇一種調度算法。

    Virtual server scheduling algorithm(X) WeightedRoundRobin( ) LeastConnection( ) WeightedLeastConnection[ ] IP: enabling ippfvs with the local node feature

最后,cd ippfvsadm 源并鍵入 “make install” 將 ippfvsadm 安裝到系統目錄中。

2. 內核 2.2.x 的 VS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network firewalls...[*] IP: forwarding/gatewaying...[*] IP: firewalling...[*] IP: masquerading...[*] IP: masquerading virtual server support (EXPERIMENTAL)(12) IP masquerading table size (the Nth power of 2)<M> IPVS: round-robin scheduling<M> IPVS: weighted round-robin scheduling<M> IPVS: least-connection scheduling<M> IPVS: weighted least-connection scheduling<M> IPVS: locality-based least-connection scheduling<M> IPVS: locality-based least-connection with replication scheduling

最后,cd ipvsadm 源并鍵入 “make install” 以 將 ipvsadm 安裝到系統目錄中,或安裝 ipvsadm rpm 包。

3. 內核 2.4.x 的 IPVS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network packet filtering (replaces ipchains)[ ]   Network packet filtering debugging...IP: Netfilter Configuration  --->IP: Virtual Server Configuration  ---><M> virtual server support (EXPERIMENTAL)[*]   IP virtual server debugging(12)   IPVS connection table size (the Nth power of 2)--- IPVS scheduler<M>   round-robin scheduling<M>   weighted round-robin scheduling<M>   least-connection scheduling scheduling<M>   weighted least-connection scheduling<M>   locality-based least-connection scheduling<M>   locality-based least-connection with replication scheduling<M>   destination hashing scheduling<M>   source hashing scheduling--- IPVS application helper<M>   FTP protocol helper

如何使用

讓我們舉個例子來了解如何使用它。下表 說明了在具有虛擬服務器的 Linux 框中指定的規則 通過 IP 隧道。請注意,在真實服務器上運行的服務 必須在與 Virtual Service 相同的端口上運行,因此沒有必要 ,指定后端服務器的服務端口。

協議虛擬 IP 地址港口真實 IP 地址重量
TCP 協議202.103.106.580202.103.107.21
202.103.106.32

發往 IP 地址 202.103.106.5 端口 80 的所有流量均為 通過實際 IP 地址 202.103.107.2 端口 80 和 202.103.106.3 端口 80。

我們可以使用以下命令來指定表中的規則 above 在系統中。

1. 對于內核 2.0.x

ippfvsadm -A -t 202.103.106.5:80 -R 202.103.107.2 -w 1
ippfvsadm -A -t 202.103.106.5:80 -R 202.103.106.3 -w 2

2. 對于內核 2.2.x / 內核 2.4.x / 內核 2.6.x

ipvsadm -A -t 202.103.106.5:80 -s wlc
ipvsadm -a -t 202.103.106.5:80 -r 202.103.107.2 -i -w 1
ipvsadm -a -t 202.103.106.5:80 -r 202.103.106.3 -i -w 2

隧道測試虛擬服務器的示例

這是我通過 隧道。配置如下。希望能給你 一些線索。負載均衡器具有 172.26.20.111 地址,而實際的 服務器 172.26.20.112。172.26.20.110 是虛擬 IP 地址。在 以下所有示例,“telnet 172.26.20.110” 都將 實際到達真實服務器。

1. 對于內核 2.0.x

負載均衡器 (LinuxDirector),內核 2.0.36

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
ippfvsadm -A -t 172.26.20.110:23 -R 172.26.20.112

后端服務器 1,內核 2.0.36(啟用 IP 轉發)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev tunl0

當我在其他主機上時,'telnet 172.26.20.110' 實際上會 連接后端服務器 1.

2. 對于內核 2.2.x

負載均衡器 (LinuxDirector),內核 2.2.14

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -i

后端服務器 1,內核 2.0.36(啟用 IP 轉發)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev tunl0

更多配置示例

以下是通過 IP 的虛擬服務器的更多配置示例 隧道。為了節省空間,只放置重要的命令和 不太重要的部分被省略。

1. 運行內核 2.2.14 或更高版本的后端服務器,帶有隱藏設備

負載均衡器 (LinuxDirector),內核 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -i

真服務器 1,內核 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
# insert it if it is compiled as module
modprobe ipip
ifconfig tunl0 0.0.0.0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up

由于內核 2.2 只有一個隧道設備 tunl0,所以你只能 在此配置中有一個 VIP。對于多個 VIP,您可以進行 tunl0 設備啟動,并在 tunnel/dummy/loopback 設備并隱藏該設備。一個例子是 遵循:

echo 1 > /proc/sys/net/ipv4/ip_forward
# insert it if it is compiled as module
modprobe ipip
ifconfig tunl0 0.0.0.0 up
ifconfig dummy0 0.0.0.0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
ifconfig dummy0:0 172.26.20.110 up
route add -host 172.26.20.110 dev dummy0:0
ifconfig dummy0:1 <Another-VIP> up
...

2. 使用重定向方法運行內核 2.2.x 的真實服務器

負載均衡器的配置與示例相同 以上。運行內核 2.2.x 的后端服務器可以按如下方式配置:

echo 1 > /proc/sys/net/ipv4/ip_forward
# insert it if it is compiled as module
modprobe ipip
ifconfig tunl0 0.0.0.0 up
ipchains -A input -j REDIRECT 23 -d 172.26.20.110 23 -p tcp
...

?Direct Routing 的虛擬服務器

Direct Routing 請求調度技術

這種請求調度方法類似于實現的方法 在 IBM 的 NetDispatcher 中。虛擬 IP 地址由 real 共享 servers 和負載均衡器。負載均衡器有一個接口 也配置了虛擬 IP 地址,該地址用于接受 request 數據包,并直接將數據包路由到選定的 服務器。所有真實服務器都有其非 arp 別名接口配置了虛擬 IP 地址,或者 將發往虛擬 IP 地址的數據包重定向到本地 socket,以便后端服務器可以在本地處理數據包。這 負載均衡器和真實服務器必須具有其接口之一 通過 HUB/交換機進行物理鏈接。虛擬服務器的架構 Via Direct Routing 如下所示:

當用戶訪問服務器提供的虛擬服務時 cluster,則要發送到虛擬 IP 地址(IP 地址 對于虛擬服務器)到達。負載均衡器 (LinuxDirector) 檢查數據包的目標地址和端口。如果他們是 匹配虛擬服務時,將從 cluster 的 Cluster,并將連接添加到 記錄連接的哈希表。然后,負載均衡器 直接轉發到所選服務器。當傳入數據包 屬于此連接,并且所選服務器可以在 hash table 中,數據包將再次直接路由到 服務器。當服務器收到轉發的數據包時,服務器 查找數據包是針對其別名接口上的地址或 本地套接字,以便它處理請求并返回結果 最后直接發送給用戶。連接終止后或 timeouts,則連接記錄將從 Hash 中刪除 桌子。

直接路由工作流程如下所示 數字:

負載均衡器只需更改 數據幀轉換為所選服務器的數據幀,并在 局域網。這就是負載均衡器和每個服務器必須 通過單個不間斷的 一個 LAN。

如何構建內核

首先,獲取 right 的 Linux 內核源代碼的新副本 版本。其次,獲取正確版本的 IP 虛擬服務器補丁和 將其應用于內核。第三,確保一些內核編譯 必須選擇選項。第四,重建內核。一旦你擁有 您的內核已正確構建,請更新您的系統內核并重新啟動。

1. 內核 2.0.36 的 VS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network firewalls...[*] IP: forwarding/gatewaying...[*] IP: firewalling...[*] IP: masquerading...[*] IP: ippfvs(LinuxDirector) masquerading (EXPERIMENTAL)Virtual server request dispatching technique---( ) VS-NAT( ) VS-Tunneling(X) VS-DRouting

而且,您必須選擇一種調度算法。

    Virtual server scheduling algorithm(X) WeightedRoundRobin( ) LeastConnection( ) WeightedLeastConnection

[ ] IP: enabling ippfvs with the local node feature

最后,cd ippfvsadm 源并鍵入 “make install” 將 ippfvsadm 安裝到系統目錄中。

2. 內核 2.2.x 的 IPVS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network firewalls...[*] IP: forwarding/gatewaying...[*] IP: firewalling...[*] IP: masquerading...[*] IP: masquerading virtual server support (EXPERIMENTAL)(12) IP masquerading table size (the Nth power of 2)<M> IPVS: round-robin scheduling<M> IPVS: weighted round-robin scheduling<M> IPVS: least-connection scheduling<M> IPVS: weighted least-connection scheduling<M> IPVS: locality-based least-connection scheduling<M> IPVS: locality-based least-connection with replication scheduling

最后,cd ipvsadm 源并鍵入 “make install” 以 將 ipvsadm 安裝到系統目錄中,或安裝 ipvsadm rpm 包。

3. 內核 2.4.x 的 IPVS 補丁

內核編譯選項:

Code maturity level options --->[*] Prompt for development and/or incomplete code/driversNetworking options --->[*] Network packet filtering (replaces ipchains)[ ]   Network packet filtering debugging...IP: Netfilter Configuration  --->IP: Virtual Server Configuration  ---><M> virtual server support (EXPERIMENTAL)[*]   IP virtual server debugging(12)   IPVS connection table size (the Nth power of 2)--- IPVS scheduler<M>   round-robin scheduling<M>   weighted round-robin scheduling<M>   least-connection scheduling scheduling<M>   weighted least-connection scheduling<M>   locality-based least-connection scheduling<M>   locality-based least-connection with replication scheduling<M>   destination hashing scheduling<M>   source hashing scheduling--- IPVS application helper<M>   FTP protocol helper

直接路由測試虛擬服務器的示例

這是我通過直接測試虛擬服務器的配置示例 路由。配置如下。我希望它能給你一些 蛛絲馬跡。負載均衡器具有 172.26.20.111 地址,而實際的 服務器 172.26.20.112。172.26.20.110 是虛擬 IP 地址。在 以下所有示例,“telnet 172.26.20.110” 都將 實際到達真實服務器。

1. 對于內核 2.0.x

負載均衡器 (LinuxDirector),內核 2.0.36

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
ippfvsadm -A -t 172.26.20.110:23 -R 172.26.20.112

后端服務器 1,內核 2.0.36(啟用 IP 轉發)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

當我在其他主機上時,'telnet 172.26.20.110' 實際上會 連接后端服務器 1.

2. 對于內核 2.2.x

負載均衡器 (LinuxDirector),內核 2.2.14

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

后端服務器 1,內核 2.0.36(啟用 IP 轉發)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

更多配置示例

1. 運行內核 2.2.14 或更高版本的后端服務器,帶有隱藏設備

負載均衡器 (LinuxDirector),內核 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

真服務器 1,內核 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/lo/hidden
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up

您可以在其他設備的別名上配置 VIP,例如 dummy 和 隱藏它。由于它是別名接口,因此您可以配置任意數量的 VIP 隨你所愿。使用虛擬設備的示例如下:

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig dummy0 0.0.0.0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
ifconfig dummy0:0 172.26.20.110 up
ifconfig dummy0:1 <Another-VIP> up
...

2. 使用重定向方法運行內核 2.2.x 的真實服務器

負載均衡器的配置與示例相同 以上。運行內核 2.2.x 的后端服務器可以按如下方式配置:

echo 1 > /proc/sys/net/ipv4/ip_forward
ipchains -A input -j REDIRECT 23 -d 172.26.20.110 23 -p tcp
...

使用此 ipchains redirect 命令,將發送到 地址 172.26.20.110 端口 23,TCP 協議將被重定向 到本地套接字。請注意,服務守護程序必須偵聽所有 地址 (0.0.0.0) 或 VIP 地址 (此處為 172.26.20.110)。

3. 具有不同網絡路由的真實服務器

在通過直接路由的虛擬服務器中,服務器可以遵循 到客戶端的不同網絡路由(不同的 Internet 鏈接),這對性能有好處。負載均衡器和真實服務器 使用專用 LAN 進行通信。下面是一個配置示例。

負載均衡器 (LinuxDirector),內核 2.2.14

ifconfig eth0 <an IP address> ...
...
ifconfig eth0:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up
ipvsadm -A -t <VIP>:23
ipvsadm -A -t <VIP>:23 -r 192.168.0.2 -g
...

真實服務器 1,內核 2.0.36

ifconfig eth0 <a seperate IP address> ...
# Follow the different network route
...
ifconfig eth1 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
ifconfig lo:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up
route add -host <VIP> dev lo:0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上位機知識篇---keil IDE操作

文章目錄 前言文件操作按鍵新建打開保存保存所有編輯操作按鍵撤銷恢復復制粘貼剪切全選查找書簽操作按鍵添加書簽跳轉到上一個書簽跳轉到下一個書簽清空所有書簽編譯操作按鍵編譯當前文件構建目標文件重新構建調試操作按鍵進入調試模式復位全速運行停止運行單步調試逐行調試跳出…

前端大文件上傳性能優化實戰:分片上傳分析與實戰

前端文件分片是大文件上傳場景中的重要優化手段&#xff0c;其必要性和優勢主要體現在以下幾個方面&#xff1a; 一、必要性分析 1. 突破瀏覽器/服務器限制 瀏覽器限制&#xff1a;部分瀏覽器對單次上傳文件大小有限制&#xff08;如早期IE限制4GB&#xff09; 服務器限制&a…

解決react-router-dom沒有支持name命名使用的問題

1. 前言 react-router-dom 并不能像 vue 的route 那樣給每個路由命名 name &#xff0c;導致代碼不能解耦路由路徑與導航邏輯。 2. react-router 為什么沒有支持&#xff1f; 很早之前官方 issue 中就有過很多討論&#xff1a; 翻譯過來&#xff0c;就是由于以下幾個重要原…

Spring AI 之結構化輸出轉換器

截至 2024 年 2 月 5 日,舊的 OutputParser、BeanOutputParser、ListOutputParser 和 MapOutputParser 類已被棄用,取而代之的是新的 StructuredOutputConverter、BeanOutputConverter、ListOutputConverter 和 MapOutputConverter 實現類。后者可直接替換前者,并提供相同的…

MCP與AI模型的多語言支持:讓人工智能更懂世界

MCP與AI模型的多語言支持:讓人工智能更懂世界 在人工智能(AI)的時代,我們追求的不僅是強大的計算能力,更是讓AI能夠理解并使用不同語言,真正服務全球用戶。而這背后,一個至關重要的技術就是 MCP(Multi-Context Processing,多上下文處理) ——一種旨在優化 AI 模型理…

【MySQL】 數據庫基礎數據類型

一、數據庫簡介 1.什么是數據庫 數據庫&#xff08;Database&#xff09;是一種用于存儲、管理和檢索數據的系統化集合。它允許用戶以結構化的方式存儲大量數據&#xff0c;并通過高效的方式訪問和操作這些數據。數據庫通常由數據庫管理系統&#xff08;DBMS&#xff09;管理&…

NRM:快速切換 npm 鏡像源的管理工具指南

&#x1f680; NRM&#xff1a;快速切換 npm 鏡像源的管理工具指南 &#x1f50d; 什么是 NRM&#xff1f; NRM&#xff08;Npm Registry Manager&#xff09; 是一個用于管理 npm 鏡像源的命令行工具。 它能幫助開發者 ?快速切換 不同的 npm 源&#xff08;如官方源、淘寶源…

基于Java的話劇購票小程序【附源碼】

摘 要 隨著文化產業的蓬勃發展&#xff0c;話劇藝術日益受到大眾喜愛&#xff0c;便捷的購票方式成為觀眾的迫切需求。當前傳統購票渠道存在購票流程繁瑣、信息獲取不及時等問題。本研究致力于開發一款基于 Java 的話劇購票小程序&#xff0c;Java 語言具有跨平臺性、穩定性和…

Pr -- 耳機沒有Pr輸出的聲音

問題 很久沒更新視頻號了&#xff0c;想用pr剪輯一下&#xff0c;結果使用Pr打開后發現耳機沒有Pr輸出的聲音 解決方法 在編輯--首選項-音頻硬件中設置音頻硬件的輸出為當前耳機設備

Leaflet根據坐標畫圓形區域

在做地圖應用時&#xff0c;有時需要根據指定的坐標來畫一個圓形區域&#xff0c;比如簽到打卡類的應用&#xff0c;此時我們可以使用 leaflet.Circle 來在在指定坐標上創建一個圓并添加到的地圖上&#xff0c;其中可以通過 radius 屬性可以指定區域半徑&#xff0c;比如: con…

vue3中使用computed

在 Vue 3 中&#xff0c;computed 是一個非常重要的響應式 API&#xff0c;用于聲明依賴于其他響應式狀態的派生狀態。以下是 computed 的詳細用法&#xff1a; 1. 基本用法 import { ref, computed } from vueexport default {setup() {const firstName ref(張)const lastN…

【iOS】類結構分析

前言 之前我們已經探索得出對象的本質就是一個帶有isa指針的結構體&#xff0c;這篇文章來分析一下類的結構以及類的底層原理。 類的本質 類的本質 我們在main函數中寫入以上代碼&#xff0c;然后利用clang對其進行反編譯&#xff0c;可以得到c文件 可以看到底層使用Class接…

Vanna.AI:解鎖連表查詢的新境界

Vanna.AI&#xff1a;解鎖連表查詢的新境界 在當今數字化時代&#xff0c;數據已成為企業決策的核心驅動力。然而&#xff0c;從海量數據中提取有價值的信息并非易事&#xff0c;尤其是當數據分散在多個表中時&#xff0c;連表查詢成為了數據分析師和開發者的日常挑戰。傳統的…

前端流行框架Vue3教程:24.動態組件

24.動態組件 有些場景會需要在兩個組件間來回切換&#xff0c;比如 Tab 界面 我們準備好A B兩個組件ComponentA ComponentA App.vue代碼如下&#xff1a; <script> import ComponentA from "./components/ComponentA.vue" import ComponentB from "./…

海拔案例分享-實踐活動報名測評小程序

大家好&#xff0c;今天湖南海拔科技想和大家分享一款實踐活動報名測評小程序&#xff0c;客戶是長沙一家專注青少年科創教育的機構&#xff0c;這家機構平時要組織各種科創比賽、培訓課程&#xff0c;隨著學員增多&#xff0c;管理上的問題日益凸顯&#xff1a;每次組織活動&a…

【MySQL】CRUD

CRUD 簡介 CRUD是對數據庫中的記錄進行基本的增刪改查操作 Create&#xff08;創建&#xff09;Retrieve&#xff08;讀取&#xff09;Update&#xff08;更新&#xff09;Delete&#xff08;刪除&#xff09; 一、新增&#xff08;Create&#xff09; 語法&#xff1a; I…

【數據架構04】數據湖架構篇

? 10張高質量數據治理架構圖 無論你是數據架構師、治理專家&#xff0c;還是數字化轉型負責人&#xff0c;這份資料庫都能為你提供體系化參考&#xff0c;高效解決“架構設計難、流程不清、平臺搭建慢”的痛點&#xff01; &#x1f31f;限時推薦&#xff0c;速速收藏&#…

【Java Web】3.SpringBootWeb請求響應

&#x1f4d8;博客主頁&#xff1a;程序員葵安 &#x1faf6;感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb; 文章目錄 一、請求 1.1 postman 1.2 簡單參數 1.3 實體參數 1.4 數組集合參數 1.5 日期參數 1.6 JSON參數 1.7 路徑參數 二、響應 2…

競爭性學習:無監督世界的智能聚類引擎

一、競爭性學習&#xff1a;無監督聚類的生物啟發范式 1.1 核心原理&#xff1a;神經元的 “適者生存” 競爭性學習模擬生物神經網絡的競爭機制&#xff1a;多個神經元對輸入數據 “競爭響應”&#xff0c;獲勝神經元&#xff08;與輸入最匹配&#xff09;更新權重&#xff0…

docker面試題(5)

Docker安全么 Docker 利用了 Linux 內核中很多安全特性來保證不同容器之間的隔離&#xff0c;并且通過簽名機制來對鏡像進行 驗證。大量生產環境的部署證明&#xff0c;Docker 雖然隔離性無法與虛擬機相比&#xff0c;但仍然具有極高的安全性。 如何清理后臺停止的容器 可以使用…