免费注册 查看新帖 |

Chinaunix

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

redhat as4 lvs安装(转) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-09 10:11 |只看该作者 |倒序浏览

  
博客首页

注册

建议与交流

排行榜
加入友情链接


推荐

投诉
搜索:  
帮助


Anything is possible!
   
jerryswxs.cublog.cn

管理博客

发表文章

留言

收藏夹


  • · 网页收藏

    博客圈

    音乐

    相册

    导入文章

    文章


  • · Linux   }


  • · Service   }


  • · Apache


  • · Dhcp


  • · Dns


  • · Ftp


  • · Nfs


  • · Samba


  • · Sendmail


  • · Shell


  • · System


  • · Datebase   }


  • · Mysql


  • · Oracle


  • · SQL server


  • · Network security


  • · Php


  • · C/C++


  • · 其它


  • · 商业


  • · 生活感悟

    首页

    关于作者




    我的分类




    我的文章分类







    Linux








    Service









    Apache










    Dhcp










    Dns










    Ftp










    Nfs










    Samba










    Sendmail









    Shell









    System








    Datebase








    Mysql









    Oracle









    SQL server








    Network security








    Php








    C/C++








    其它








    商业








    生活感悟





    我导入的文章





    我的图片分类





    我的链接分类







    网页收藏





    我的音乐分类




    redhat as4 lvs安装(转)
    编译内核步骤:(根据情况自带了ipvs模块不用编译内核)
    下载新内核
    解压,进入相应目录
    Make menuconfig
    make dep
      make clean
      make bzImage
      make modules
      make modules_install
    make install
    重启机器,启用新内核
    modprobe -l |grep ipvs
    如果看到如下,就可以了,如果没有还要重编内核,选 上ipvs 模块。
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko
    /lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
    配置基于DR模式Lvs集群
    1、下载ipvsadm管理程序
    http://www.linuxvirtualserver.org/software/
    注意对应自己的内核版本
    ipvsadm-1.24.tar.gz
    ln –s   /usr/src/kernels/2.6.9-5.EL-i686   /usr/src/linux        (******)
    cp   ipvsadm-1.24.tar.gz    /usr/src/
    cd   /usr/src
    tar zxvf ipvsadm-1.24.tar.gz
    cd ipvsadm-1.24
    make && make install
    1.         director机器上需要进行如下配置:
    在/etc/rc.local中添加:
    /sbin/ifconfig lo:0 192.168.1.159 netmask 255.255.255.255 broadcast 192.168.1.159 up
    route add -host 192.168.1.159 dev lo:0
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 >/proc/sys/net/ipv4/conf/default/send_redirects
    echo 1 >/proc/sys/net/ipv4/conf/lo/send_redirects
    /usr/src/ipvsadm-1.24/ipvsadm -C
    /usr/src/ipvsadm-1.24/ipvsadm -A -t 192.168.1.159:443 -s rr
    /usr/src/ipvsadm-1.24/ipvsadm -a -t 192.168.1.159:443 -r 192.168.1.223 -g -w 1
    #/usr/src/ipvsadm-1.24/ipvsadm -a -t 192.168.1.159:21 -r 192.168.1.235 -g -w 1
    /usr/src/ipvsadm-1.24/ipvsadm -a -t 192.168.1.159:443 -r 192.168.1.224 -g -w 1
    /usr/src/ipvsadm-1.24/ipvsadm -A   -t 192.168.1.159:22   -s rr
    /usr/src/ipvsadm-1.24/ipvsadm -a -t 192.168.1.159:22   -r 192.168.1.223 -g -w 1
    /usr/src/ipvsadm-1.24/ipvsadm -a -t 192.168.1.159:22   -r 192.168.1.224 -g -w 1

    在/etc/sysctl.conf 需要添加:
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 1
    net.ipv4.conf.default.send_redirects = 1
    net.ipv4.conf.eth0.send_redirects = 1

    2。real server机器上需要进行如下配置:
    在/etc/sysctl.conf 中需要添加:
    net.ipv4.ip_forward = 0
    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/rc.local中添加:
    echo 0 >/proc/sys/net/ipv4/ip_forward
    /sbin/ifconfig lo:0 192.168.1.159 netmask 255.255.255.255 broadcast 192.168.1.159 up
    /sbin/route add -host 192.168.1.159 dev lo:0
    cd   /usr/src/ipvsadm-1.24
    [root@es ipvsadm-1.24]# ./ipvsadm
    IP Virtual Server version 1.2.0 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
       -> RemoteAddress:Port            Forward Weight ActiveConn InActConn
    TCP   192.168.1.159:https rr
       -> 192.168.1.224:https           Route    1       0           0         
       -> 192.168.1.223:https           Route    1       0           0         
    TCP   192.168.1.159:ssh rr
       -> 192.168.1.224:ssh             Route    1       0           0         
       -> 192.168.1.223:ssh             Route    1       0           1   

    对ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻译,希望
    对ipvsadm 的使用者有一定的帮助。
    为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍
    一下:
    1,virtual-service-address:是指虚拟服务器的ip 地址
    2,real-service-address:是指真实服务器的ip 地址
    3,scheduler:调度方法
    (lna@networksbase.com 翻译 ipvsadm v1.21 2004 年4 月)
    ipvsadm 的用法和格式如下:
    ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
    [timeout]] [-M netmask]
    ipvsadm -D -t|u|f virtual-service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
    [-g|i|m] [-w weight]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
    ipvsadm --set tcp tcpfin udp
    ipvsadm --start-daemon state [--mcast-interface interface]
    ipvsadm --stop-daemon
    ipvsadm -h
    命令选项解释:
    有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
    以。
    -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
    就是增加一台新的虚拟服务器。
    -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
    -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
    -C --clear 清除内核虚拟服务器表中的所有记录。
    -R --restore 恢复虚拟服务器规则
    -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
    -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
    记录。也就是在一个虚拟服务器中增加一台新的真实服务器
    -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
    -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
    -L|-l --list 显示内核虚拟服务器表
    -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
    --set tcp tcpfin udp 设置连接超时值
    --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
    明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
    VRRP 功能。
    --stop-daemon 停止同步守护进程
    -h --help 显示帮助信息
    其他的选项:
    -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
    [vip:port] or [real-server-ip:port]
    -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
    [vip:port] or [real-server-ip:port]
    -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
    -s --scheduler scheduler 使用的调度算法,有这样几个选项
    rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
    默认的调度算法是: wlc.
    -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
    户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
    -M --netmask netmask persistent granularity mask
    -r --real-server server-address 真实的服务器[Real-Server:port]
    -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
    -i --ipip 指定LVS 的工作模式为隧道模式
    -m --masquerading 指定LVS 的工作模式为NAT 模式
    -w --weight weight 真实服务器的权值
    --mcast-interface interface 指定组播的同步接口
    -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
    --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
    --daemon 显示同步守护进程状态
    --stats 显示统计信息
    --rate 显示速率信息
    --sort 对虚拟服务器和真实服务器排序输出
    --numeric -n 输出IP 地址和端口的数字形式
    ipvsadm -L





    REDHAT AS4 安装LVS集群
    1、RedHat AS4已经支持ipvs
    查看你的RedHat系统 是否支持ipvs方法:如果你能在目录/lib/modules/2.*.*-*/kernel/net/ipv4/ipvs中看到ip_vs_*文件,就证明你的系统已经支持ipvs
    2、安装ipvs管理工具ipvsadm
        ipvsadm是配置内核流量分配策略的工具。
        下载
    http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
    安装包
         上传到服务器解压安装
       #tar xzvf ipvsadm-1.24.tar.gz
       #cd ipvsadm-1.24
       #ln -s /usr/src/kernels/2.6.9-5.EL-i686 /usr/src/linux
       #make
       #make install

       *****make时,INCLUDE默认指向/usr/src/linux,编译时会出错,因为找不到/usr/src/linux,所以通过连接,解决此问题。或者通过修改Makefile,将
    修改当前目录和libipvs目录中的Makefile的:
        INCLUDE                = -I/usr/src/linux/include -I.. -I.
       为:
        INCLUDE         = -I/usr/src/kernels/2.6.9-22.EL-i686/include -I.. -I.
       ******

    安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了
    IP Virtual Server version 1.2.0 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    现在,就可以用此服务器作为director服务器,为后端web服务器等作负载均衡了.如下:先为服务器增加虚拟ip地址192.168.1.130
              然后将访问http服务的请求转发到后端的   realserver192.168.1.135和192.168.1.136
    #ifconfig eth0:0 192.168.1.130 netmask 255.255.254.0 broadcast 192.168.1.255 up
    #ipvsadm -A -t 192.168.1.130:80 -s wlc
    #ipvsadm -a -t 192.168.1.130:80 -r 192.168.1.135 -g
    #ipvsadm -a -t 192.168.1.130:80 -r 192.168.1.136 -g
    但此时,因为只有一台director服务器,容易发生单点故障,因为要对此服务器做冗余。采用HA集群来实现
    3。安装heartbeat
    下载软件包(
    www.linux-ha.org
    )
    heartheartbeat-1.2.3.cvs.20050927-1.centos4.i386.rpm
    beat-stonith-1.2.3.cvs.20050927-1.centos4.i386.rpm
    heartbeat-ldirectord-1.2.3.cvs.20050927-1.centos4.i386.rpm
    heartbeat-pils-1.2.3.cvs.20050927-1.centos4.i386.rpm
    ***本版本采用REDHAT AS4,用centos4兼容版本******
      #rpm -ivh heartbeat-pils-1.2.3.cvs.20050927- 1.centos4.i386.rpm
       #rpm -ivh net-snmp-libs-5.1.2-11.i386.rpm
      #rpm -ivh heartbeat-stonith-1.2.3.cvs.20050927-1.centos4.i386.rpm
      #rpm -ivh heartbeat-1.2.3.cvs.20050927-1.centos4.i386.rpm
      #rpm -ivh perl-Net-DNS-0.48-1.i386.rpm
      #rpm -ivh perl-Digest-HMAC-1.01-13.noarch.rpm
      #rpm -ivh perl-Digest-SHA1-2.07-5.i386.rpm
      #rpm -ivh perl-Digest-HMAC-1.01-13.noarch.rpm
      #rpm -ivh perl-Net-DNS-0.48-1.i386.rpm
      #rpm -ivh heartbeat-ldirectord-1.2.3.cvs.20050927-1.centos4.i386.rpm --nodeps
    4。配置
      配置文件有3个,ha.cf haresources authkeys
      在安装完成以后生成模版,位于/usr/share/doc/heartbeat-1.2.3.cvs.20050927-1.centos4下,将这三个文件拷贝至/etc/ha.d/目录下,进行修改
       *********ha.cf*************
    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    keepalive 2
    deadtime 30
    warntime 10
    initdead 120
    udpport 694
    ucast eth0 172.0.0.2   //ucast方式 心跳线网卡 ,对端ip
    auto_failback on
    node lvs1              //HA的两个节点,机器名要在hosts中定义
    node lvs2
    **********************************
    *****************haresources文件*******************
    lvs1 IPaddr::192.168.1.130/23/192.168.1.255 ipvsadm ldirectord::/etc/ha.d/ldirectord.cf
    ***lvs1指HA中的master为LVS1
    ***IPaddr::192.168.1.130/23/192.168.1.255  是HA的虚拟IP/掩码/广播地址
    ***ipvsadm 是用HA来管理的服务(在/etc/init.d和/etc/ha.d/resource中定义的服务启动脚本)
    ***ldirectord::/etc/ha.d/ldirectord.cf 同上,ldirectord指服务,后边是其配置文件。
    ********haresources文件在HA的两个节点中,必须是相同的********
    ************authkeys文件***************************
    定义HA节点间的认证方式,必须将此文件的权限设置为600
    其书写格式如下
    auth
      []
    下面采用CRC认证方式
    auth 1
    1 crc
    *****************************************************
    以上三个文件的配置祥见
    http://www.linux-ha.org/GettingStarted

    5。配置ldirectord为服务转发提供HA冗余
       /usr/share/doc/heartbeat-ldirectord-1.2.3.cvs.20050927/ldirectord.cf文件为配置文件的样本。将此文件拷贝至/etc/ha.d/目录下,可以修改成其他名字,但名字必须与haresources文件中指定的配置文件名相同(如果将文件改名为
    www.cf
    ,则在haresources文件中必须指定为
    www.cf

    ldirectord::/etc/ha.d/www.cf
    配置为两台web服务器(192.168.1.135/192.168.1.136)提供负载均衡
    virtual=192.168.1.130:80
            real=192.168.1.135:80 gate
            real=192.168.1.136:80 gate
            fallback=127.0.0.1:80 gate
            service=http
            request=".testpage"
            receive="ok"
    #       virtualhost=some.domain.com.au
            scheduler=rr
            #persistent=600
            #netmask=255.255.255.255
            protocol=tcp
    virtual指定了虚拟的IP地址
    real指定了后端真正web服务器的IP地址
    fallback
    service指定服务
    request指定测试web服务器状态的请求页面(现指定为.testpage页面)
    receive指定测试页面返回的值所包含的内容(现指定为“ok”)
    ********如果请求页面不存在,或返回值不包含“ok”则认为服务失效,将不再为其转发请求********************************
    scheduler指定了算法,rr为轮训,wlc为权重
    virtualhost指定虚拟主机的域名(如一台realserver上有多个站点,可以通过此域名来区分
    详细请参见网站
    5。在web服务器上指定测试页面
      在192.168.1.135上,执行echo “ok”> /var/www/html/.testpage
      在192.168.1.136上,执行echo “ok”> /var/www/html/.testpage
    6.为web服务器增加虚拟IP地址
      在192.168.1.135上执行
      ifconfig lo:0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up
      在192.168.1.136上执行
      ifconfig lo:0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up
      如果是windows服务器,则需要增加windows loopback网卡(添加删除硬件-添加新硬件--microsoft loopback adapter),并将此网卡地址设置为虚拟IP地址。通过修改注册表,将掩码更改为255.255.255.255,然后重新激活(\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Tcpip\  Parameters\Interfaces,找到相应的网卡,修改掩码)

    7.重新启动HA-ipvsadm服务器,配置完成
    8。****以上为采用DR方式,只能为与virtual IP位于同一网段的REALserver进 行负载均衡。
      ****采用NAT方式,可以将Real Server的内网地址,通过virtual的公网IP地址进行NAT翻译。除以上配置以外,还需在lvs服务器上打开ip_forward
       #echo 1 > /proc/sys/net/ipv4/ip_forward
        ldirectord.cf配置为
    virtual=192.168.1.130:80
            real=192.168.1.135:80 masq
            real=192.168.1.136:80 masq
            fallback=127.0.0.1:80 masq
            service=http
            request=".testpage"
            receive="ok"
    #       virtualhost=some.domain.com.au
            scheduler=rr
            #persistent=600
            #netmask=255.255.255.255
            protocol=tcp
    另外需要将RealServer的默认网关更改为LVS服务器。
    这种方式,效率最低。适用于公网IP不够用的情况
    另外,因为realserver需要指定LVS服务器的内网地址作为网关,但如果指定为主LVS服务器的地址,则主服务器出现故障是,LVS切换至辅LVS服务器,但是realserver的网关仍然指向主LVS服务器,因为切换以后出现问题,导致客户端无法访问web站点。必须在LVS服务器切换的同时,将realserver的网关地址也同时切换。实现方法如下:
    修改/etc/ha.d/haresources文件,加入
    lvs1 IPaddr::172.0.0.10/24/172.0.0.255
    这样,切换lvs服务是会同时起动两个虚拟地址,一个为外网提供访问的地址,一个为realserver提供的网关地址(172.0.0.10)
    *******采用IP/TUN方式。lvs将请求打包,通过Ip/tun方式发送至RealServer,RealServer解包后,直接将请求结果返回给客户端,而不通过lvs。这种方式可以支持lvs与Realserver不在同一网络,可以跨网络,地域来实现负载均衡
      LVS需要启用IP转发
        #echo 1 > /proc/sys/net/ipv4/ip_forward
       ldirectord.cf配置为
    virtual=192.168.1.130:80
            real=192.168.1.135:80 ipip
            real=192.168.1.136:80 ipip
            fallback=127.0.0.1:80 ipip
            service=http
            request=".testpage"
            receive="ok"
    #       virtualhost=some.domain.com.au
            scheduler=rr
            #persistent=600
            #netmask=255.255.255.255
            protocol=tcp
    realserver上
    ifconfig tunl0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up

    9.配置完成后,重新启动,即可工作,但察看日志会有以下错误
    ipvsadm: Applying IPVS configuration failed
    只是因为ipvsadm启动时,默认会从/etc/sysconfig/ipvsadm读取配置文件。因为安装完成后,没有此配置文件,所以会报告错误。只需建立此文件,并将ldirectord。cf的配置按照ipvsadm的命令语法写入此文件即可
    如下:
    #touch /etc/sysconfig/ipvsadm
    #vi /etc/sysconfig/ipvsadm
         -A -t 192.168.1.130:80 -s rr
         -a -t 192.168.1.130:80 -r 192.168.1.135:80 -g/-m/-i -w 1
         -a -t 192.168.1.130:80 -r 192.168.1.136:80 -g/-m/-i -w 1
    ******-g/-m/-i分别代表直接路由方式/NAT方式/IP tunl方式********


    9。测试
      测试分为三部分进行
      1。HA调度器测试
      2。HA+ipvs测试
      3。HA+ipvs+ldirector测试
    10.附录:各机器配置如下
    LVS1:  eth0 192.168.1.131    eth1 172.0.0.1(心跳连接线)
    LVS2:  eth0  192.168.1.133   eth1 172.0.0.2(心跳连接线)
    WEB1:  eth0  192.168.1.135   lo:0 192.168.1.130
    WEB2:  eth0  192.168.1.136   lo:0 192.168.1.130
    VIRTUAL IP:   192.168.1.130

    ipvsadm命令参考
    对ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻译,希望
    对ipvsadm 的使用者有一定的帮助。
    为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍
    一下:
    1,virtual-service-address:是指虚拟服务器的ip 地址
    2,real-service-address:是指真实服务器的ip 地址
    3,scheduler:调度方法
    (
    lna@networksbase.com
    翻译 ipvsadm v1.21 2004 年4 月)
    ipvsadm 的用法和格式如下:
    ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
    [timeout]] [-M netmask]
    ipvsadm -D -t|u|f virtual-service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
    [-g|i|m] [-w weight]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
    ipvsadm --set tcp tcpfin udp
    ipvsadm --start-daemon state [--mcast-interface interface]
    ipvsadm --stop-daemon
    ipvsadm -h
    命令选项解释:
    有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
    以。
    -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
    就是增加一台新的虚拟服务器。
    -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
    -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
    -C --clear 清除内核虚拟服务器表中的所有记录。
    -R --restore 恢复虚拟服务器规则
    -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
    -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
    记录。也就是在一个虚拟服务器中增加一台新的真实服务器
    -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
    -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
    -L|-l --list 显示内核虚拟服务器表
    -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
    --set tcp tcpfin udp 设置连接超时值
    --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
    明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
    VRRP 功能。
    --stop-daemon 停止同步守护进程
    -h --help 显示帮助信息
    其他的选项:
    -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
    [vip:port] or [real-server-ip:port]
    -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
    [vip:port] or [real-server-ip:port]
    -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
    -s --scheduler scheduler 使用的调度算法,有这样几个选项
    rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
    默认的调度算法是: wlc.
    -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
    户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
    -M --netmask netmask persistent granularity mask
    -r --real-server server-address 真实的服务器[Real-Server:port]
    -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
    -i --ipip 指定LVS 的工作模式为隧道模式
    -m --masquerading 指定LVS 的工作模式为NAT 模式
    -w --weight weight 真实服务器的权值
    --mcast-interface interface 指定组播的同步接口
    -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
    --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
    --daemon 显示同步守护进程状态
    --stats 显示统计信息
    --rate 显示速率信息
    --sort 对虚拟服务器和真实服务器排序输出
    --numeric -n 输出IP 地址和端口的数字形式






    测试环境
    操作系统:AS4 UPDATE4
    内核:2.6.9-42.ELsmp
    VirtualIP=192.168.0.100
    Directorserver=192.168.0.200
    realserver=192.168.0.300
    realserver=192.168.0.400
    检查是否集成lvs内核补丁
    modprobe -l |grep ipvs    //如有以下信息,表明您的内核已集成lvs内核补丁
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_sh.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_dh.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_rr.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_sed.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lc.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_nq.ko
    /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
    一、安装ipvsadm
    wget -c
    http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
    tar zxvf ipvsadm-1.24.tar.gz
    cd ipvsadm-1.24
    ls -alh /usr/src/      //查看有没有linux目录,假如没有根据自己的内核版本做个软连接,否则在make时会报错。
    ln -s /usr/src/kernels/2.6.9-42.EL-i686/ /usr/src/linux
    make && make install
    二、DR模式配置
    1、Directorserver服务器
    ifconfig eth0:0 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.100 up
    //执行完后,ping下查看是否启用成功
    /sbin/route add -host 192.168.0.100 dev eth0:0
    echo "1" > /proc/sys/net/ipv4/ip_forward
    ipvsadm -A -t 192.168.0.100:80 -s rr  (假如需要session保持添加-p 默认保持300秒)
    ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.300:80 -g  
    ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.400:80 -g
    执行成功后/var/log/message中会有以下提示:
    Dec  2 17:37:53 localhost kernel: IPVS: Registered protocols (TCP, UDP, AH, ESP)
    Dec  2 17:37:53 localhost kernel: IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
    Dec  2 17:37:53 localhost kernel: IPVS: ipvs loaded.
    Dec  2 17:37:53 localhost kernel: IPVS: [rr] scheduler registered.
    注意:假如服务器加载了iptables,需要加上以下命令。否则会因为防火墙配置问题导致转发包失败。
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -I OUTPUT -p tcp --dport 80 -j ACCEPT
    iptables -I FORWARD -p tcp --dport 80 -j ACCEPT
    2、realserver服务器
    ifconfig eth0:0 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.100 up
    /sbin/route add -host 192.168.0.100 dev eth0:0
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/lo/rp_filter
    3、测试是否成功
    三、TUN模式配置
    1、Directorserver服务器
    ifconfig tunl0 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.100 up
    执行成功后/var/log/message会有以下信息:
    Dec  2 16:08:11 localhost kernel: IPv4 over IPv4 tunneling driver
    /sbin/route add -host 192.168.0.100 dev tunl0
    echo "1" > /proc/sys/net/ipv4/ip_forward
    ipvsadm -A -t 192.168.0.100:80 -s rr  (假如需要session保持添加-p 默认保持300秒)
    ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.300:80 -i  
    ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.400:80 -i
    注意:假如服务器加载了iptables,需要加上以下命令。否则会因为防火墙的配置问题导致转发包失败。
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -I OUTPUT -p tcp --dport 80 -j ACCEPT
    iptables -I FORWARD -p tcp --dport 80 -j ACCEPT
    2、realserver服务器
    ifconfig tunl0 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.100 up
    /sbin/route add -host 192.168.0.100 dev tunl0
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/lo/rp_filter
    3、测试是否成功
    附:lvs控制脚本
    #!/bin/sh
    #set -xv
    about(){
    echo ""
    cat
    VirtualIP=""
    RealSerIP=""
    Ifcfg_cmd=`whereis -b ifconfig | awk -F : '{print $2}'`
    Ipvs_cmd=`whereis -b ipvsadm | awk '{print $2}'`
    Route_cmd=`whereis -b route | awk -F : '{print $2}'`
    ChkVirtualIP=`$Ifcfg_cmd tunl0 | grep 'inet addr' | awk -F : '{print $2}'| awk '{print $1}'`
    ChkRouteIP=`$Route_cmd -n |grep "$VirtualIP"|awk '{ print $1 }'`
    #default Algorithm
    # rr    = 轮叫
    # wrr   = 加权轮叫
    # lc    = 最少链接
    # wlc   = 加权最少链接
    # lblc  = 基于局部性的最少链接
    # lblcr = 带复制的基于局部性最少链接
    # dh    = 目标地址散列
    # sh    = 源地址散列
    # sed   = 最短期望延迟
    # nq    = 无须队列等待
    Algorithm="rr";
    ServicePorts="80"
    #default mode
    # -g                   gatewaying (direct routing) (default)
    # -i                   ipip encapsulation (tunneling)
    # -m                   masquerading (NAT)
    Mode="-i"
    SetSysEnv(){
    echo 1 > /proc/sys/net/ipv4/ip_forward
    if [ "$VirtualIP" != "$ChkVirtualIP" ];then
      $Ifcfg_cmd tunl0 down
      $Ifcfg_cmd tunl0 $VirtualIP broadcast $VirtualIP netmask 255.255.255.255 up
    fi
    if [ "$ChkRouteIP" != "$VirtualIP" ];then
      $Route_cmd add -host $VirtualIP dev tunl0
    fi
    }
    SetIpvsadmRules(){
    echo "Start Loadbalancer...."
    $Ipvs_cmd -A -t $VirtualIP:80 -s $Algorithm  
    for nLine in $RealSerIP
    do
      $Ipvs_cmd -a -t $VirtualIP:${ServicePorts} -r $nLine:${ServicePorts} "$Mode"
    done
    echo ".";echo ".";
    $Ipvs_cmd -l
    }
       
    usage(){
    echo ""
    cat
    ARVG=$1
    case "$ARVG" in
        start)
             SetSysEnv;
          SetIpvsadmRules;
             ;;
        stop)
            echo "Stop Loadbalancer...."
            if `$Ipvs_cmd -C`;then
             echo -e "Loadbalance service\t\t\t [stop]"
             echo -e "\n"
             #$Ipvs_cmd -l ;
            fi
            ;;
        reload)
         $0 stop && sleep 2 && $0 start
         ;;  
        status)  
         $Ipvs_cmd -ln
         ;;
        *)
         about;
         echo -e "\n"
            usage;
            exit 0
            ;;
    esac





      本文介绍了Linux下的cluster软件LVS,并举例介绍一个Linux下的cluster(集群)的安装和实现的详细过程。。
      在各种网络服务普遍应用的今天,随网络速度的提高以及用户的增加,在一些繁忙的场合,单凭一台机器已经无法就能应付所有的网络请求了。为了解决这个问题,许多用户就采 用一组cluster(集群)来代替单一的机器。cluster可以将多台计算机连接起来协同运作以对外提供各种服务,比如Apache、FTP、Mail等。
      
      在Linux上最常见的、也可能是运用最广泛的cluster方案就是LVS(Linux Virtual
      Server),很高兴LVS也是一个中国人创建和开发的开放源码项目。LVS自1998年开始,发展到现在已经是一个比较成熟的技术项目了。有许多比较著名网站和组织都在使用LVS架设的cluster,比如:
    www.linux.com
    、sourceforge.net、
    www.real.com
    等。
      
      下面就开始介绍一下,笔者是如何利用LVS来架设一组cluster来对外提供Apache和FTP服务的。
      
      安装操作系统
      
      笔者选用的是Red Hat 9.0作为些cluster的director机器和所有real server机器的操作系统。RH的安装过程从略,笔者根据实际需要,只安装了少数的包。对于成批安装Linux,建议试试Kickstart来进入批理安装。
    网管论坛bbs_bitsCN_com
      
      编译支持LVS的内核
      
      LVS对Linux的kernel进行了修改和增加,所以要重新编译 linux kernel。我们先从
    http://www.linuxvirtualserver.org
    下载到LVS的内核补丁,对原有内核源代码进行更新,然后重新编译Linux的kernel。
      
      下载LVS的内核补丁时要注意补丁版本要和kernel版本相一致,对于RH9.0,它的Linux核心版本是2.4.20,所以对应内核补丁应该是
    http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz
      
      另外还有一个补丁是用来解决某些情况下ARP协议不能正常工作问题的,从
    http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
    下载。
      
      把上面下载的两个补丁复制到/usr/src目录下,然后执行以下命令:
      
      cd /usr/src
      gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
      cd /usr/src/linux
      patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
      patch -p1 < ../hidden-2.4.20pre10-1.diff
      
      make mrproper
      make menuconfig
      
      执行make menuconfig时,我们将进入一个图形化的界面,在其中可以对Linux Kernel进行详细设置。与LVS相关的kernel选项都在“Networking options”中,进入“Networking options”,可以查看到“IP: Virtual Server Configuration”选项,将其它所有的子选项都选上: 中国网管联盟bitsCN.com
      
      <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
      
      还有,“Networking options”中还有一些关于网络的选项,要注意按自己的需要去选择: 中国网管联盟bitsCN.com
      
      <*> 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
      
      对于kernel的其它选项,你可以根据需要进行选择。kernel的配置是一项很需要经验、细心和耐心的工作,不当的配置可能会导致编译过程中出现错误或者是新的kernel不能驱动原有的设备等问题。
      
      退出保存,然后继续执行以下命令:
      
      make dep
      make clean
      make bzImage
      make modules
      make modules_install
      
      以上各步可能需要一点时间,如果出错请重新检查你的kernel配置,如果没有出现任何错误就继续执行以下命令:
      
      depmod -a
      cp arch/i386/boot/bzImage /boot/vmlinuz-lvs 网管联盟
    [email=bitsCN@com]bitsCN@com[/email]

      cp System.map /boot/System.map-lvs
      
      cd /boot
      rm System.map
      ln -s System.map-lvs System.map
      
      然后修改你的lilo.conf使用新的kernel启动,比如在lilo.conf中以增加下几行以增加关于新的支持LVS的kernel的启动项:
      
      image=/boot/vmlinuz-lvs
      label=lvs
      read-only
      root=/dev/sda1
      
      注:如果使用Grub做启动引导程序的,请自行做对应的修改,以增加关于新的支持LVS的kernel的启动项。
      
      重新启动Linux,选择lvs项进入Linux。
      
      安装ipvsadm
      
      如果正常启动了,就开始安装IP虚拟服务器软件ipvsadm。因为我们用的是RH,所以我们直接下载RPM包进行安装。RPM包从以下地址下载:
      
    http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
      
      用以下命令来安装ipvsadm:
      
      rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
      rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
      
      至此,LVS的安装算是完成了一半。就是说,现在的Linux已经具备了实现LVS的能力了,接下来的问题就是如果使用LVS来构建一组cluster了。要想实现一组cluster,我们就要使用ipvsadm工具进行配置,而在我们开始使用ipvsadm进行配置之前,我们需要了解一些基本的LVS的知识,特别是以下三个要点:LVS的结构、LVS的三种包转发方式、LVS的八种调度算法。只有了解了这些知识以后,我们才能理该如何使用ipvsadm来进行配置。下面简单介绍LVS的这三个要点: 中国网管联盟bitsCN.com
      
      1. LVS的结构
      
      LVS方式的cluster从结构上可分为两部分:前端的负载均衡器(称之为director)和后端的真实服务器(称之为real server)。cluster前端的director将来自外界的请求调度到cluster后端不同的real server去执行。real server负责真正的提供各种应用服务,比如:Web、FTP、Mail等服务。real server的数量可以根据实际需求进行增加、减少。
      2. LVS的三种包转发方式
      
      LVS提供了三种包转发方式:NAT(网络地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的转发模式决定了不同的cluster的网络结构,下面对三种转发方式分别介始:
      
      NAT(网络地址映射)
      
      NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。
      
      IP Tunneling(IP隧道)
      
      director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。
    网管下载dl.bitscn.com
      
      Direct Routing(直接路由)
      
      与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。
      
      3. LVS的八种调度算法
      
      LVS已实现了以下八种调度算法:
      
      1.轮叫调度(Round-Robin Scheduling)
      2.加权轮叫调度(Weighted Round-Robin Scheduling)
      3.最小连接调度(Least-Connection Scheduling)
      4.加权最小连接调度(Weighted Least-Connection Scheduling)
      5.基于局部性的最少链接(Locality-Based Least Connections Scheduling)
      6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
      7.目标地址散列调度(Destination Hashing Scheduling)
      8.源地址散列调度(Source Hashing Scheduling)
      
      注:如果想了解关于以上几点的技术细节,LVS的主页查询。





    安装配置
    这篇文档将解释怎样建立和管理可提供高质量的web和ftp服务的lvs(linux虚拟服务器)集群。
    -------------------------------------------------------------------------------
    目录
    -------------------------------------------------------------------------------
    简介
    一个lvs集群的组件
    lvs集群的背景
    硬件/网络的要求
    lvs路由的必要条件
    集群节点内部连接的必要条件
    安装软件
    配置一个lvs集群
    例子---建立一个5节点的集群
    [目录]
    简介
    linux虚拟服务器集群是一个被特别配置的,可提供高性能web和ftp服务的服务器的集合。在下面的图表中阐述了lvs集群是怎样工作的。到达一个lvs集群的服务请求被寻址到一个虚拟的服务器上。一个公开广告的,完整网域名称与一个浮动的ip地址相关联,这种浮动ip地址能迁移到不同的节点。
    Figure 1. LVS Cluster Interactions
    _/\__/\_
    | |
    / Internet \
    \_ _ _ _/
    \/ \/ \/
    |
    |
    Virtual Server IP/FQDN
    |------------------------------------------|
    |eth0 |eth0
    ------|----- -------|-----
    | Primary | | Backup |
    | Node | | Node | LVS
    | | | | routers
    ------|----- -------|-----
    |eth1 |eth1
    |-------|------------|-----------------|---|
    | | |
    | | |
    | | |
    |----|----| |----|----| |----|----|
    | Web/FTP | | Web/FTP | | Web/FTP | real
    | Node#1 | | Node#2 | ... | Node#n | servers
    |_________| |_________| |_________|
    一个lvs集群由一个或两个路由节点和很多数量的web/ftp服务器(底部)组成。我们把lvs路由节点称作lvs 路由,而将web/ftp服务器的汇集称作真实服务器。真实服务器通过内部网络相连。lvs 路由同时相连着内部网络和公共网络。对于把lvs 路由与内部网络和公共网络连接起来的适配器(图中的eth0和eth1)可以是任何的设备,但是每个路由上的设备必须是相同的。
    在同一时刻,仅有一个路由是激活的。激活的路由扮演的角色是将虚拟服务器上的服务请求重定向到真实服务器。重定向基于四种负载平衡算法规则中的一种(如表一)。激活的路由通过三种被支持方式中的一种(如图二),动态的监视真实服务器的健康情况和每个服务器的工作量。如果有一个真实服务器无效了,在工作的router将停止向这台服务器发送任务直到服务器恢复正常运转。
    lvs 路由定期通过公共网互相交换“我活着的”心脏跳动信息。当备份的节点在与其在一段时间间隔内没有接收到心脏跳动信息,它将启动failover以取代激活的路由。在failover过程中,备份路由将接管失败的路由的浮动ip地址(在集群配置文件中指示),利用arp(地址解析协议)欺骗技术,开始宣布自己为失败节点ip包寻址的目的地。当失败的节点恢复服务时,它将承担热备份这个角色。
    当前,lvs集群支持一个路由选择的方式,net address translation(nat)(将来,tunneling和direct routing将被加入。)。下面的图表阐述了一个nat虚拟服务器是怎样工作的。
    Figure 2. An LVS Cluster Implemented with NAT Routing
    _/\__/\_
    | |
    / Internet \
    \_ _ _ _/
    \/ \/ \/
    |
    |
    |------------------------------------------| public
    | network
    eth0 | virtual server IP address
    --------------------
    | active router |
    | |
    --------------------
    eth1 | NAT router IP address
    |
    |-------|-------------------------|--------| private
    | | network
    | |
    | |
    |----|----------| |-----------|---|
    | real server#1 | | real server#2 |
    | | | | ...
    |_______________| |_______________|
    客户端的服务请求到达一个虚拟服务器的ip地址。这是个公共广告地址,它被网站管理员与一个完整网域名称相关联(例如,lvs.agax.com)。在叙述中只看到了一个虚拟服务器地址,但是也可有多个。一个独立的虚拟服务器地址包含了三个部分: 一个协议(tcp或udp),一个ip地址和端口号。
    虚拟服务器的地址的ip部分是浮动的地址。他们也许是一个通过lvs路由连接到公共网络的设备的别名(例如,eth0:1),或者是每个ip地址与一个单独的设备相联系。nat路由ip地址也是个浮动ip地址,每个在内部网络中的真实服务器使用这个ip地址为默认路由,与活动的路由通信。对于虚拟服务器的地址,nat路由ip地址可以是连接虚拟服务器到真实服务器网络的一个设备的别名(例如,eth1:1),或者也可与一个独立的设备相关联。
    虚拟服务器和nat寻址只可在被激活的路由上才可运行。因此,如果激活状态下的路由失败了,通过接管浮动ip地址,备份路由便可运行虚拟服务器和nat寻址。如图二所示的拓扑学原理,虚拟服务器寻址在eth0设备上运行,而nat路由寻址在eth1上运行。
    核心中的ipvs表映射所有内部网络中从虚拟服务器地址到真实服务器地址的请求。例如,在一个虚拟服务器1.2.3.1上,一个tcp请求被寻址到80端口也许被按指定路线发送到真实服务器192.168.1.2的80端口。在ipvs表中,对任务实际映射到哪个真实服务器上是基于使用某个负载平衡规则。表一描述了被支持的负载平衡方式。
    Table 1. Load-balancing Methods
    名称 描述
    Round robin 将工作平均的分配到服务器
    Least-connections 向较少连接的服务器分配较多的工作
    (IPVS 表存储了所有的活动的连接。)
    Weighted round robin 向较大容量的服务器分配较多的工作。
    容量通过用户指定的砝码来说明,
    可以根据装载信息动态的向上或向下调整。
    Weighted least-connections 考虑它们的容量向较少连接的服务器分配较多的工作。
    容量通过用户指定的砝码来说明,
    可以根据装载信息动态的向上或向下调整。
    当真实服务器处理一个请求时,它将包返回到活动的路由,包中真实服务器的地址也被虚拟服务器的地址所代替。在这种规则下,对于客户的请求,内部网络中的真实服务器被伪装起来。
    [目录]
    组件
    下面介绍一个lvs集群的组件。
    pulse
    这是控制启动其他守护进程的过程所需的。正常情况下它是在系统启动时,在lvs路由上通过/etc/rc.d/init.d/pulse脚本启动。通过pulse,提供一种简单的心跳检测,非活动的lvs路由决定活动的路由是否健康,是否需要启动failover。
    lvs
    lvs守护进程在lvs路由上运行。它读入配置文件,调用ipvsadm来建立和维护ipvs路由选择表。
    nanny
    nanny将监视在活动的lvs路由上运行的守护进程。通过这个守护进程,活动的路由决定每个真实服务器是否健康,同时获得服务器的工作量。它是一个被每个虚拟服务器使用的,独立的在每个真实服务器上运行的进程。
    /etc/lvs.cf
    只是lvs集群的配置文件。直接或间接的,所有的守护进程都从这个文件中获得它们的配置信息。
    piranha
    这是一个图形化的监视,配置和管理lvs集群的工具。通常情况下,你将用这个工具来维护/etc/lvs.cf,重新启动运行的守护进程,监视一个lvs集群。
    ipvsadm
    这个工具用来更新核心中的ipvs路由选择表。lvs守护进程通过调用ipvsadm向ipvs路由选择表添加,改变或删除项目来建立和管理一个lvs集群。
    [目录]
    背景
    lvs集群的背景
    redhat lvs集群是基于linux社团直接的贡献,要不然就是linux社团工程使它的成分更富于灵感,更丰富。
    lvs集群主要是源于wensong zhang的linux虚拟服务器核心选择规则(请看
    http://www.linuxvirtualserver.org
    )。当前redhat lvs支持的功能:
    建立虚拟的服务器:公共网络中的服务请求到达的地址,采用浮动ip地址。
    虚拟服务器上的服务请求到真实服务器上的路由选择。
    负载平衡(看表一)。
    包转发中的网络地址翻译。
    lvs的创新被redhat lvs集群所支持,它以很多的技术为基础,包括网络地址的翻译(nat),ip伪装,端口转发。对于一般性的讨论和相关howto的索引以及有关的主题,请看
    http://www.linas.org/linux/load.html

    [目录]
    硬件/网络的要求
    硬件/网络的要求
    一个lvs集群由一个或两个lvs路由,一些提供web和ftp服务的真实服务器组成。下面描述了连接和硬件的要求。
    lvs路由
    一个基本的lvs路由的要求是一个linux服务器。这台机器要有两个网络适配器,一个与公共网络连接而另一个与真实服务器的内部网络连接。
    如果要有failover功能,你需要有第二个linux服务器来作为备份lvs路由。这台机器也需要两块适配器来连接公共网络和有真实服务器的内部网络。两个lvs路由中的适配器设备必须相匹配。因此,如果主lvs路由设备eth0和eth1分别与公共网和内部网相连,在备份lvs路由中的相同设备也要分别与公共网和内部网连接。注意,备份lvs路由是个纯热候补机器。
    真实服务器
    lvs路由连接的内部网包括一定数量的web/ftp服务器主机。寻址到虚拟服务器上的工作被重定向到真实的服务器,这些服务器可以是各种各样的,运行任何操作系统或是web服务器的计算机平台。
    在配置过程中,你对每个真实服务器的砝码进行赋值。这是一个反映每个服务器处理能力的,与其它服务器相关联在一起的整数(以内存,处理器速度,处理器个数,等等为基础)。它们是成比例的(2/1,20/10,200/100),这很有效。例如,分配的砝码是2000的服务器表示它的计算能力是砝码为1000的服务器的两倍。通过两个有效的任务计划规则(表一所示),以装载信息为基础来分配砝码,从而动态的调节砝码。你应该准备制定一个准确的砝码。
    [目录]
    路由的必要条件
    lvs路由的必要条件
    lvs路由要求redhat linux6.1或更高的版本。在lvs路由上,packet-forwarding,packet defragmenting和ip masquerading必须是激活的。
    激活packet-forwarding和defragmenting,确定/etc/sysconf/network中由这两行:
    FORWARD_IPV4=yes
    DEFRAG_IPV4=yes
    这些行将使/etc/rc.d/rc.sysinit在路由启动时执行:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/ip_always_defrag
    激活ip masquerading,用这个命令:
    ipchains -A forward -j MASQ -s n.n.n.n/type -d 0.0.0.0/0
    其中:
    n.n.n.n是内部子网的真实服务器的连接地址。
    类型是8.16.24.32,他们表示地址的类型和掩码: netmask | type | Subnet
    ~~~~~~~~~~~~~~~~|~~~~~~|~~~~~~~~~~~~~~~
    255.0.0.0 | 8 | Class A
    255.255.0.0 | 16 | Class B
    255.255.255.0 | 24 | Class C
    255.255.255.255 | 32 | Point-to-point
    你也许要将ipchains命令加入到init脚本中去(例如,/etc/rc.d/rc.local),这样在lvs路由系统启动时masquerading将被配置好。
    ipchains是一个在核心的tcp栈中设定的,用来产生和管理防火墙规则的工具。masquerading使用这些规则的一个小的部分,它允许机器通过内部网络的ip与外面的网络通信。使用ipchains对系统的安全有很大的影响。如果你对系统安全有兴趣,请阅读ipchains howto。(
    http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html
    ).
    [目录]
    节点内部连接的必要条件
    在配置过程中,你选择的工具集(rsh或ssh)将被用于在lvs路由中对/etc/lvs.cf
    配置文件进行同步。选择的工具必须在lvs路由中被激活,如此这样每个路由上的root才可在没有管理者介入的情况下登陆到另外的路由上去。
    并且在配置过程中,你也要选择工具(uptime,ruptime,或rup)在活动的路由上用来监视真实服务器上的工作量。在真实服务器上激活这些被选中的工具。如果不能做到这点(例如,你的一个真实服务器是windows/nt web服务器),集群将仍然提供高性能的服务。然而,weighted round robin 和weighted least-connections(表一介绍的)运算规则将受到影响。换句话说,因为装载的信息将不再有效,用户分配的砝码将静态的被应用而不是动态的基于服务器工作量来调整。
    表二描述了在通常情况下,你要在源主机和目标主机上做什么来激活这些工具。要了解详细的情况,请看man文件。注意,用rsh和ssh,root必须能在网络中登陆。为了在redhat linux系统中激活远程登陆,从文件/etc/pam.d/login中移去下面这一行:
    auth required /lib/security/pam_security.so
    这是个安全漏洞,虽然很小。确信你的lvs节点有一个合适的防火墙,这样可以允许值得信赖的节点登陆。
    rsh
    在目标主机上的根目录下创建一个.rhosts文件,其属性为600,注明源 主机和用户(例如,foo.host1.com root)。
    ssh
    获得并安装工具,由于法律原因没有在国际的linux版本发行。在源主机和目标主机上禁止通过所有其它的方式远程登陆,使用./ssh/authorized_keys建立基于rsa的认证,然后启动sshd。
    uptime
    如上所示的方法,在每一个真实服务器上激活rsh或是ssh。
    ruptime
    设置在启动时,每一个lvs路由和真实服务器上启动rwhod。
    rup
    设置在启动时,每一个真实服务器启动rpc.rstatd。
    [目录]
    安装软件
    安装软件
    lvs集群的软件包含三个发行的rpm软件包:
    piranha(程序)
    piranha-gui(图形界面的配置工具)
    piranha-docs(文档) 你可用这命令从6.1的光盘中安装这些软件包:
    #rpm -Uvh /mnt/cdrom/RedHat/RPMS/piranha*.rpm
    因为你的硬件平台的缘故,获得这些软件包合理的升级,请访问redhat的网站
    http://www.redhat.com/corp/support/errata/rh61-errata-updates.html

    [目录]
    配置
    配置一个lvs集群
    你可以从lvs路由通过编辑配置文件和启动或重新启动pulse守护进程,来安装和维护lvs集群。特别的几个步骤是:
    在主路由上,编辑配置文件/etc/lvs.cf。
    拷贝编辑好的配置文件到备份路由上。
    首先在主路由上启动(或重启)pulse守护进程,然后是备份路由。
    你可用你喜欢的编辑器编辑配置文件,从shell中执行这几步。在shell中的启动重启和停止的命令是:
    /etc/rc.d/init.d/pulse start
    /etc/rc.d/init.d/pulse restart
    /etc/rc.d/init.d/pulse stop
    当需要时,pulse守护进程启动或重启其他的lvs集群守护进程,它们的配置文件信息是直接或间接的从当前的配置文件中获得的。
    如果你停止pulse(为了关闭集群),首先要停止在备份路由上的pulse。这将阻止有可能备份路由代替激活的路由。
    作为一种选择,你可用piranha来建立,监视和管理你的lvs集群。可在它的窗口中设置或是改变/etc/lvs.cf中的一些行,这里还有启动,停止和重启集群的按钮。使用piranha的要求是你的lvs路由必须配置好了x window系统。使用piranha的好处是它可同步主路由和备份路由上的配置文件,你可在激活的路由上执行所有的管理任务执行。
    下一章将描述lvs集群的配置文件。如果你要手工配置这些文件,请阅读这一章。如果你选择使用piranha,请看 the section called Using the Piranha Configuration Tool.
    编辑配置文件
    /etc/lvs.cf文件有三个部分。全局部分,在表三中描述,建立lvs路由和特殊的网络和心脏跳动检测参数。这有一组集群的参数。预设虚拟服务器一部分,在表四中描述,定义虚拟服务器的地址,建立虚拟服务器和真实服务器之间的关联,还有特别的任务计划参数。对每个被定义的虚拟服务器都有一组独立的参数。预设真实服务器一部分在表五中描述,定义从每个虚拟服务器到真实服务器的路由选择。对每个虚拟服务器有一组参数。
    Table 3. Setting Global Parameters
    参数 描述
    primary =
    输入通过连接主lvs路由到公共网络的适配器的ip地址。
    backup = backup=
    输入通过连接备份lvs路由到公共网络的适配器的ip地址。
    heartbeat_port =
    输入在主路由和备份路由上使用心脏跳动检测的端口号。
    keepalive =
    输入心脏跳动检测时间间隔是多少秒。
    deadtime =
    输入在等待几秒后宣布无响应路由死亡并且启动failover
    rsh_command = [rsh|ssh]
    输入熟悉的命令以同步主路由和备份路由的配置文件。重点:在表二中讲述,你必须在主路由和备份路由上激活被选择的命令。
    network = [nat|direct|tunnel]
    现在只有网络地址翻译被支持。
    nat_router =
    输入浮动ip地址和nat路由设备。这个ip地址必须是每个真实服务器和活动lvs路由通信的默认路由。连接lvs路由到内部网络上的真实服务器的设备是ip地址的别名(例如,eth1:1)。在两个lvs路由上的设备必须是相同的(例如,eth1)。
    Table 4. Setting Per-Virtual-Server Parameters
    参数 描述
    name
    输入一个唯一定义的虚拟服务器名字
    address =
    输入虚拟服务器的ip地址:一个与全称域名相关联的浮动ip地址
    active = [0|1]
    激活(1)或屏蔽(0)这个ip地址
    load_monitor = [uptime|ruptime|rup]
    选择在活动路由上用于监视真实服务器工作量的工具(默认是uptime)。重点:如表二中所述,除非你在真实服务器上激活选好的命令,使用动态载入信息的运行规则,将被应用于静态的砝码上,而不是通过载入信息来调整砝码。如果你选择默认方式(uptime),这个你为了"rsh_command"而指定的工具,在登陆到真实服务器上时使用。在真实服务器端,这个工具必须被激活。
    timeout =
    输入在真实服务器被确定死亡而移出路由表之前的一个失效时间(默认是10秒)
    reentry =
    输入一个以恢复的真实服务器被重新加入到路由表中之前的持续正常的秒数(默认是180秒)。
    port = [http/80|ftp/21]
    输入在虚拟服务器上的监听端口:http用80(默认)或ftp用21端口。或是你也可输入数字。
    scheduler = [wlc|lc|wrr|rr]
    选择从虚拟服务器上到真实服务器,分配任务的运行规则(默认是wlc)选项在表一中描述。
    Table 5. Setting Per-Real-Server Parameters
    参数 描述
    name
    输入唯一的真实服务器名字
    address =
    输入真实服务器在内部网络中的ip地址
    active = [0|1]
    激活(1)或是屏蔽(0)真实服务器
    weight =
    输入一个指定这台服务器的处理能力的整数(默认是1),它与其它真实服务器相关联。
    使用piranha配置工具
    启动piranha的方法时,成为root用户然后打入piranha &。当你这样做了后,它的主窗口将被打开。窗口由四个标签:
    控制/监视--第一个标签。用于start/stop/restart集群守护进程和监视运行状态。看 the section called Controls/Monitoring Tab.
    Global Settings --
    用于设定主lvs路由和nat路由的ip地址。请看 the section called Global Settings Tab.
    Redundancy --
    设定备份路由的地址和心脏跳动检测的参数。请看 the section called Redundancy Tab.
    Virtual Servers --
    用于设定服务器地址,建立服务器地址和真实的web/ftp服务器主机之间的路由选择。请看 the section called Virtual Servers.
    piranha窗口有一些这样的按钮:
    OK -- 应用改变同时退出窗口。
    Apply -- 应用改变但不退出窗口。
    Close -- 不应用改变而退出窗口。
    Controls/Monitoring Tab
    区域/按钮 描述
    Start/Stop
    当集群守护进程还没有运行时,这个按钮标记为开始:点击它来启动集群。当集群守护进程没有运行时,这个按钮标记为停止:点击它停止集群守护进程。
    Add pulse daemon to this runlevel
    选择在这个运行级中,在系统启动时启动pulse。
    Update information now
    点击来显示当前核心路由表的信息。
    Auto-update
    选择在特定的时间间隔内自动显示核心路由表信息。
    Global Settings Tab
    区域/按钮 描述
    Primary LVS server IP
    包含了lvs主路由的公共ip地址
    NAT Router IP
    包含了与连接虚拟服务器网络到真实服务器网络的网络适配器相关联的浮动ip地址。这个地址被用作真实服务器与虚拟服务器通信的网关。如果这个节点失败,其地址将被lvs备份路由节点所继承。
    NAT Router Device
    与nat路由ip地址相联系的设备的名字。这个通过地址别名来实现。例如,nat路由的ip可以为物理设备eth1化名为eth1:1。
    Sync tool
    选择用来同步主路由和备份路由的工具。你选的工具必须激活,这样lvs路由才可相互登陆而不用输入密码。一般的过程请看表二 。
    Redundancy Tab
    区域/按钮 描述
    Enable redundant server
    选择激活failover。
    Redundant LVS server
    IP 包含备份路由的公共ip。
    Heartbeat interval (seconds)
    包含了两次心脏跳动检测之间的秒数:备份lvs节点检测主lvs节点看是否还活着的时间间隔。
    Assume dead after (seconds)
    如果时间用完了主lvs节点还无响应,备份路由将启动failover。在failover过程中,备份路由接管所有的在主lvs路由上处理的虚拟服务器的ip,无条件广播arps,通知它的mac地址作为寻址到主路由包的目标地址。
    Heartbeat port
    输入在主路由和备份路由中用于心跳检测的端口。
    Virtual Servers
    屏幕显示一排当前被定义的虚拟服务器的信息。点击一排信息来选择它。在屏幕右边的按钮是应用当前选择的虚拟服务器。点击删除是移去选择的虚拟服务器。
    区域/按钮 描述
    Status
    显示激活或屏蔽。点击屏蔽来关闭一个激活的虚拟服务器。点击激活来启动一个选择的虚拟服务器。改变状态后,你必须要重启pulse守护进程来使改变生效。要这样做的话,到controls/monitoring tab,点击停止按钮(它的名字变为了启动),而后点击启动。
    Name
    包含一个唯一定义的虚拟服务器名。
    Port
    包含监听到来的服务请求的端口。
    Protocol
    当前只有tcp被支持。
    Add/Edit a Virtual Server
    点击添加按钮来创建一个新的未被定义的虚拟服务器。点击编辑按钮(或是双击这排信息)来定义或修改一个虚拟服务器。点击真实服务器标签来观看或是修改被选好的与真实服务器相关联的虚拟服务器。
    区域/按钮 描述
    Name
    输入对这个虚拟服务器唯一定义的名字
    Application
    点击选择http或是ftp
    Port
    输入监听到来的服务请求的端口
    Address
    输入服务请求到达的浮动ip地址。这个服务请求到达的地址已和一个全称的域名相关联。
    Device
    一个连接lvs路由到公共网络,其浮动ip地址通过ip别名相关联的适配器设备的名字(例如,eht0:1)。如果活动路由失败,在这期间虚拟服务器地址和端口将转到在备份路由上的对应设备上,从而备份路由成为活动路由。
    Re-entry Time
    输入一个以恢复的真实服务器被重新加入到路由表中之前的持续正常的秒数(默认是180秒)。
    Service timeout
    输入一个以秒为单位的时间,在这段时间里真实服务器必须响应一个重定向请求。如果主机超过了这个时间,它将被宣布为死亡并从集群中移除。
    每个两秒钟在活动路由上运行的nanny进程发送一个心脏跳动检测(必要的ping连接)到每个真实服务器。如果成功了,服务连接(必要的一个telnet连接)将被送到一个特定的服务端口。如果nanny收到从真实服务器返回的任何响应,真实服务器和提供的服务被推定为活着。如果无响应服务超时超过了有效秒数,那么这个真实服务器将被推定为死亡并被一除出路由表。但是nanny通过每两秒钟发送一次心跳检测继续监视着服务器和它提供的服务。如果,在一次成功的ping以后,一个被移出去的服务器保持"re-entery time"时间的存活,它将被重新加入到核心路由表中去。
    Load monitoring tool
    选择用于决定在真实服务器上工作量的工具(uptime,ru,或ruptime)。在表二的表格中描述了激活这些工具的一般过程。
    Scheduling
    选择从虚拟服务器到真实服务器上的请求的路由选择规则。在表以中描述了选项。
    Real Servers
    屏幕显示了每个当前被定义的真实服务器的一排信息。点击这一排信息来选定它。屏幕右边的按钮是应用当前选择的一排。点击删除来移去一个被选择的真实服务器。
    区域/按钮 描述
    Status
    显示激活或屏蔽。点击屏蔽来关闭一个激活的虚拟服务器。点击激活来启动一个选择的虚拟服务器。改变状态后,你必须要重启pulse守护进程来使改变生效。要这样做的话,到controls/monitoring tab,点击停止按钮(它的名字变为了启动),而后点击启动。
    Name
    显示服务器在集群中的名字。
    Address
    显示服务器的ip地址。
    Add/Edit a Real Server
    点击添加按钮来创建一个新的未被定义的真实服务器。点击编辑按钮(或是双击这排信息)来定义或修改一个真实服务器。
    区域/按钮 描述
    Name
    输入一个描述名字。
    Address
    输入一个才内部网络中的真实服务器的ip地址。
    Weight
    输入一个指定这台服务器的处理能力的整数,它与其它真实服务器相关联。
    [目录]
    例子
    例子---建立一个5节点的集群
    这一节将一步步地介绍怎样建立一个由两个lvs路由和三个web/ftp服务器的集群。首先,收集信息然后照着接下来一节说明的一样来建立五个系统。然后是从shell方式对这个例子加以补充(在 the section called Implementing the Example from the Shell中解释)或是启动一个图形界面的配置工具(在 the section called Implementing the Example with Piranha说明) 。
    图三显示了在你装完lvs路由和真实服务器后将出现的网络。所有显示的网络地址是为了阐述得更明白。
    Figure 3. Layout of the Example Network
    |-------|------------------------------------------|---------| Public network
    |eth0=1.2.3.2 |eth0=1.2.3.3
    |eth0:1=1.2.3.1 (vs1) |
    ------|----- -------|-----
    | active | | backup |
    | router | | router |
    | | | |
    ------|----- -------|-----
    |eth1=192.168.1.1 |eth1=192.168.1.2
    |eth1:1=192.168.1.254 (NAT router) |
    |-------|-|------------------|-----------------|---|----------| Private network
    |eth0=192.168.1.3 |eth0=192.168.1.4 |eth0=192.168.1.5
    | | |
    |---------| |---------| |---------|
    | rs1 | | rs2 | | rs3 |
    |_________| |_________| |_________|
    初步设置
    从网络管理员那获得虚拟服务器的ip地址。在我们的例子中将是1.2.3.1。在lvs集群中的服务请求将被寻址到一个和这个地址相关联的全称域名上。
    定位五个服务器和指定它们的角色:1个主lvs路由,1个备份路由,3个真实服务器。lvs路由必须装上了linux系统,运行red hat 6.1或更高。真实服务器可以是任何平台,运行任何操作系统和web服务器。
    3-7步建立lvs路由。
    在每个lvs路由上,装有两个以太网卡,eth0和eth1。在eth0上建立一个公共ip界面和一个内部ip界面。公共界面的设备(eth0)是用于心脏跳动检测的设备。虚拟服务器的地址是这个设备的别名。
    Primary node Backup node
    eth0 1.2.3.2 1.2.3.3
    eth1 192.168.1.1 192.168.1.2
    为路由上连接活动路由到内部网络的设备(eth1)制定一个ip地址(192.168.1.254)。这个浮动ip地址将在路由设备上化名为eth1:1,同时将成为每个真实服务器与活动路由通信的默认路由和内部网络的网关。
    在每个lvs路由上:
    激活package forwarding。在系统启动时执行,确信文件/etc/sysconf/newwork包含了这以行forward_ipv4=yes。激活package forwarding而不用重启,登陆为root输入下面命令:
    echo "1" > /proc/sys/net/ipv4/ip_forward
    激活packet defragmenting。在系统启动时便执行,确信文件/etc/sysconf/network包含这一行defrag_piv4=yes。激活package defragmenting而不用重启,登陆为root输入下面的命令:
    echo "1" > /proc/sys/net/ipv4/ip_always_defrag
    伪装内部网络。输入下面这条命令到/etc/rc.d/rc.local:
    ipchains -A forward -j MASQ -s 192.168.1.0/24 -d 0.0.0.0
    决定是否使用类似于rsh或ssh进行lvs集群文件同步。验证你的选择是否安装,这样lvs路由才可登陆到其他的路由上,而不用管理者介入。在这个例子中,我们选择rsh。
    在每个lvs路由上,验证lvs集群软件是否装好。
    8-11步是建立真实服务器。
    在每个真实服务器上,装有一个以太网卡,eth0。照第3步在同一个内部子网络中建立一个ip地址,为每个服务器分配一个砝码,这是一个反映每个服务器处理能力的,与其它服务器相关联在一起的整数。在这个例子中,rs1有两倍于rs2和rs3的处理能力(两个处理器)
    rs1 rs2 rs3
    eth0 192.168.1.3 192.168.1.4 192.168.1.5
    weight 2000 1000 1000
    在每个真实服务器上验证在第四步中注明的地址是它与活动路由通信的默认路由。
    决定用哪个程序(uptime,ruptime,rup)在活动路由上运行,用来监视真实服务器上的工作量。如果选择uptime,每个lvs路由必须在无管理员介入的情况下与每个真实服务器连接,在第6步中使用你选择的类似的工具。得到一般的激活指令请看表二。如果你选择的工具不能被激活(例如,其中一个真实服务器是一个nt系统),使用动态装载信息的计划规则仍将工作,但是用户分配的砝码将静态的被应用而不是动态的基于服务器工作量来调整。
    验证每个真实服务器上安装和配置了http服务。注意:真实服务器必须监听与虚拟服务器对应的同一个端口(如例中的80)。
    验证(例中用telnet或ping)每个真实服务器可到达公共网络上的主机。如果一个在内部网络上的真实服务器不可达到,这预示着服务器与活动路由间的通信失败了。看8和9步。
    确定运行参数。对于这里的一些参数,你也许需要测试一定的时间来获得一个恰当的值。在这个例子中,我们用了列表中的值。
    取值 参数描述
    1050
    主路由和备份路由心跳检测的监听端口。
    2
    心跳检测的时间间隔秒数 。
    10
    宣布无响应路由死亡并且启动failover的等待秒数。
    10
    无响应真实服务器被确定死亡而移出路由表的等待秒数 。
    180
    当一个真实服务器被移出路由表后开始又有了响应,在被重新加入到路由表的等待秒秒数。
    wlc
    使用weight least-connections负载平衡规则(考虑其动态调整的砝码,分配较多的工作给不忙的服务器)。对选项的描述请看表一。
    http
    应用程序。可选项有ftp。
    80
    虚拟服务器上的端口数。在虚拟服务器上的监听端口,在真实服务器上也是同样的。
    现在我么准备补充一个例子。你可向下一节中的例子一样在shell下工作。或者你也可象例( the section called Implementing the Example with Piranha.)中的用图形界面的配置工具。
    补充一个shell下配置的例子
    用你喜欢的编辑器,打开/etc/lvs.cf文件,设置如下所示的值。 右边的数字是在 the section called Preliminary Setup 中讨论配置的每步的链接。
    # Global section
    primary = 1.2.3.2 3
    backup = 1.2.3.3 3
    keepalive = 2 13
    deadtime = 10 13
    heartbeat_port = 1050 13
    rsh_command = rsh 6
    network = nat
    nat_router = 192.168.1.254 eth1:1 4
    # Per-virtual-server section
    virtual server vs1 { 8
    address = 1.2.3.1 1
    active = 1
    load_monitor = ruptime 10
    timeout = 10 13
    reentry = 180 13
    port = 80 13
    scheduler = wlc 13
    # Per-real-server section
    server rs1 { 8
    address = 192.168.1.3 8
    active = 1
    weight = 2000 8
    }
    server rs2 { 8
    address = 192.168.1.4 8
    active = 1
    weight = 1000 8
    }
    server rs3 { 8
    address = 192.168.1.5 8
    active = 1
    weight = 1000 8
    }
    }
    拷贝编辑好的配置文件到备份路由上。
    在主路由上,用这个命令启动pulse守护进程:
    /etc/rc.d/init.d/pulse start
    在备份路由上启动pulse守护进程。
    补充一个用piranha的例子
    在主路由上,登陆为root,打入piranha &启动图形配置工具。
    点击global settings标签输入下面的值:
    Field Enter: See Step:
    Primary LVS server IP 1.2.3.2 3
    NAT Router IP 192.168.1.254 4
    NAT Router Device eth1:1 4
    Sync tool rsh 6
    点击redundancy标签输入下面的值:
    Field Enter: See Step:
    Enable Redundant server (select)
    Redundant LVS server IP 1.2.3.3 3
    Heartbeat interval 2 13
    Assume dead after 10 13
    Heartbeat port 1050 13
    点击virtual servers标签。在标签上,点击add,然后是edit,输入下面
    的值:
    Field Enter: See Step:
    Name vs1
    Application http 13
    Port 80 13
    Address 1.2.3.1 1
    Device eth0:1 3
    Re-entry time 180 13
    Service timeout 10 13
    Load monitoring tool ruptime 10
    Scheduling weighted least-connections 13
    点击real servers标签。在标签上,点击add,然后是edit,输入下面的值:
    Field Enter: See Step:
    Name rs1 8
    Address 192.168.1.3 8
    Weight 2000 8
    在rs2和rs3上重复第5步。对于他们来说,输入砝码为1000,这表示了rs1的运算能力是rs2和rs3的两倍。
    点击close回到real servers标签。在这里,选择每一个真实服务器点击activate来激活它。
    点击close回到virtual servers标签。在这里,选择每一个虚拟服务器点击activate来激活它。
    点击controls/monitoring标签:
    点击start按钮(名字改变为stop)。
    如果你选中"add pulse daemon to this runlevel"集群将在系统启动时启动,在piranha启动时,上面的按钮通常将被标为stop。
    登陆到备份路游泳这条命令启动pulse:
    /etc/rc.d/init.d/pulse start
    如果你正确的输入了上面所示的值,piranha将在配置文件最后产生一个如下结构的信息,这些将在虚拟服务器和它的真实服务器上使用。
    network = nat
    nat_router = 192.168.1.254 eth1:1
    virtual vs1 {
    address = 1.2.3.1 eth0:1
    active = 1
    scheduler = wlc
    load_monitor = ruptime
    timeout = 5
    server rs1 {
    address = 192.168.1.3
    active = 1
    weight = 2000
    }
    server rs2 {
    address = 192.168.1.4
    active = 1
    weight = 1000
    }
    server rs3 {
    address = 192.168.1.5
    active = 1
    weight = 1000
    }
    }
    [目录]
    简单实例
    通过Linux LVS,实现WWW,Telnet服务的负载平衡。这里实现Telnet集群服务仅为了测试上的方便。
    LVS有三种负载平衡方式,NAT(Network Address Translation),DR(Direct Routing),IP Tunneling。其中,最为常用的是DR方式,因此这里只说明DR(Direct Routing)方式的LVS负载平衡。
    网络拓扑结构。
    为测试方便,4台机器处于同一网段内,通过一交换机或者集线器相连。实际的应用中,最好能够将虚拟服务器vs1和真实服务器rs1, rs2置于于不同的网段上,即提高了性能,也加强了整个集群系统的安全性。
    服务器的软硬件配置
    首先说明,虽然本文的测试环境中用的是3台相同配置的服务器,但LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载情况,调整负载分配策略,充分利用集群环境中的每一台服务器。
    这3台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的rs1,rs2,然后由rs1,rs2分别处理。
    client为客户端测试机器,可以为任意操作系统。
    4台服务器的操作系统和网络配置分别为:
    vs1: RedHat 6.2, Kernel 2.2.19
    vs1: eth0 192.168.0.1
    vs1: eth0:101 192.168.0.101
    rs1: RedHat 6.2, Kernel 2.2.14
    rs1: eth0 192.168.0.3
    rs1: dummy0 192.168.0.101
    rs2: RedHat 6.2, Kernel 2.2.14
    rs2: eth0 192.168.0.4
    rs2: dummy0 192.168.0.101
    client: Windows 2000
    client: eth0 192.168.0.200
    其中,192.168.0.101是允许用户访问的IP。
    虚拟服务器的集群配置
    大部分的集群配置工作都在虚拟服务器vs1上面,需要下面的几个步骤:
    重新编译内核。
    首先,下载最新的Linux内核,版本号为2.2.19,下载地址为:
    http://www.kernel.org/
    ,解压缩后置于/usr/src/linux目录下。
    其次需要下载LVS的内核补丁,地址为:
    http://www.linuxvirtualserver.org/software/ipvs-1.0.6-2.2.19.tar.gz
    。这里注意,如果你用的Linux内核不是2.2.19版本的,请下载相应版本的LVS内核补丁。将ipvs-1.0.6-2.2.19.tar.gz解压缩后置于/usr/src/linux目录下。
    然后,对内核打补丁,如下操作:
    [root@vs2 /root]# cd /usr/src/linux
    [root@vs2 linux]# patch -p1
    下面就是重新配置和编译Linux的内核。特别注意以下选项:
    1 Code maturity level options--->
    *
  • Prompt for development and/or incomplete code/drivers
    2 Networking部分:
  • Kernel/User netlink socket
  • Routing messages
    Netlink device emulation
    *
  • Network firewalls
  • Socket Filtering
    Unix domain sockets
    *
  • TCP/IP networking
  • IP: multicasting
  • IP: advanced router
    [ ] IP: policy routing
    [ ] IP: equal cost multipath
    [ ] IP: use TOS value as routing key
    [ ] IP: verbose route monitoring
    [ ] IP: large routing tables
    [ ] IP: kernel level autoconfiguration
    *
  • IP: firewalling
    [ ] IP: firewall packet netlink device
    *
  • IP: transparent proxy support
    *
  • IP: masquerading
    --- Protocol-specific masquerading support will be built as modules.
    *
  • IP: ICMP masquerading
    --- Protocol-specific masquerading support will be built as modules.
    *
  • IP: masquerading special modules support
    *  IP: ipautofw masq support (EXPERIMENTAL)(NEW)
    *  IP: ipportfw masq support (EXPERIMENTAL)(NEW)
    *  IP: ip fwmark masq-forwarding support (EXPERIMENTAL)(NEW)
    *
  • IP: masquerading virtual server support (EXPERIMENTAL)(NEW)
  • IP Virtual Server debugging (NEW)  IPVS: round-robin scheduling (NEW)
    *  IPVS: weighted round-robin scheduling (NEW)
    *  IPVS: least-connection scheduling (NEW)
    *  IPVS: weighted least-connection scheduling (NEW)
    *  IPVS: locality-based least-connection scheduling (NEW)
    *  IPVS: locality-based least-connection with replication scheduling (NEW)
    *
  • IP: optimize as router not host
    *  IP: tunneling
    IP: GRE tunnels over IP
  • IP: broadcast GRE over IP
  • IP: multicast routing
  • IP: PIM-SM version 1 support
  • IP: PIM-SM version 2 support
    *
  • IP: aliasing support
    [ ] IP: ARP daemon support (EXPERIMENTAL)
    *
  • IP: TCP syncookie support (not enabled per default)
    --- (it is safe to leave these untouched)
    IP: Reverse ARP
  • IP: Allow large windows (not recommended if  The IPv6 protocol (EXPERIMENTAL)
    上面,带*号的为必选项。
    然后就是常规的编译内核过程,不再赘述,请参考编译 Linux 教程
    在这里要注意一点:如果你使用的是RedHat自带的内核或者从RedHat下载的内核版本,已经预先打好了LVS的补丁。这可以通过查看/usr/src/linux/net/目录下有没有几个ipvs开头的文件来判断:如果有,则说明已经打过补丁。
    编写LVS配置文件,实例中的配置文件如下: #lvs_dr.conf (C) Joseph Mack
    mack@ncifcrf.gov

    LVS_TYPE=VS_DR
    INITIAL_STATE=on
    VIP=eth0:101 192.168.0.101 255.255.255.0 192.168.0.0
    DIRECTOR_INSIDEIP=eth0 192.168.0.1 192.168.0.0 255.255.255.0 192.168.0.255
    SERVICE=t telnet rr rs1:telnet rs2:telnet
    SERVICE=t www rr rs1:www rs2:www
    SERVER_VIP_DEVICE=dummy0
    SERVER_NET_DEVICE=eth0
    #----------end lvs_dr.conf------------------------------------
    将该文件置于/etc/lvs目录下。
    使用LVS的配置脚本产生lvs.conf文件。该配置脚本可以从
    http://www.linuxvirtualserver.org/Joseph.Mack/configure-lvs_0.8.tar.gz
    单独下载,在ipvs-1.0.6-2.2.19.tar.gz包中也有包含。
    脚本configure的使用方法:
    [root@vs2 lvs]# configure lvs.conf
    这样会产生几个配置文件,这里我们只使用其中的rc.lvs_dr文件。
    修改/etc/rc.d/init.d/rc.local,增加如下几行:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/ip_always_defrag
    # 显示最多调试信息
    echo 10 > /proc/sys/net/ipv4/vs/debug_level
    配置NFS服务。这一步仅仅是为了方便管理,不是必须的步骤。
    假设配置文件lvs.conf文件放在/etc/lvs目录下,则/etc/exports文件的内容为:
    /etc/lvs ro(rs1,rs2)
    然后使用exportfs命令输出这个目录:
    [root@vs2 lvs]# exportfs
    如果遇到什么麻烦,可以尝试:
    [root@vs2 lvs]# /etc/rc.d/init.d/nfs restart
    [root@vs2 lvs]# exportfs
    这样,各个real server可以通过NFS获得rc.lvs_dr文件,方便了集群的配置:你每次修改lvs.conf中的配置选项,都可以即可反映在rs1,rs2的相应目录里。
    修改/etc/syslogd.conf,增加如下一行: kern.* /var/log/kernel_log
    这样,LVS的一些调试信息就会写入/var/log/kernel_log文件中.
    real server的配置
    real server的配置相对简单,主要是是以下几点:
    配置telnet和WWW服务。telnet服务没有需要特别注意的事项,但是对于www服务,需要修改httpd.conf文件,使得apache在虚拟服务器的ip地址上监听,如下所示:
    Listen 192.168.0.101:80
    关闭real server上dummy0的arp请求响应能力。这是必须的,具体原因请参见ARP problem in LVS/TUN and LVS/DR(
    http://www.linuxvirtualserver.org/arp.html
    )。关闭dummy0的arp响应的方式有多种,比较简单地方法是,修改/etc/rc.d/rc.local文件,增加如下几行: echo 1 > /proc/sys/net/ipv4/conf/all/hidden
    ifconfig dummy0 up
    ifconfig dummy0 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.0 up
    echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
    再次修改/etc/rc.d/rc.local,增加如下一行:(可以和步骤2合并)
    echo 1 > /proc/sys/net/ipv4/ip_forward
    四 LVS的测试
    好了,经过了上面的配置步骤,现在可以测试LVS了,步骤如下:
    分别在vs1,rs1,rs2上运行/etc/lvs/rc.lvs_dr。注意,rs1,rs2上面的/etc/lvs目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上的/etc/lvs/rc.lvs_dr复制到rs1,rs2上,然后分别运行。
    确保rs1,rs2上面的apache已经启动并且允许telnet。
    然后从client运行telnet 192.168.0.101,如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)
    [guest@rs1 guest]$-----------说明已经登录到服务器rs1上。
    再开启一个telnet窗口,登录后会发现系统提示变为:
    [guest@rs2 guest]$-----------说明已经登录到服务器rs2上。
    然后在vs2上运行如下命令:
    [root@vs2 /root]ipvsadm
    运行结果应该为:
    IP Virtual Server version 1.0.6 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.0.101:telnet rr
    -> rs2:telnet Route 1 1 0
    -> rs1:telnet Route 1 1 0
    TCP 192.168.0.101:www rr
    -> rs2:www Route 1 0 0
    -> rs1:www Route 1 0 0
    至此已经验证telnet的LVS正常。
    然后测试一下WWW是否正常:用你的浏览器查看
    http://192.168.0.101/
    是否有什么变化?为了更明确的区别响应来自那个real server,可以在rs1,rs2上面分别放置如下的测试页面(test.html):  

    我是real server #1 or #2


    然后刷新几次页面(
    http://192.168.0.101/test.html
    ),如果你看到“我是real server #1”和“我是real server #2”交替出现,说明www的LVS系统已经正常工作了。
    但是由于Internet Explore 或者Netscape本身的缓存机制,你也许总是只能看到其中的一个。不过通过ipvsadm还是可以看出,页面请求已经分配到两个real server上了,如下所示:
    IP Virtual Server version 1.0.6 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.0.101:telnet rr
    -> rs2:telnet Route 1 0 0
    -> rs1:telnet Route 1 0 0
    TCP 192.168.0.101:www rr
    -> rs2:www Route 1 0 5
    -> rs1:www Route 1 0 4
    或者,可以采用linux的lynx作为测试客户端,效果更好一些。如下运行命令:
    [root@client /root]while true; do lynx -dump
    http://10.64.1.56/test.html
    ; sleep 1; done
    这样,每隔1秒钟“我是realserver #1”和“我是realserver #2”就交替出现一次,清楚地表明响应分别来自两个不同的real server。
    五调试技巧
    如果您的运气不好,在配置LVS的过程中也许会遇到一些困难,下面的技巧或许有帮助:
    首先确定网络硬件没有问题,尤其是网线,ping工具就足够了。
    使用netstat查看端口的活动情况。
    使用tcpdump查看数据包的流动情况。
    查看/var/log/kernel_log文件。





    redhatAS4.2 安装集群LVS
    create in 20060812 by ghbspecial
    环境描述:本文在配置LVS时使用三台linux,一台做Directorserver(192.168.0.25) ,两台做 realserver(192.168.0.127 192.168.0.128),在配置lvs heartbeat时又添加了一台 (192.168.0.126)做为备份主节点,虚拟VIP:192.168.0.100
    软件列表:
    ipvsadm-1.24.tar.gz
    libnet.tar 下载地址:
    http://www.packetfactory.net/libnet/
    稳定版本是:1.1.2.1
    e2fsprogs 能够用rpm 安装光盘
    heartbeat-2.0.2.tar.gz
    2.6内核已集成IPVS内核补订了,所以不再需要重新编译内核.
    配置此集群分以下几种情况
    一、配置基于DR模式Lvs集群
    二、配置基于隧道模式Lvs集群
    三、配置基于高可用Lvs heartbeat
    四、此种配置方式能够加强LVS的主节点的高安全性前提下(主节点简称DR,备份主节点DRbak),考虑充分利用资源能够将DRbak做为realserver
    一、配置基于DR模式Lvs集群
    1、下载ipvsadm管理程式
    http://www.linuxvirtualserver.org/software/

    注意对应自己的内核版本
    ipvsadm-1.24.tar.gz
    tar zxvf ipvsadm-1.24.tar.gz
    cd ipvsadm-1.24
    make && make install
    注意在make时可能会出现很多错误的信息,请按照如下操作就能够心编译正常
    ln -s /usr/src/kernels/2.6.9-22.EL-i686/ /usr/src/linux
    cd ipvsadm-1.24
    make && make install
    2、配置VIP脚本
    [root@ns ~]#more /etc/init.d/lvsDR
    #!/bin/sh
    #create in 20060812 by ghb
    # description: start LVS of Directorserver
    VIP=192.168.0.100
    RIP1=192.168.0.127
    RIP2=192.168.0.128
    #RIPn=192.168.0.128~254
    GW=192.168.0.1
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of DirectorServer"
    # set the Virtual IP Address
    /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev eth0:0
    #Clear IPVS table
    /sbin/ipvsadm -C
    #set LVS
    /sbin/ipvsadm -A -t $VIP:80 -s rr (假如需要session保持添加-p 默认保持300秒)
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
    #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
    #Run LVS
    /sbin/ipvsadm
    #end
    ;;
    stop)
    echo "close LVS Directorserver"
    /sbin/ipvsadm -C
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac

    (-s rr 是使用了轮叫算法,能够自行选择相应的算法,更改rr就能够了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
    假如有多个realserver直接添加就能够了,之后启动此脚本就能够了。
    3、配置realserver脚本
    #!/bin/bash
    #description : start realserver
    #create in 20060812 by ghb
    VIP=192.168.0.100
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p
    #end
    此脚本使realserver不响应arp请求,将此脚本分别在realserver上执行就能够了。
    测试:分别启动realserver上的httpd服务
    在realserver1 执行 echo "This is realserver1" /var/www/html/index.html
    在realserver2 执行 echo "This is realserver2" /var/www/html/index.html
    打开IE浏览器输入
    http://192.168.0.100
    应该能够分别看到:This is realserver1 和 This is realserver1.
    二、配置基于隧道模式Lvs集群
    1、安装ipvsadmin方法和上面相同,在此略过
    2、配置LVS directorserver 脚本
    [root@ns ~]# more /etc/init.d/tunlvs
    #!/bin/sh
    # description: start LVS of Directorserver
    VIP=192.168.0.100
    RIP1=192.168.0.127
    RIP2=192.168.0.128
    #RIPn=192.168.0.n
    GW=192.168.0.1
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of DirectorServer"
    # set the Virtual IP Address
    /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev tunl0
    #Clear IPVS table
    /sbin/ipvsadm -C
    #set LVS
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
    #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
    #Run LVS
    /sbin/ipvsadm
    #end
    ;;
    stop)
    echo "close LVS Directorserver"
    ifconfig tunl0 down
    /sbin/ipvsadm -C
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac
    3、配置realserver
    [root@localhost ~]# more /etc/init.d/tunl
    #!/bin/sh
    # ghb in 20060812
    # description: Config realserver tunl port and apply arp patch
    VIP=192.168.0.100
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo "Tunl port starting"
    ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
    /sbin/route add -host $VIP dev tunl0
    echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p
    ;;
    stop)
    echo "Tunl port closing"
    ifconfig tunl0 down
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac
    假如有多个Virutal IP,能够使用tunl0:0,tunl0:1...。
    此脚本分别在realserver上执行,目的使realserver忽略arp响应,并设定vip.
    测式同样按照上面的方法测试
    三、配置基于高可用Lvs heartbeat
    1、确定LVS使用DR或/tun模式,请对照上面的配置。
    本例使用tun模式
    Director server 端脚本文档
    [root@ns ~]# more /etc/init.d/tunlvs
    #!/bin/sh
    # description: start LVS of Directorserver
    VIP=192.168.0.100
    RIP1=192.168.0.127
    RIP2=192.168.0.128
    #RIPn=192.168.0.n
    GW=192.168.0.1
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of DirectorServer"
    # set the Virtual IP Address
    /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev tunl0
    #Clear IPVS table
    /sbin/ipvsadm -C
    #set LVS
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
    #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
    #Run LVS
    /sbin/ipvsadm
    #end
    ;;
    stop)
    echo "close LVS Directorserver"
    ifconfig tunl0 down
    /sbin/ipvsadm -C
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac
    realserver端同样使用上面的配置文档就能够。
    2、安装heartbeat
    libnet.tar 下载地址:
    http://www.packetfactory.net/libnet/
    稳定版本是:1.1.2.1
    e2fsprogs 能够用rpm 安装光盘
    heartbeat-2.0.2.tar.gz 下载地址:
    http://www.linux-ha.org/download/
    2.1安装
    tar -zxvf libnet.tar.gz
    cd libnet
    ./configure
    make
    make install
    tar zxf heartbeat-1.99.4.tar.gz
    cd heartbeat-1.99.4
    ./ConfigureMe configure --disable-swig --disable-snmp-subagent
    make
    make install
    cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
    cp ldirectord/ldirectord.cf /etc/ha.d/
    配置:
    主配置文档(/etc/ha.d/ha.cf)
    #debugfile /var/log/ha-debug
    logfile /var/log/ha-log #指名heartbeat的日志存放位置
    #crm yes #支持ClusterResourceManager(集群资源管理)功能
    #bcast eth1 #指明心跳方式使用以太广播方式,并且是在eth1接口上进行广播。
    logfacility local0
    keepalive 2#指明心跳时间为2秒(即每两秒钟在eth1上发送一次广播)。
    deadtime 30#指定在30秒内没有心跳信号,则立即转换服务。
    warntime 10 #指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会转换服务。
    initdead 120 #With some configurations, the network takes some time to start working after a reboot. This is a separate "deadtime" to handle that case. It should be at least twice the normal deadtime.
    udpport 694#Use port number 694 for bcast or ucast communication. This is the default, and the official IANA registered port number.
    baud 19200
    serial /dev/ttyS0
    mcast eth0 225.0.0.1 694 1 0
    # 当主节点恢复后,是否自动切回
    auto_failback on
    # stonith用来确保共享存储环境中的数据完整性
    #stonith baytech /etc/ha.d/conf/stonith.baytech
    # watchdog能让系统在出现故障1分钟后重启该机器。这个功能能够帮助服务器在确实停止心跳后能够重新恢复心跳。
    # 假如使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文档,输入"insmod softdog"加载模块。
    # 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。
    # 生成设备文档:"mknod /dev/watchdog c 10 130" 。
    #watchdog /dev/watchdog
    node ns.ghb.com #Mandatory. Hostname of machine in cluster as described by uname -n.
    node nsbak.ghb.com
    # 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
    # 所以当网络中断时,并不会进行Load Balancer和Backup之间的转换。
    # 能够通过ipfail插件,配置'ping nodes'来解决这一问题。周详说明参考hearbeat文档。
    #ping 192.168.136.1 172.16.0.1
    ping_group group1 192.168.0.25 192.168.0.126
    respawn root /usr/lib/heartbeat/ipfail
    apiauth ipfail gid=root uid=root
    # 其他一些插件能够在/usr/lib/heartbeat下找到
    #apiauth ipfail uid=hacluster
    #apiauth ccm uid=hacluster
    #apiauth cms uid=hacluster
    #apiauth ping gid=haclient uid=alanr,root
    #apiauth default gid=haclient
    资源文档(/etc/ha.d/haresources):
    ns.ghb.com IPaddr::192.168.0.127/24/eth0 httpd
    #配置ns.ghb.com为主节点,集群服务器的ip地址为192.168.0.100 netmask 为255.255.255.240集群的服务有httpd
    认证文档(/etc/ha.d/authkeys),选取一种认证方式,这个文档的权限必须是600
    auth 1
    1 crc
    #2 sha1 sha1_any_password
    #3 md5 md5_any_password
    使用同样的方法配置节点2
    备份节点192.168.0.126 上的heartbeat和apache的配置和节点1要完全相同,lvs配置也要相同。
    2.2
    完装完毕进行测试,关闭主节点机器,另一台自动接管,主节点恢复后自动接管回服务。假如以上测试没有问题,那么开始和lvs整合。
    配置Ldirectord
    Ldirectord的作用是监测Real Server,当Real Server失效时,把他从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已安装了Ldirectord。
    配置(/etc/ha.d/ldirectord.cf):
    # Global Directives
    checktimeout=3
    checkinterval=1
    fallback=127.0.0.1:80
    autoreload=yes
    logfile="/var/log/ldirectord.log"
    quiescent=yes
    # A sample virual with a fallback that will override the gobal setting
    virtual=192.168.0.100:80
    real=192.168.0.127:80 gate
    real=192.168.0.128:80 gate
    fallback=127.0.0.1:80 gate
    service=http
    request="test.html"
    receive="Test Page"
    virtualhost=www.funbsd.net
    scheduler=rr
    #persistent=600
    #netmask=255.255.255.255
    protocol=tcp
    在每个Real Server的中添加监控页:
    echo "Test Page" >> /var/www/html/test.html
    修改heartbeat的资源文档/etc/ha.d/haresources
    ns.ghb.com 192.168.0.100 tunlvs ldirectord httpd

    现在能够在主节点192.168.0.25上启动heartbeat
    /etc/init.d/heartbeat start
    在备份节点也启动heartbeat /etc/init.d/heartbeat start
    测试:关闭主节点,备份节点将自动接管directorserver服务。(主节点正常时用ifconfig 是能够看tunl接可口的,而备份节点用ifconfig 命令是看不到的,只有在接管主节点服务后才是能够见的)
    至此第三部分配置完毕。
    四、考虑充份使用资源,将备份节点也做为realserver.
    在主备director server 上都要做如下配置
    1.director server 需要在脚本文档中将添加realserver,我们预先配置任何机器为realserver。
    #!/bin/sh
    # description: start LVS of Directorserver
    VIP=192.168.0.100
    RIP1=192.168.0.127
    RIP2=192.168.0.128
    RIP3=192.168.0.25
    RIP4=192.168.0.126
    GW=192.168.0.1
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of DirectorServer"
    # set the Virtual IP Address
    /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev tunl0
    #Clear IPVS table
    /sbin/ipvsadm -C
    #set LVS
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
    #Run LVS
    /sbin/ipvsadm
    #end
    ;;
    stop)
    echo "close LVS Directorserver"
    ifconfig tunl0 down
    /sbin/ipvsadm -C
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac
    2.修改/etc/ha.d/ldirectord.cf
    # Global Directives
    checktimeout=3
    checkinterval=1
    fallback=127.0.0.1:80
    autoreload=yes
    logfile="/var/log/ldirectord.log"
    quiescent=yes
    # A sample virual with a fallback that will override the gobal setting
    virtual=192.168.0.100:80
    real=192.168.0.126:80 gate
    real=192.168.0.127:80 gate
    real=192.168.0.128:80 gate
    real=192.168.0.25:80 gate
    fallback=127.0.0.1:80 gate
    service=http
    request="test.html"
    receive="Test Page"
    virtualhost=www.funbsd.net
    scheduler=rr
    #persistent=600
    #netmask=255.255.255.255
    protocol=tcp
    3、将realserver的启动脚本加入到主节点,和备份节点中,并且这个脚本的启动级必须先于heartbeat,关闭级必须后于heartbeat
    chkconfig tunl on 添加到系统启动
    4、创建closetunl启动脚本,为启动director server 做准备
    more /etc/init.d/closetunl
    #!/bin/sh
    # create in 200608 ghb
    # description: close tunl0 and arp_ignore
    VIP=192.168.0.100
    . /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo "start director server and close tunl"
    ifconfig tunl0 down
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    stop)
    echo "start Real Server"
    ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
    /sbin/route add -host $VIP dev tunl0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p
    ;;
    *)
    echo "Usage: lvs {start|stop}"
    exit 1
    esac
    chmod 755 /etc/init.d/closetunl
    5、修改/etc/ha.d/haresources
    ns.wdxc.com closetunl 192.168.0.100 tunlvs ldirectord httpd
    6、测试
    http://192.168.0.100
    应该能够轮到四台机器上
    配置完毕
    总结,上面就是本人在本配置LVS heartbeat过程,本过程还没涉及到共享存储这块,我觉得集群整套方案,共享存储是相当重要的部分,简易实现通过NFS也能够实现共享存储,但是在需要更大,更快时,能够要考虑其的存储方式如SAN等。更有就是后端数据库之间的负载,同步问题等,本人将在下一步解决关于共享存储,数据库负载方面的问题。也希望大家能够给出一些方案或是想法,大家一起讨论一下,一起学习,一起进步





    发表于: 2008-07-19,修改于: 2008-07-19 20:03 已浏览559次,有评论0条
    推荐

    投诉

      网友评论
      发表评论
    Copyright © 2001-2010 ChinaUnix.net All Rights Reserved
    感谢所有关心和支持过ChinaUnix的朋友们
    页面生成时间:0.02291
    京ICP证041476号




    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/56156/showart_2180527.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP