什么是虛擬服務器(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.5 | 80 | 172.16.0.2 | 80 | 1 |
172.16.0.3 | 8000 | 2 | |||
TCP 協議 | 202.103.106.5 | 21 | 172.16.0.3 | 21 | 1 |
發往 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:3456 | DEST | 202.103.106.5:80 |
負載均衡器將選擇一個真實服務器,例如 數據包將被重寫并轉發到 服務器為:
源 | 202.100.1.2:3456 | DEST | 172.16.0.3:8000 |
回復將返回到負載均衡器,如下所示:
源 | 172.16.0.3:8000 | DEST | 202.100.1.2:3456 |
數據包將被寫回虛擬服務器 地址并返回給客戶端:
源 | 202.103.106.5:80 | DEST | 202.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.5 | 80 | 202.103.107.2 | 1 |
202.103.106.3 | 2 |
發往 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