简介
SLB(Server Load Balancing 服务器负载均衡)用于实现多个服务器之间的负载均衡。SLB虚拟出一个服务器,对用户呈现的就是这个虚拟的服务器。虚拟服务器代表的是多个真实服务器的群集,当客户端向虚拟服务器发起连接时,SLB通过某种均衡算法,转发到某真实服务器。
负载均衡的2种算法:
WRR(weighted round robin 加权循环调度算法):使用加权轮询算法分配连接;
WLC(weighted least connections 加权最小连接调度算法):通过一定的权值,将下一个连接分配给活动连接数
少的服务器。
SLB的2种模式:
Dispatch(分派模式):运行SLB的路由器收到用户计算机发来的数据包后(其目的IP是虚拟服务器的IP地址),
路由器会把数据包按照负载均衡算法分派不同的真实服务器上,不会改变数据包中的目的IP地址。真实服务器
收到数据包中的目的IP地址是虚拟服务器的IP地址,此时服务器必须选择下面的一种做法,否则丢弃数据包:
①在真实服务器上添加环回口地址,并把地址设置为虚拟服务器的IP地址;
②添加第二个IP地址为虚拟服务器的IP地址。
Direct(定向模式):运行SLB的路由器,收到用户计算机发来的数据包后(其目的IP是虚拟服务器的IP地址),
路由器会把数据包也按照负载均衡算法分派不同的真实服务器上,但是会把数据包中的目的IP地址改为真实服
务器的IP地址。真实服务器收到的收据包中的目的IP地址是自己的IP地址,不会丢弃数据包。也就是说在这种
模式下真是服务器并不需要知道虚拟服务器的存在。
实验
R3和R4作为Telnet Server使用,R1作为测试用的计算机,在R2上配置SLB。由于Cisco2821路由器不支持SLB,所以本实验使用的路由器为Cisco3640,IOS为“c-3640-jk9o3s-mz.124-12.bin”。
配置IP地址及路由:
R1(config)#int f0/0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#no sh
R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.2
R2(config)#int f0/0
R2(config-if)#ip add 192.168.1.2 255.255.255.0
R2(config)#int f1/0
R2(config-if)#ip add 1.1.1.2 255.255.255.0
R2(config-if)#no sh
R3(config)#int f0/0
R3(config-if)#ip add 1.1.1.3 255.0.0.0
R3(config-if)#no sh
R3(config)#int lo0
R3(config-if)#ip add 3.3.3.3 255.0.0.0
R3(config)#line vty 0 4
R3(config-line)#password cisco
R3(config-line)#login
R3(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.2
R4(config)#int f0/0
R4(config-if)#ip add 1.1.1.4 255.0.0.0
R4(config-if)#no sh
R4(config)#int lo0
R4(config-if)#ip add 4.4.4.4 255.0.0.0
R4(config)#line vty 0 4
R4(config-line)#password cisco
R4(config-line)#login
R4(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.2
配置分派模式的SLB:
R2(config)#ip slb serverfarm TELNET_SERVER //创建服务器组
R2(config-slb-sfarm)#real 1.1.1.3 //其中的一个服务器是1.1.1.3
R2(config-slb-real)#weight 1 //配置权重,SLB根据各服务器的权重计算承担的负载大小
R2(config-slb-real)#inservice //启用服务器
R2(config-slb-real)#faildetect //配置检测服务器的可用状态,如果服务器发生故障,SLB将不会把
流量转发到该服务器
R2(config-slb-sfarm)#real 1.1.1.4 //另一个服务器是1.1.1.4
R2(config-slb-real)#weight 1
R2(config-slb-real)#inservice
R2(config-slb-real)#faildetect
R2(config-slb-real)#exit
R2(config-slb-sfarm)#predictor roundrobin //配置采用负载平衡的方式为轮询,即为默认方式
R2(config)#ip slb vserver V_TELNET_SERVER //创建虚拟的服务器
R2(config-slb-vserver)#virtual 1.1.1.100 tcp telnet //虚拟的是Telnet服务器,IP地址为1.1.1.100
R2(config-slb-vserver)#serverfarm TELNET_SERVER //使用前面创建的服务器组
R2(config-slb-vserver)#client 192.168.1.0 255.255.255.0 //限定客户计算机的IP地址
R2(config-slb-vserver)#inservice //启用虚拟的服务器
R3(config)#int f0/0
R3(config-if)#ip add 1.1.1.100 255.255.255.0 secondary //真实服务器上增加虚拟服务器的IP地址
R4(config)#int f0/0
R4(config-if)#ip add 1.1.1.100 255.255.255.0 secondary
说明:
①在分派模式中,SLB路由器、真实服务器地址和虚拟服务器地址都要在同一子网中,并且是二层可达;本实验
中为1.0.0.0/8网络,并且二层连通。
②配置负载平衡时可以采用“roundrobin”轮询方式,也可以采用“leastconns”连接数最少的服务器。
③创建虚拟服务器后,客户端计算机通过该虚拟IP地址来访问真实的服务器。
④采用分派模式时,服务器必须选择下面的一种做法,否则丢弃数据包:
1>在真实服务器上添加环回口地址,并把地址设置为虚拟服务器的IP地址:在R3和R4增加一个环回接口,环回
口地址设为1.1.1.100即可,建议使用这种方法。
2>添加第二个IP地址为虚拟服务器的IP地址:因为R2(SLB服务器)会把目的IP为1.1.1.100的数据包分派到真实
的服务器上,在接口下增加一个“secondary”地址即可;采用这种方式时,R3和R4会报“IP地址重复”
的错误,但是这不影响使用。
实验调试
从R1上反复Telnet 1.1.1.100,检验是否会负载均衡:
R2#show ip slb conns //查看链接的基本信息
R2#show ip slb conns detail //查看连接的详细信息
R2#show ip slb serverfarms //查看服务器组的基本信息
R2#show ip slb serverfarms detail //查看服务器组的详细信息
R2#show ip slb vservers //查看虚拟服务器的基本信息
R2#show ip slb vservers detail //查看虚拟服务器的详细信息
R2#show ip slb stats //显示SLB的统计数
配置定向模式的SLB:
R2(config)#ip route 3.0.0.0 255.0.0.0 1.1.1.3 //添加路由保证R2能把数据包发到R3
R2(config)#ip route 4.0.0.0 255.0.0.0 1.1.1.4
R2(config)#ip slb serverfarm ANOTHER
R2(config-slb-sfarm)#nat server //配置SLB的模式为定向模式,默认为分派模式
R2(config-slb-sfarm)#real 3.3.3.3 //配置真实服务器的IP地址,这里使用R3的环回口作为服务器的地址
R2(config-slb-real)#weight 1
R2(config-slb-real)#inservice
R2(config-slb-real)#faildetect
R2(config-slb-sfarm)#real 4.4.4.4
R2(config-slb-real)#weight 1
R2(config-slb-real)#inservice
R2(config-slb-real)#faildetect
R2(config-slb-real)#exit
R2(config-slb-sfarm)#predictor roundrobin
R2(config)#ip slb vserver V_ANOTHER
R2(config-slb-vserver)#virtual 172.16.1.100 tcp telnet //虚拟Telnet服务器的IP地址
R2(config-slb-vserver)#serverfarm ANOTHER
R2(config-slb-vserver)#client 192.168.1.0 255.255.255.0
R2(config-slb-vserver)#inservice
说明:
①在分派模式中,SLB路由器、真实服务器地址和虚拟服务器地址不需要在同一子网中。
②在定向模式中,路由器会更改客户计算机发来的数据包,把目的IP地址(试验中为172.16.1.100),改为真实服
务器的IP地址(实验中为3.3.3.3或4.4.4.4)。
实验调试
从R1上反复Telnet 1.1.1.100,检验是否会负载均衡:
R2#show ip slb serverfarms detail
R2#show ip slb conns
说明:在配置SLB时,真实服务器上的IP地址和路由是经常被忽视的地方,请根据分派或在定向模式中,SLB路由发送到真实服务器的数据包中的目的IP,以及真实服务器的回包中的目的IP地址,核实SLB路由和真实的服务器是否在相应的路由表。