技术干货丨服务器负载均衡SLB详解及配置
来源: | 作者:三网IT教育 | 发布时间: 1654天前 | 3391 次浏览 | 分享到:
三网教育技术干货分享~




  一.SLB  

SLB为连接的客户端提供了一个虚拟服务器 IP 地址,其代表了一组真实服务器组成的服务器群。如下图所示为SLB的概念。


一台客户端访问一台逻辑的“虚拟”服务器(IP 地址为 v.v.v.v),该虚拟服务器只存在于Catalyst 6500交换机的 SLB 配置中。

一组物理的“真实”服务器(IP地址 x.x.x.x、 y.y.y.y和z.z.z.z)配置成一个服务器群。客户端与虚拟服务器之间的流量被负载均衡到这组真实服务器上,而所有的操作对客户端而言是透明的。

当客户端开启一个到虚拟服务器的新连接时,SLB就会根据负载均衡算法决定使用哪台真实服务器。

SLB使用以下算法来实现负载均衡。

加权轮询(WRR)算法:为每台分配一个权重,权重表示相对于其他服务器,自身能处理连接的能力。权重为n表示 SLB为下一服务器分配流量之前,要为这台服务器分配n条新连接。

加权最小连接(WLC)算法:SLB会将新连接分配给活动连接数最少的真实服务器。为每台真实服务器分配权重m,服务器处理活动连接的能力等于m除以所有服务器权重之和。SLB 会将新连接分配给活动连接数远少于其能力范围的真实服务器。


使用加权最小连接(WLC)算法时, SLB使用一种慢启动的方式来控制对新加真实服务器的访问。“慢启动”限制了新连接的建立频率并允许逐渐增加,以此来防止服务器的过载。

虚拟服务器可以伪装成真实服务器群中所有TCP或UDP端口所使用的IP地址。虚拟服务器的IP也可以配置在服务器群中某个单独的端口或服务上。

粘性(sticky)连接技术使SLB为客户端分配连接时,选择上次客户端使用的真实服务器。

SLB可通过监视失效的TCP连接来检测出真实服务器的故障。SLB可使失效的服务器停止工作,并在其恢复时重新提供服务。

如果真实服务器和虚拟服务器处于不同的 3 层子网,那么可使用 SLB 的服务器网络地址转换(server NAT)功能实现真实服务器和虚拟服务器之间的地址转换。

SLB可使用客户端 NAT(client NAT)功能将客户端请求包中源地址转换成 SLB 服务器一方的地址。在使用多台SLB 设备时,可使用此功能来将返回流量发送到正确的SLB设备上。

SLB提供了一种针对真实服务器的TCP SYN flood攻击的控制机制,从而可阻止某些类型的拒绝服务(DoS)攻击。

SLB可与热备路由器协议(HSRP)协同工作来提供“无状态备份”的冗余功能。如果一台SLB路由器故障,冗余的路由器将接管 SLB的工作。不过,现有的SLB连接都将丢失,所以不得不从客户端重新建立连接。

IOS SLB还可担当动态反馈协议(DFP)负载均衡管理者(manager)。DFP管理者从真实路由器上运行的代理(agent)那里收集性能信息。

  二.配置  

1.定义服务器群。

a.为服务器群指定名称。

(global) ip slb serverfarm serverfarm-name

此命令将服务器组名称标识成serverfarm-name(至多15个字符的字符串)。

b.(可选)为服务器群选择负载均衡算法。

(server-farm) predictor [roundrobin I leastconns]

SLB使用roundrobin(加权轮询算法,默认算法)或 leastconns(加权最小连接算法)来选择一台真实服务器。

c.(可选)使用server NAT功能。

(server-farm) nat server

默认情况下,虚拟服务器和真实服务器地址在2层上必须是邻接关系。换句话说,SLB通过替换掉正确的MAC地址来在虚拟服务器和真实服务器之间转发数据包。server NAT可实现替换功能,该功能可使虚拟服务器和真实服务器使用不同子网地址寻址。SLB会替换掉3层IP地址来在虚拟服务器和真实服务器之间转发数据包,允许服务器之间间隔多跳路由。

d.(可选)使用 client NAT 功能。

定义 NAT 地址池。

(global) ip slb natpool pool-name start-ip end- ip [netmask netmask l prefix-length leading-1-bits] [ entriesinit- addr [max-addr] ]

此命令指定了名为pool-name(至多15个字符的字符串)的 IP 地址池,该地址池由 start-ip 到 end-ip 之间的地址组成。地址池相关的子网掩码可以是常规的子网掩码 netmask(格式为 x.x.x.x),或者指定掩码中连续的 1 的数量 leading-1-bits(1~32)。

