这篇文章可以结合”Linux Virtual Server实作笔记 (VS/NAT)(VS/TUN)(VS/DR)“来看,会理解的更多一些,:)
1.简介
Fedora项目是由Redhat 公司赞助的开源Linux发行版本,由于Fedora系列界面简单易用,升级方便而且免费,得到笔者和很多Linux爱好者的追捧。
Fedora Core5(代号Bordeaux,内核为2.6.15-1,以下简称FC5)是Fedora最新的稳定版本,界面豪华美观,中文支持极佳。是笔者平常的办公学习用系统。
本
文FC5以作为负载均衡服务器(以下简称Director),以FC5、Sun Solaris10
x86h和FreeBSD5.4作为真实服务器(以下简称RealServer),实现了LVS中的两种负载均衡方式VS/NAT、VS/DR。调度算法
采用了比较简单的加权轮转算法。
由于笔者在VS/TUN方式下得出了新的结论,但正在完善之中,本文暂不使用VS/TUN方式。对于地理分布的系统而言,VS/TUN几乎是唯一的方法。
三种IP负载均衡技术的优缺点比较:
杂项 VS/NAT VS/TUN VS/DR
服务器操作系统 任意 支持隧道 多数(支持Non-arp )
服务器网络 私有网络 局域网/广域网 局域网
服务器数目(100M网络) 10-20 100 多(100)
服务器网关 负载均衡器 自己的路由 自己的路由
效率 一般 高 最高
如何配置Director和RealServer是本文关注的焦点,读者可以将本文当作一篇Howto文档,文中给出了实现的详细方法、配置、和步骤。本文对LVS的原理阐述的非常少,如有需要,请参考章文嵩先生的博士论文和相关文章。
性能也不是本文的重点,事实上文中的很多机器都是在VMware上运行的。
本文中的所有例子,都是采用的Apache服务,这也是LVS经常应用的场合之一。三种操作系统的ip的最后一位,Linux总是160,FreeBSD总是170,Solaris总是180。测试的手段是在客户机(Linux)下运行
links 或elinks命令,用法如下:
links -source
这个手段非常简单,而且快速,笔者实验系统上的每个RealServer上Apache服务器上的缺省首页都不同,其中Linux上会显示"This is 160",连续执行此命令,会明显的看到ipvs在起作用。
本文原稿是用vim编辑的TEX 文件,使用了CJK宏包。文中的拓扑图用Gnome Desktop Project旗下的dia软件软件绘制。用多种LATEX 工具生成dvi、pdf和html版本的文件。笔者相信,即使在排版领域,自由软件也是最出色的。
2. 实现VS/NAT
VS/NAT
是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个
Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。
2.1网络拓扑图
2.2 Director 的配置
Director
的配置如下: 外部地址为192.168.10.254 内部地址为192.168.0.254
LVS在VS/NAT、VS/DR和VS/TUN3种方式下均需要打开ip_forward功能,这可以配置/etc/sysctl.conf
文件,保证其中有如下一行:
net.ipv4.ip_forward = 1
执行:
sysctl -p
可以使配置立即生效,并且重启电脑或network服务后,此设置仍然保存。
ipvs的脚本如下:
ipvsadm -C
ipvsadm -A -t 192.168.10.254:80 -s wlc
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.160:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.170:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.180:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.254:80 -m
2.3Realserver的配置
3台RealServer的配置如下。
2.3.1 Linux Realserver的配置
/etc/sysconfig/network 文件的内容如下:
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.254
网卡配置文件{/etc/sysconfig/network-scripts/ifcfg-eth0的内容如下:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.160
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
2.3.2 FreeBSD Realserver的配置
只需配置/etc/rc.conf,内容如下:
sshd_enable="YES"
ifconfig_lnc0="inet 192.168.0.170 netmask 255.255.255.0"
defaultrouter="192.168.0.254"
hostname="localhost.localdomain"
apache_enable="YES"
2.3.3 Solaris x86 Realserver的配置
在Solaris 上配置主机名称、ip地址、子网以及网关,要比Linux和FreeBSD要复杂,需要配置多个文件。我机器上网卡名为pcn0,如果您的网卡名称不同,就请取代相应的部分。
/etc/hosts
和/etc/hostname.pcn0 联合作用的结果是配置ip地址和子网掩码,在hostname.pcn0
中填写了子网掩码,/etc/netmasks 文件就可以留空了。 /etc/defaultrouter
文件的作用是配置网关。只需要写一个做为网关的ip地址即可。 /etc/nodename文件的内容为hostname。
/etc/hosts文件:
127.0.0.1 localhost loghost
192.168.0.180 solaris
/etc/hostname.pcn0文件:
192.168.0.180/24
/etc/defaultrouter文件
192.168.0.2543 实现VS/DR在很多Internet服务中,例如ftp和http,请求的流量往往远远小于回应的流量,VS/DR方式利用这种非对称的特点,只负责调度请求,而RealServer直接将相应的报文返回给客户机。
VS/DR
方式是通过改写请求报文中的MAC地址部分,来实现的Director和RealServer必需在物理上有一个网卡通过不间断的局域网相连。
RealServer上绑定VIP配置在各自Non-ARP的网络设备上(如lo或tunl),Director的VIP地址对外可见,而
RealServer的VIP对外是不可见的。RealServer的地址即可以是内部地址,也可以是真实地址。
在实现VS/DR的方式
中,我们配置了两台Router来模拟这种非对称路由的情况,RouterA地址为192.168.0.251,
RouterB地址为192.168.0.252。当客户机访问Director时,由RouterA进入,当RealServer返回给客户机信息时,
由RouterB出去,根据实际情况您也可以只使用一台或使用多台Router。只要能确保客户发送信息到Director,而且RealServer可
以发送信息到客户即可。
3.1 网络拓扑图
3.2 Director的配置
Director
为单网卡,其中eth0的地址为192.168.0.254/32,eth0:0为192.168.0.200/32。网关为
192.168.0.251。这里的VIP地址就是192.168.0.200,当客户访问此地址,根据相应的调度算法,会访问到不同的
RealServer。
ipvs的脚本如下:
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.0.200:80 -s wlc
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.160 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.170 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.180 -g
/etc/sysconfig/network 内容:
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.251
/etc/sysconfig/network-scripts/ifcfg-eth0 文件内容:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
NETMASK=255.255.255.0
/etc/sysconfig/network-scripts/ifcfg-eth0:0 内容如下:
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.255
3.3 Realserver的配置
3台RealServer的网关均指向另一路由器,地址为192.168.0.252
3.3.1Linux Realserver的配置
Linux Realserver配置的关键之一在于关闭arp,在Fedora Core5 中,不需要打任何补丁。但要配置/etc/sysctl.conf文件来关闭arp。/etc/sysctl.conf 内容如下:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
在/etc/sysconfig/network-scripts/ifcfg-eth0中配置ip地址和网关。
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.160
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.252
配置VIP的网卡为/etc/sysconfig/network-scripts/ifcfg-lo:0。
DEVICE=lo:0
IPADDR=192.168.0.200
NETMASK=255.255.255.255
ONBOOT=yes
3.3.2 FreeBSD Realserver的配置
FreeBSD上的配置最为简单,只需要配置一个/etc/rc.conf文件即可。lnc0为真实网卡,lo0的别名上配置的网卡为VIP。/etc/rc.conf 内容如下:
....
ifconfig_lnc0="inet 192.168.0.170 netmask 0xffffff00"
ifconfig_lo0_alias0="inet 192.168.10.200 netmask 255.255.255.255"
defaultrouter="192.168.0.252"
hostname="localhost.localdomain"
apache_enable="YES"
....
3.3.3 Solaris x86 Realserver的配置
Solaris上的网卡ip为192.168.0.180/24。lo0:1为VIP 192.168.0.200/32,另外需配置Solaris的缺省网关为192.168.0.252。
/etc/hosts 文件内容如下:
127.0.0.1 localhost loghost
192.168.0.180 test180.tt.com
192.168.0.200 vip
/etc/hostname.pcn0文件内容如下:
192.168.0.180/24
hostname.lo0:1 文件用来配置lo网卡上的第二个P地址(VIP),文件内容
192.168.10.200/32
/etc/defaultrouter 文件内容
192.168.0.50
阅读(1641) | 评论(0) | 转发(0) |