免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3032 | 回复: 9
打印 上一主题 下一主题

LVS搭建实例 问题讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-19 08:25 |只看该作者 |倒序浏览
本文在撰写过程中参考过tigerlei 的《搭建集群负载均衡系统(学习笔记)》和陆飞(杭州市地方税务局西湖征收管理局)《LVS+Heartbeat+Ldirectord 在 Red Hat 9.0 下的实现》等等诸位大虾的文章,表示感谢,同时感谢开放源代码。

本文将通过实际操作,重点介绍如何在Redhat 9上用LVS构建一个负载均衡集群。
一  安装LVS
Red Hat在 9.0以后,就将ipvsadm这些套件去除,因此如果想使用LVS(Linux Virtual Server),就得自己重新编译核心(kernel)。
1下载所需软件
(1) 下载ipvs补丁包
    从Red Hat 9开始ipvs不再被预先编译到了RedHat发行版的内核中,我们需要从http://www.linuxvirtualserver.org/software/kernel-2.4下载新版的ipvs, 这里我们使用ipvs-1.0.9.tar.gz这个版本.
(2) 下载内核linux-2.4.20.tar.gz
    这里需要强调的是由于所有的ipvs的补丁包都是为标准内核开发的,所以安装ipvs时不能使用RedHat光盘中的Kernel Source,而是需要去下载标准的内核。所以我们从ftp://ftp.kernel.org/pub/linux/kernel/ 得到standard kernel linux-2.4.20.tar.gz
(3)下载ipvs管理工具ipvsadm
    在http://www.linuxvirtualserver.org/ 得到ipvs管理工具ipvsadm-1.21.tar.gz, ipvsadm是设置ipvs转发方式和调度算法的工具.
开始安装
2 安装内核源码
    把linux-2.4.20.tar.gz解压到/usr/src目录,生成了/usr/src/linux目录;如果生成的是/usr/src/linux-2.4.20目录,则要在/usr/src下建立一个连接 ln –s linux-2.4.20 linux(注:不需要建立新的linux文件夹),因为在ipvs-1.0.9中的makefile文件中默认指定Kernel Source的路径为:KERNELSOURCE = /usr/src/linux
3 把ipvs补丁Patch到内核源码中
    把ipvs-1.0.9.tar.gz解压缩到某个目录,如/test,生成了/test/ipvs-1.0.9目录;进入/test/ipvs-1.0.9,依次执行如下命令:
make patchkernel
make installsource
将ipvs的Patch加载到kernel的source中。
4 重新编译支持ipvs的内核
   进入/usr/src/linux目录,分别执行:
