LVS在Fedora Core5上的配置指南(以Linux、FreeBSD、Solaris系统为RealServer)

附件大小
Image icon img3.png6.94 KB
Image icon img12.png11.24 KB
PDF icon lvs.pdf299.71 KB
Image icon lvs_html.jpg165.27 KB

附件中lvs.pdf.gz是pdf 版。格式比本处的要整齐些。lvs.jpg 实际是tar.gz 文件,分页的html格式。(tar.gz不允许上传)

作者: 马路遥 maluyao at gmail dot com
关键字: LVS Linux Fedora 2.6 FreeBSD Solaris

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配置请参考笔者的另一篇英文文章LVS/TUN mode with FreeBSD and Solaris realserve

三种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 http://VIP

这个手段非常简单,而且快速,笔者实验系统上的每个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网络拓扑图

[inline:img3.png]
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
  

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.254

3 实现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 网络拓扑图

[inline:img12.png]
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

4 后记

最近突然对LVS感兴趣了,根据本站上的英文文档。以FC5、FreeBSD 5.4和Solaris 10 x86作为RealServer,以Fedora Core5 Linux上为Load Balance Server,成功配通了VS/NAT、VS/DR和VS/TUN方式,就完成了本文档。

如果文中如有任何错误,无论是技术错误还是笔误,都欢迎email给作者(maluyao at gmail dot com)

本文及其插图的版权为GPL第二版。保留一切权利。

2006年8月11日

Comments

不错啊.希望能尽快把VS/TUN模式的文档也更新.
很想了解VS/TUN模式的LVS在WAN(Internet)上的应用,请指教.

很想了解VS/TUN模式的LVS在WAN(Internet)上的应用,请指教

同感

因毕业找工作不顺 男大学生峨眉山跳崖
2015年6月10日消息,车用尿素设备6月5日,一名游客在四川峨眉山舍身崖上发现一个包裹,车用尿素生产设备包裹内的电脑里留言:当你看到时,我已跳下去,并交代不要让爷爷知道。警方通过包裹内的身份证确认小伙为辽宁人,26岁,已联系到小伙的母亲。车用尿素生产设备厂母亲称儿子大学毕业后找工作不顺已失联数月.6月10日上午,峨眉山金顶舍身崖金刚嘴,救援人员缓缓降下悬崖,试图寻找26岁辽宁籍男子小刚(化名)的踪迹。5日下午,有游客在崖边发现背包,里面有小刚的身份证、笔记本电脑,电脑里面的文档中有疑似小刚的绝笔:当你们看到这些话的时候,我应该已经跳下去了!

,电脑里面的文档中有疑似小刚的绝笔software-rating.com
buy swtor credits  
shareorder.com
gzs168.com  
cheap tera gold
chinatowngate.net :当你们看到这些话的时候,我应该已经跳下去了!

我也很希望了解VS/TUN模式的应用,

Haahhaah. I'm not too bright today. Great post!

Cailnlg all cars, calling all cars, we're ready to make a deal.

Well done arlcite that. I'll make sure to use it wisely. http://pnubyriw.com [url=http://ceceinoifm.com]ceceinoifm[/url] [link=http://swqewe.com]swqewe[/link]

希望能尽快把VS/TUN模式的文档也更新

vip的地址可以和LoadDirector的wan口地址不一样吗?

都一样啊? 哪里不一样了?

Deadly accurate answer. You've hit the bueelsyl!

VS/TUN模式的配置也写好了.请参考:

http://kb.linuxvirtualserver.org/wiki/LVS/TUN_mode_with_FreeBSD_and_Solaris_realserver

(英文)

我用的是LVS/NAT模式 realserver 是windows 2003

IP Virtual Server version 1.0.8 (size=65536)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 61.144.244.18:http lc
-> 192.168.0.137:http Masq 100 1323 1548
-> 192.168.0.134:http Masq 100 1323 1745
-> 192.168.0.135:http Masq 100 1321 1992
-> 192.168.0.136:http Masq 100 1322 1922

ActiveConn InActConn 的意思不明白,请指教

准备晚上拜读!

我按照你的方法设置完毕了,可是主机里怎么都ping不到Virtual IP,只能ping到RS的IP。VM里三台机器都是bridge方式连接的,和主机都在192.168.1.0网段,问题可能出在哪里?

下一步研究一下LVS它工具的联合 使用 !尤其是在集群中!

Freebsd 的lo设备必须设置成noarp, ifconfig lo0 -arp

文中写的noarp的配置我认为不完全对。

...
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
...

这样的配置在网络上到处都是,不知道为什么?


To disable ARP for VIP at real servers, we just need to set arp_announce/arp_ignore sysctls at the interface connected to the VIP network. For example, real servers have eth0 connected to the VIP network with the VIP at interface lo, we will have the following commands.

上面一段文字是从lvs.org的wiki中摘的,意思是"必须配置链接到vip网络的接口的arp_announce/arp_ignore".假设RIP是配置在eth0上,VIP是配置在lo上,那么应该这样配置:
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

我刚刚经历了你的博客,以及该怀有很大。我书签它,跟上伟大的功能!
cream sari kosmetik

roqviim find out this here xTeyY paydayuk HiaAwl pay day loans 8228

nmsphlkv payday loans >:-OOO payday loans 0780 payday loans >:]]

clputh money mutual ZQJmRB pay day loans %-[[[ payday loans 8649

私たちは、ボランティアのグループであり、コミュニティの新たなイニシアティブを開始。あなたのブログは私たちで動作するように貴重な情報を提供しました。
cmp diet

私は最近、しばらくの間、このトピックについての情報を探している、あなたに感謝し、あなたは私がこれまでに判明した最高です harga body slim herbal asli
。しかし、どのような結論に関する?あなたは、ソースに関しては正のはありますか? body slim herbal online

randomness