对于IOS SLB 而言, client NAT 可分配许多IP地址和端口号条目,init-addr(1~1000000;默认为 8000)为地址条目数量的初始设定。当动态分配的地址条目数量达到 init-addr 数量的一半时,系统会自动增加条目数量。NAT条目的最大数量可由选项max-addr(1~8000000;默认值为池中 IP 地址数量乘以可用的端口数量,可用端口数量为 65535-11000,即54535)来定义。用于转换的端口号从 11000 开始。

启用 client NAT。

(server-farm) nat client pool-name

使用pool-name(至多15个字符)来标识SLB NAT地址池。

e.(可选)为 DFP 分配唯一标识符。

(server-farm) bindid [bind-id]

有时,一台真实服务器会被分配给多个服务器群。bind-id(0~65535;默认为 0)是分配给服务器群的一个任意标识值。真实服务器的每个实例都会引用这个值。DFP 使用 bind-id来为每个实例指定一个权重值。

f.(可选)使用 probe 功能测试服务器。

( server-farm) probe name

由name(至多 15 个字符的字符串)定义的探测(probe)功能周期性地测试服务器的连通性及运作情况。IOS SLB可提供ping、 HTTP及无线会话协议(WSP)的probe功能。CSM1 也可提供TCP、 FTP、 SMTP、 Telnet及DNS的probe功能。更多关于配置probe的信息。

2.在服务器群中指定一个或多个真实服务器。

a. 标识服务器群中的真实服务器。

(server-farm ) real ip-address

此命令将真实服务器的 IP 标识为 ip-address 并进入 SLB 真实服务器配置模式。

b. (可选)定义连接门限。

(real-server) maxconns number

此命令将真实服务器的活动连接数都被限制成 number(1~4294967295 条连接;默认为 4294967295)。

c. 分配相对性能权重值。

(real -server) weight weighting-value

为真实服务器分配的weighting-value(1~255;默认为 8)代表此服务器相对于服务器群中其他真实服务器的性能值。对于WRR算法来说, weighting-value定义了在SLB 将连接分配给下一服务器之前,本台服务器所能接收的连续连接数量。对于WLC算法来说,下一条连接会分配给活动连接数与性能值相差最多,即负载最小的那台服务器。性能值由weighting-value除以服务器群中所有真实服务器的权重值之和计算而来。

d. (可选;仅用于 IOS SLB)服务器未响应时重新分配连接。

(real-server) reassign threshold

SLB通过转发客户端的初始SYN来将一条新连接分配给某台真实服务器。

如果在客户端重传SYN之前服务器没有响应SYN握手报文,那么SLB将此作为一次未响应的SYN记录下来。在未响应 SYN发生threshold(1~4,默认为3)次之后,SLB将此连接重新分配给下一台服务器。

e.(可选;仅用于IOS SLB)定义故障服务器门限。

(real-server)faildetect numconns number-conns [numclients number-clients

如果 number-conns(1~255,默认8条连接)条TCP连接已经被重新分配给了另一台服务器,那么可以判断某台服务器已经出现了故障。可使用关键字numclients来指定在IOS SLB判断某台服务器故障前,允许连接失败的客户端个数 number-clients(1~8,默认为2)。

f.(可选;仅用于 IOS SLB)定义故障服务器重试等待时间。
(real-server) retry  retry-value

在某台真实服务器宣布“故障”之后,SLB会在retry-value(0~3600秒,默认为60秒)过后尝试为其分配一条新的链接。0表示不尝试去分配新连接。

g.使用SLB来启用真实服务器。

(real-server) inservice

默认情况下,只有真实服务器处于服务状态才能被SLB所使用。可使用命令no inservice来使服务器停止服务。

3.为服务器群定义虚拟服务器。

a.指定虚拟服务器名称。

(global) ip slb Vserver Vitual-server-name

此命令将虚拟服务器名称标识成vitual-server-name (至多15个字符的字符串)并进入SLB虚拟服务器配置模式。

b.将虚拟服务器分配给服务器群。

(virtual-server) serverfarm serverfarm-name

SLB使用虚拟服务器作为名为serverfarm-name(至多 15 个字符的字符串)的服务器前端。

c.定义虚拟服务器性能。

(virtual-server) virtual ip-address [network-mask] {tcp | udp} [port | wap | wap-wtp| wsp-wtls | wsp-wtp-wtls] [service service-name]

配置此命令后,虚拟服务器将以IP地址为 ip-address(默认 0.0.0.0,即“所有网络”)带有掩码network-mask(默认 255.255.255.255)的形式出现。

IOS SLB 通过对具体的tcp或udp 端口号port来实现负载均衡:dns或 53 (域名系统)、 ftp或21(文件传输协议)、https或443(建立在SSL之上的HTTP)、www或 80(HTTP)、telnet或23(Telnet)、 smtp或25(SMTP)、pop3或110(POPv3)、pop2或109(POPv2)、nntp或119(网络消息传输协议)、matip-a 或350(Mapping of Airline Traffic over IP, type A)。端口号为 0 表示虚拟服务器上所有端口的连接都将被负载均衡。

其他可选择的端口号还有 wsp(无连接的WSP,端口9200)、wsp-wtp(带有WAP FSM的面向连接的WSP,端口 9201)、wsp-wtls(无连接安全WSP,端口9202)及wsp-wtp-wtls(面向连接安全WSP,端口9203)。

可使用关键字service来强制地让SLB将某台客户端上的所有与 service-name(例如ftp或wsp-wtp)相关的连接分配给同一台真实服务器。在CSM线路卡上,只允许ftp连接与最初的控制会话关联在一起。

d. (可选)配置虚拟服务器的访问控制

(virtual-server) client ip-address network-mask

使用此命令后,只有带有ip-address(默认0.0.0.0,即所有网络)指定范围的IP地址和network-mask(默认为 0.0.0.0,即所有网络)子网掩码的客户端将允许连接到虚拟服务器。此处的network-mask与访问控制列表中“1表示忽略0表示匹配”的反掩码相反。在CSM线路卡上,可使用关键字exclude来阻止具体的IP地址。

e. (可选)为同一客户端和真实服务器分配连接。

(virtual-server) sticky duration [group group-id] [netmask netmask]

对于特定的客户端来说,在duration(0~65535 秒)定义的时间内,连接会被分配给上次使用的那台真实服务器。虚拟服务器可以被分配到一个group-id( 0~55;默认为 0)中,将多台虚拟服务器关联到一个组内。所有客户端源地址在netmask(默认为 255.255.255.255)范围内的连接都将分配给相同的真实服务器。

f. (可选)连接关闭后保持连接的打开状态。

(virtual-server) delay duration

TCP 连接关闭后, SLB 能够在 duration( 1~600 秒,默认 10 秒)内保持这条连接的环境处于打开状态。此功能可在数据包没有按序到达,并且在最后的数据包到达前连接已经被重置的环境中发挥作用。

g. (可选)保持不活动连接的打开状态

(virtual-server) idle duration

当 SLB 检测到某条连接没有数据包的时候, SLB 会在发送 RST 包之前,在duration(10~65535 秒,默认 3600 秒,即 1 小时)内保持这条连接处于打开状态。

h. (可选)阻止对真实服务器的 SYN flood 攻击。

(virtual-server) synguard Syn-connt[interval]

SLB 会监控虚拟服务器收到的 SYN 包的数量。如果在 interval( 50~5000 毫秒;默认为 100 毫秒)之内收到了超过 syn-count( 0~4294967295;默认为 0,不监控 SYN 包)的 SYN 包,那么所有后续的 SYN 包都会被丢弃。

i. (可选)控制虚拟服务器的通告。

(virtual-server) advertise [active]

默认状态下, SLB 为虚拟服务器地址创建了一条指向逻辑接口 Null0 的静态路由。这条静态路由可以被路由选择协议重分布或通告出去。关键 active 的作用是只有当存在可用真实服务器的环境下才通告静态路由。可以使用命令 no advertise 停止对静态路由的通告,同时也阻止了静态路由的创建。

j.使用 SLB 来启用虚拟服务器

(virtual-server) inservice [standby group-name]

默认情况下,只有虚拟服务器处于服务状态才能被 SLB 所使用。可使用命令no inservice 来使虚拟服务器停止服务。

k.(可选)使用 SLB 状态备份功能。

(virtual-server) replicate casa listening-ip remote-ip port-number [interval]

[password [0|7] password [timeout] ]

IOS SLB 使用 Cisco 设备服务体系结构( CASA)机制与其他状态备份设备复制并交换机负载共享决策表。当故障发生时,备份的 SLB 设备已经具有当前的状态信息并可立刻执行接管操作。

CASA信息使用端口port-number(1~65535)从地址 listening-ip(本地设备的接口地址)发送到地址remote-ip(备份设备的接口地址)的设备上。CASA 复制消息发送的时间间隔为 interval(1~300秒,默认为10秒)。

参数password(文本字符串;默认的0表示不加密,7表示加密)可用于备份设备的 MD5 身份认证。可选参数 timeout(0~65535秒;默认为180秒)定义了新旧密码迁移过程的时间。这段时间内,新旧密码都将生效。

4. (可选)使用 SLB 动态反馈协议(DFP)。

a. (可选)使用 DFP manager(管理者)与服务器上的 DFP agent(代理)通信。

启用 DFP manager。

(global) ip slb dfp [ password [ 0l7] password [ timeout] ]

路由器可以成为 DFP 负载均衡 manager。可为 DFP 配置 password(文本字符串;默认的 0 表示不加密, 7 表示加密)来用于主机 agent 的 MD5 身份认证。可选参数timeout( 0~65535 秒;默认为 180 秒)定义了新旧密码迁移过程的时间。这段时间内,新旧密码都将生效。

指定 DFP agent。

(slb-dfp) agent ip-address port-number [timeout [retry-count [retry-interval]]]

此命令使用 ip-address 和 port-number 来标识真实服务器上的 DFP agent。DFP agent(服务器)必须在 timeout(0~65535 秒;默认为 0 秒,即无超时周期)的 时间内联系到 DFP manager (IOS SLB 设备)。DFP manager 会以 retry-interval (1~65535 秒;默认 180 秒)的时间间隔,共 retry-count(0~65535 次尝试;默认为0,即无限次尝试)次尝试重新连接 DFP agent。

b. (可选)使用 DFP agent 提供 DFP 报告。

定义 agent。

(global) ip dfp agent subsystem- name

DFP agent 向其 manager(分布式控制器设备)发送周期报告。

subsystem-name(至多 15 个字符的字符串)使 manager 将服务器报告和用于全局负载均衡的子系统(subsystem,受 SLB 设备控制)联系起来。使用命令 ip dfp agent 可查看在全局 manager 下有效的 subsystem-name 值有哪些。

(可选)设置 DFP agent 密码。

(dfp)password [0|7] password [timeout]

参数 password(文本字符串;默认的 0 表示不加密, 7 表示加密)可用于同DFP manager 进行 MD5 身份认证。可选参数 timeout(0~65535 秒;默认为 180秒)定义了新旧密码迁移过程的时间。这段时间内,新旧密码都将生效。

设置 DFP 端口号。

(dfp) port port -number

DFP manager 和 agent 使用某个公共的端口号 port-number(1~65535,无默认值)进行通信。DFP manager 能够动态发现 agent 的前提是 manager(分布式控制器)和 agent(IOS SLB)之间配置的端口号应相同。

(可选)设置重新计算权重的时间间隔。

(dfp) interval seconds

DFP agent在将其权重值发送给DFP manager之前,会以seconds(5~65535 秒;默认 10 秒)时间间隔重新计算权重值。

启用 DFP agent。

(dfp) inservice

默认交换机上的 DFP agent 功能处于停用状态。


  三.SLB配置实例  

此例可参考下图所示的网络拓扑图。配置SLB来为以下两组服务器群提供负载均衡:FARM1和FRAM2。


FARM1 是一组拥有 3 台真实 Web 服务器的服务器群,服务器的 IP 地址分别为 192.168.250.10、 192.168.250.11 和 192.168.250.12。

如果连续 4 次不能建立 TCP连接,那么真实服务器将被视为“故障”状态。SLB 会在 30 秒后重新连接故障服务器(只有 IOS 命令集才能支持 TCP 连接故障数和重试时间间隔的配置命令)。配置了 HTTP probe 功能, SLB 每 120 秒会尝试与服务器群中的每台真实服务器建立连接。

地址为 10.10.10.101 的虚拟服务器 VSERVER1 使用 WLC 算法在真实服务器之间实现负载均衡。新连接带有 60 秒的粘性特性(将客户端流量分配给上次使用的服务器)。

为 3 台服务器分配的权重值分别为 32、 16 和 8。新连接会分配给通过性能值计算后活动连接数最少的那台服务器。例如服务器 192.168.254.10 的权重为 32,性能值为 32/(32+16+8),即 32/56。服务器 192.168.254.10的权重为 16,性能值为 16/(32+16+8),即16/56。服务器 192.168.254.10的权重为8,性能值为8/(32+16+8),即 8/56。无论何时,新连接都会分配给活动连接数与性能值相差最多,即负载最小的那台服务器。

下面给出了配置服务器群 FRAM1 和虚拟服务器 VSERVER1 所需的命令。


  四.显示SLB相关信息  

可使用下表中的交换机命令来显示SLB配置及状态的相关信息。
-  END -


专业 · 实力 ·  诚信· 价值


微信号:sannet-edu

官方网站:www.sannet.net

咨询热线:0512-82289966