当前位置: 首页 > news >正文

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

相关文章:

  • 【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置
  • 深入解析Spring Boot与Kafka的集成实践
  • 密码学实验
  • 【Unity】DOTween的常用函数解释
  • (一) 本地hadoop虚拟机系统设置
  • 自学嵌入式 day21 - 数据结构 双向链表
  • Keil软件中STM32(ARM)与C51兼容方法
  • STM32--串口函数
  • 优化Hadoop性能:如何修改Block块大小
  • AWS CodePipeline+ Elastic Beanstalk(AWS中国云CI/CD)
  • html+css+js趣味小游戏~记忆卡片配对(附源码)
  • c语言- 如何构建CMake项目(Linux/VSCode)
  • 去中心化算力池:基于IPFS+智能合约的跨校GPU资源共享平台设计
  • 零基础设计模式——创建型模式 - 工厂方法模式
  • 电商运营数据分析指南之流量指标
  • <uniapp><vuex><状态管理>在uniapp中,如何使用vuex实现数据共享与传递?
  • uni-app 中使用 mumu模拟器 进行调试和运行详细教程
  • 青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象
  • idea查看class文件源码
  • Electron+vite+vue3 从0到1搭建项目,开发Win、Mac客户端
  • 广东7月起施行:不得以任何方式强制购买中小学校服或捆绑销售
  • 上海高桥镇10个重点项目集中签约,总投资近20亿元
  • 菲律宾华人“钢铁大王”撕票案两主谋被捕,部分赎金已被提取
  • 国家话剧院上海演出季7月重启,《大宅门》等5部大戏来沪
  • 河北邯郸回应被曝涉生猪未检疫、注水问题:将严厉查处违法行为
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布