make mrproper   为创建新的内和配置做好准备
make menuconfig   进行配置
/1. Code maturity level options
代码成熟等级。此处只有一项:
prompt for development and/or incomplete code/drivers
如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须
把该项选择为Y了;否则可以把它选择为N。
/2. Loadable module support
对模块的支持。这里面有三项:
Enable loadable module support:
除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Set version information on all module symbols:
可以不选它。
Kernel module loader:
让内核在启动时有自己装入必需模块的能力,建议选上。
/3. Processor type and features
CPU类型,选项很多,不一一介绍了,有关的几个如下:
Processor family:
根据你自己的情况选择CPU类型。
High Memory Support:
大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:
协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。
MTTR support:MTTR支持。可不选。
Symmetric multi-processing support:
对称多处理支持。除非你富到有多个CPU,否则就不用选了。
/4. General setup
这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
Networking support:
网络支持,必须选,没有网卡也建议选上。
PCI support:
PCI支持,必选.
PCI access mode:
PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:
热插拔设备支持,可选.
PCMCIA/CardBus support:
PCMCIA/CardBus支持,有PCMCIA就必选了。
System V IPC
BSD Process Accounting
Sysctl support:
以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。
如果你不是使用BSD,就按照缺省吧。
Power Management support:电源管理支持,可选上,特别是笔记本.
Advanced Power Management BIOS support:高级电源管理BIOD支持。
/5. Memory Technology Device(MTD)
MTD设备支持
可不选。
/6. Parallel port support
串口支持。如果不打算使用串口,就别选了。
/7. Plug and Play configuration
即插即用支持。选上吧,可以体验一下Linux下即插即用的感觉。
/8. Block devices
块设备支持,需要针对每个人的具体情况来选:
Normal PC floppy disk support:普通PC软盘支持,一般要选,我的没有,
就没选
XT hard disk support:
Compaq SMART2 support:
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Loopback device support:
Network block device support:网络块设备支持。如果想访问网上邻居的
东西,就选上。
Logical volume manager(LVM)support:逻辑卷管理支持。
Multiple devices driver support:多设备驱动支持。
RAM disk support:RAM盘支持。
/9. Networking options
还有,“Networking options”中还有一些关于网络的选项,要注意按自己的需要去选择:
  <*> Packet socket
  [ ] Packet socket: mmapped IO
  <*> Netlink device emulation
  
  • Network packet filtering (replaces ipchains)
      
  • Network packet filtering debugging
      
  • Socket Filtering
      <*> Unix domain sockets
      
  • TCP/IP networking
      
  • IP: multicasting
      
  • IP: advanced router
      
  • IP: policy routing
      [ ] IP: use netfilter MARK value as routing key
      [ ] IP: fast network address translation
      <M> IP: tunneling
    可以查看到“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
      <M> shortest expected delay scheduling
      <M> never queue scheduling
      --- IPVS application helper
      <M> FTP protocol helper
      另外,“Networking options”中的“IP: Netfilter Configuration"中的选项的所有子项,除了以下两项不要选之外,其它全可以选:
      < > ipchains (2.2-style) support
      < > ipfwadm (2.0-style) support
    /10. Telephony Support
    Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务.详细情况可看看help内容.
    /11. ATA/IDE/MFM/RLL support
    这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧。
    /12. SCSI support
    SCSI设备的支持, 如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了.
    /13. IEEE 1394(FireWire)support
    试验中,没选。
    /14. I2O device support
    在智能Input/Output(I2O)体系接口中使用,不会,用缺省吧.
    /15. Network device support
    网络设备支持。上面选好协议了,现在该选设备.
    Ethernet (10 or 100Mbit) --->
    耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去down驱动了,或者去www.mydrivers.com看看
    /16. Amateur Radio support
    没有,不选.
    /17. IrDA(infrared)support
    这个要红外支持.
    /18. ISDN subsystem
    如果你使用ISDN上网,这个就必不可少了
    /19. Old CD-ROM drivers(not SCSI、not IDE)
    专门为非SCSI/IDE口的光驱做的,但谁还在用那么老的东东啊,自己选吧.
    /20.Input Core Support
    这个选项很重要,除了joystick(游戏遥控杆)建议都选"m".切记!
    /21. Character devices
    字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改:
    I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行
    总线协议。如果你要选择下面的Video For Linux,该项必选。
    Mice:鼠标。如果是笔记本,建议在Bus Mouse Support选上"y".
    Joysticks:手柄。即使在Linux下把手柄驱动起来意义不大
    Watchdog Cards:虽然称为Cards,这个可以用纯软来实现,当然也有
    硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为
    watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新
    启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
    Video For Linux:支持有关的音频/视频卡。
    Ftape, the floppy tape device driver:
    PCMCIA character device support:
    /22.Multimedia devices
    为捕捉audio/video用,如果感兴趣看看help
    /23. File systems
    文件系统。内容太多了,建议在缺省选项的基础上进行修改。
    介绍以下几项:
    Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
    DOS FAT fs support:
    DOS FAT文件格式的支持,可以支持FAT16、FAT32。
    ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
    NTFS file system support:ntfs是NT使用的文件格式,你要在linux下mount ntfs分区的话,就要选上它。记得在mount的时候,
    只有iocharset=cp936可以加上,codepage=936不能加。
    /proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。
    还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、
    Partition Types(分区类型)、Native Language Support(本地语言支持)。
    值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
    /24 Console drivers
    用缺省
    /25 Sound
    你用什么声卡?选选吧.
    /26 USB Support
    很重要,至少要选以下选项(不记得是哪位大虾说的了,好像不选也没问题)
    Support for USB
    UCHI Alternate Deriver (JE) Support
    OCHI (Compaq,iMacs...
    USB Audio...
    USB MIDI...
    USB Human Interface Device (full HID) support
    HID input layer support
    /dev/hiddev raw HID...
    USB LCD device support
    *如果有某些选项那不准,可以参考:
    /usr/src/linux-2.4/Documentation/Configure.help
    也可以search整个系统并看看相关的文字都在哪些文件出现:
    make dep 检测是否有相关的软件包被使用
    make clean 为新内核结构准备源目录树
    make bzImage 创建内核引导映像
    make modules、
    make modules_install 生成模块
    make install安装新的内核到指定位置并重新配置。
    配置grub.conf装载启动信息:
    Default=1     注:默认启动为以前的内核,改为0则可以从现在的新内核启动
    Title Red Hat Linux(2.4.20)
    Root (hd0,0)
    Kernel /vmlinuz-2.4.20 ro root=/dev/hda6(根目录挂载分区)
    Initrd /initrd-2.4.20.img
    到这里新内核就安装完毕了,请重启并用此内核引导系统。
    5  安装ipvs管理工具ipvsadm
        当使用新内核启动后,就可以安装ipvsadm:
    tar xzvf ipvsadm-1.21.tar.gz
    cd ./ipvsadm-1.21
    make
    make install
    安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了。

    [root@leon c]# ipvsadm
    IP Virtual Server version 1.0.9 (size=65536)
    Prot LocalAddressort Scheduler Flags
      ->; RemoteAddressort           Forward Weight ActiveConn InActConn
    到现在为止,支持负载均衡功能的director就安装成功了,接下来我们可以通过ipvsadm来配置一个负载均衡集群。
    二  构建负载均衡集群
    这里我们假设局域网中有两台Http服务器,实际IP分别为Http1:192.168.169.172,Http2: 192.168.169.240这里只说明DR(Direct Routing)方式的LVS负载平衡。
    负载均衡机(实际IP192.168.169.206)上执行的设置
    为了方便我们将所有步骤写成一个shell script.
    #!/bin/bash
    echo "0" > /proc/sys/net/ipv4/ip_forward (关闭ip_forward)
    echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects (开启ICMP Redirects)
    echo "1" >  /proc/sys/net/ipv4/conf/default/send_redirects (开启ICMP Redirects)
    echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects  (开启ICMP Redirects)
    ifconfig eth0:100 192.168.169.205 broadcast 192.168.169.205 netmask 255.255.255.255(设置负载均衡机的虚拟IP为192.168.169.205,100为虚拟机使用的端口号)
    route add -host 192.168.169.205 dev eth0:100 (设置达到虚拟Ip的路由)
    ipvsadm –C (清空ipvsadm table)
    ipvsadm -A -t 192.168.169.205:80 -s wrr (-A添加虚拟的服务器,-t服务器地址端口,-s调度算法,当前调度算法为加权轮叫调度)
    ipvsadm -a -t 192.168.169.205:80 -r 192.168.169.240 -g -w 1(-a添加真实服务器,-t虚拟服务器地址端口,-r真实服务器地址端口,-g网关,默认路由,-w权值)
    ipvsadm -a -t 192.168.169.205:80 -r 192.168.169.172 -g -w 1  
    ipvsadm (检查当前ipvsadm table)
    将此shell script加入到/etc/rc.local中,这样在每次系统启动时都可以自动运行进行设置了。
    三  Realserver(即192.168.169.240和192.168.169.172)上的设置
          安装MS Loopback Adapter,在添加新硬件-〉添加网络适配器-〉microsoft->Loopback adapter,设置Loopback Adapter的IP为192.168.169.205子网掩码可以通过修改注册表设置子网掩码为255.255.255.255, 这在DR系统中工作良好。而且这比每次启动时删除外部路由的方法要方便的多。
    在Windows 2003,中 打开注册表在:
    HKEY_LOCAL_MACHINE\System\CurrentControl\SetServices\Tcpip\Parameters\Interfaces
    找到适当的网络界面IP地址,修改它的子网掩码,(注意修改方式)不需要重启,只需重新激活该网络界面即可。
    四Ldirectord的安装配置
    1.        相关软件下载
        Ldirector(Linux Director Daemon)是Jacob Rief开发的为监控真实服务器的专门软件。它不光可以在HeartBeat中启动还可以单独在命令行启动。
    一些文章介绍在ipvs-x.x.x.tar.gz中已包含了Ldirectord,估计该作者并没有进入到相关目录中去仔细查看,该目录中只有一个README文件,告诉你在哪里可以找到Ldirecrtord的代码。总之我在ipvs-1.0.9.tar.gz中是没有看到Ldirectord 源代码。其实它的源代码是包含在heartbeat-1.0.3.tar.gz中的。下载该文件。
    安装过程中可能会需要下载其他的相关软件如:glid和libnet,可以到ftp://ftp.gtk.org/pub/gtk/v1.2/http://www.packetfactory.net/libnet/下载新的版本。
    2.        安装过程
    进入到hearbeat-1.0.3.tar.gz所在的文件并对文件进行解压。然后:
    cd heartbeat-1.0.3
    ./ConfigureMe configure
    make
    make install
    这时hearbeat和ldirectord都已经安装完毕。
    关于配置文件。heartbeat -1.0.3/ ldirectord/ldirectord.cf文件是Ldirectord的配置文件的范例。拷贝该文件到/etc/ha.d/目录下,修改其内容,并另存为xxx.cf(例如:www.cf,mail.cf),以便在Heartbeat的配置文件haresources中使用。
    checktimeout=3  (一个真实的服务器被认为出错所需的时间间隔)
    checkinterval=1 (发出检查的时间间隔)
    #autoreload=no (自动重载,默认值是no,选yes时配置文件发生变化后就会自动载入)
    #callback=配置文件的路径(用来重载配置文件)
    fallback=127.0.0.1:80 (当所有的真实服务器出错时,web服务重定向的地址)
    #logfile="/var/log/ldirectord.log" (日志文件的目录)
    #logfile="local0"
    #execute=”configuration”(为这个配置文件启动ldirectord的实例)
    quiescent=yes(当选择yes时,一台真实服务器down以后,并不是把它从lvs的表中删除,而是把它的权值设为0,新的链接将不可达)
    # A sample virual with a fallback that will override the gobal setting
    virtual=192.168.169.205:80  (虚拟的ip和端口号)
    real=192.168.7.11:80 gate   ( 真实的服务器)  
    real=192.168.7.12:80 gate
    fallback=127.0.0.1:80 gate
    checktype=negotiate(检测类型,默认为negotiate)
    service=http
    checkport:80 (检查的端口号)
    request="test" (负载平衡机将查询实际server的服务目录下面是不是    有该文件,如果有说明server还是在服务的,没有将认为它已经出错)
    receive="test "
    scheduler=rr  (调度算法)
    #persistent=600
    #netmask=255.255.255.255
    protocol=tcp   (协议)
    3.        启动
    输入 ldirectord start 启动服务,ldirectord stop停止服务,ldirectord rload 重新载入配置信息。
    现在本人试装了双网卡不过还有一些问题,有时间和大家讨论。

    [ 本帖最后由 llsshh 于 2006-5-25 15:33 编辑 ]
  • 论坛徽章:
    0
    2 [报告]
    发表于 2006-05-19 10:31 |只看该作者
    使用了ldirectord 以后 ,就不用在rc.local里面写ipvs的转发规则了。ldirectord自动启动以后转发规则就有了。

    这是我的情况,你可以试试 你是否也可以这样。

    论坛徽章:
    0
    3 [报告]
    发表于 2006-05-19 11:38 |只看该作者
    顶一下,最近也在学习这个

    论坛徽章:
    0
    4 [报告]
    发表于 2006-05-19 18:07 |只看该作者
    发表于: 2006-5-19 10:31    主题:
    使用了ldirectord 以后 ,就不用在rc.local里面写ipvs的转发规则了。ldirectord自动启动以后转发规则就有了。

    这是我的情况,你可以试试 你是否也可以这样。

    我试过了,可以,呵呵.现在正在努力做heartbeat呢.

    论坛徽章:
    0
    5 [报告]
    发表于 2006-05-23 16:06 |只看该作者
    唉,我苦于没有机器,目前是在VM上做的,虚拟3台系统,已经很慢了,1G的内存,其中的一根512M的条子是我跋一位没来上班的兄弟的,在今天之前我把3台机器的关于LVS的东西都调试好了,今天乘他没来做简单的负载均衡的实验,


    到现在我能够实现简单的负载均衡,或者说分流的目的
    director:192.168.0.10
    realserver1:192.168.0.11
    realserver2:192.168.0.12
    VIP:192.168.0.20

    2台realserver都提供同样的web服务,我使用轮值方式,第一次访问http://192.168.0.20/test.html的内容是realserver1,第二次是realserver2,第三次又是realserver1.....................................,为了实验目的,我在2台web服务器的/usr/local/apache/htdocs下,都写了同样名字的一个html文件,但内容不一样

    过几天机器来了,再做后面的实验,还望大家指点啊

    论坛徽章:
    0
    6 [报告]
    发表于 2006-05-25 10:30 |只看该作者
    大家谁能解释一下下面这句的含义:
    linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www
    ldirectord::www这里的www是做什么用的,是ldirectord的配置文件么?
    现在我有点搞不清楚ipvsadm,ldirectord,heartbeat之间的关系,在指定主节点上启动时是不是要把ipvs转发规则,ldirectord,heartbeat同时启动?在备份节点上呢,是三个都启动还是只启动heartbeat?
    各位高手请指点!!!

    [ 本帖最后由 llsshh 于 2006-5-25 11:39 编辑 ]

    论坛徽章:
    0
    7 [报告]
    发表于 2006-05-29 15:07 |只看该作者
    ipvsadm是实现ipvs的配置工具,heartbeat是解决单点故障实现高可用性的工具,
    idirectord是什么就不清楚了,看上面的帖子好象和ipvsadm的功能差不多,不清楚,等高手来解决把

    论坛徽章:
    0
    8 [报告]
    发表于 2006-06-05 08:40 |只看该作者
    各位高手过来看看哦

    论坛徽章:
    0
    9 [报告]
    发表于 2006-06-06 08:48 |只看该作者
    idirectord是监测Real Server是否工作正常的


    如果Real Server 相关的service死掉了,它就会从IPVSADM列表中删除该server

    论坛徽章:
    0
    10 [报告]
    发表于 2006-06-28 08:50 |只看该作者
    发现问题一个,当我不启动hearbeat,而启动ldirectord时,不停的显示监控信息,无法停止,这是ldirectord的哪个参数设置的问题
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP