实现WEB负载均衡群集

具体步骤如下:

一、Director配置

    1、设置网络接口地址 
    [root @director root] # vi /etc/sysconfig/network-scripts/ifcfg-eth0 
    DEVICE=eth0 
    BOOTPROTO=static 
    BROADCAST=192.168.0.255 
    HWADDR=00:0C:29:A2:BD:B5 
    IPADDR=192.168.0.160 
    NETMASK=255.255.255.0 
    NETWORK=192.168.0.0 
    ONBOOT=yes 
    2、编辑 lvs 脚本 
    [root @director root] # vi /etc/init.d/lvsdr 
    #!/bin/bash 
    VIP=192.168.0.222 
    RIP1=192.168.0.249 
    RIP2=192.168.0.251 
    /etc/rc.d/init.d/funcions 
    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 
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g 
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g 
    #Run Lvs 
    /sbin/ipvsadm 
    ;; 
    stop) 
    echo "close LVS Directorsever" 
    /sbin/ipvsadm -C 
    /sbin/ifconfig eth0:0 down 
    ;; 
    *) 
    echo "Usage: $0 {start|stop}" 
    exit 1 
    esac 
    # 保存并退出,将该文件设置为可执行文件 
    [root @director root] # chmod 755 /etc/init.d/lvsdr 
    3、安装 ipvsadm 
    [root @ Director root] # modprobe –l | grep ipvs 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko 
    /lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko 
    [root @director root] # ln –s /usr/src/kernels/2.6.9-11.EL-i686 /usr/src/linux 
    [root @ director root] #  tar xzvf ipvsadm-1.24.tar.gz 
    [root @ director ipvsadm-1.24] # cd ipvsadm-1.24 
    [root @ director ipvsadm-1.24] # make 
    [root @ director ipvsadm-1.24] # make install 
    由于在这里我搭建的是 WEB 的负载均衡群集,而我在安装 Redhat EL 4.0 时并没有选择安装 WEB 服务器组件,所以这里需要另外安装,如果已安装的朋友可以略过这里(注:可以用 rpm –qa |grep http 查看是否已经安装) 
    [root @ director root]  #  tar xzvf httpd-2.2.4.tar.gz 
    [root @ director root]  # cd httpd-2.2.4 
    [root @ director httpd-2.2.4] # ./configure –prefix=/usr/local/apache –enable-so –enable-rewrite 
    [root @ director httpd-2.2.4] # make 
    [root @ director httpd-2.2.4] # make install 
    [root @ director httpd-2.2.4] # echo “/usr/local/apache/bin/apachectl” >> /etc/rc.local 
    4、安装 heartbeat 
    在安装 heartbeat 前先要安装 libnet,下载地址:http://www.packetfactory.net/libnet/ 
    [root @ director root] # tar xzvf libnet.tar.gz 
    [root @ director root] # cd libnet 
    [root @ director libnet] # ./configure 
    [root @ director libnet] # make 
    [root @ director libnet] # make install 
    [root @ director libnet] # cd 
    在安装 heartbeat 之前还需要创建属于 heartbeat 的组和用户 
    [root @ director root] # groupadd –g 694 haclient 
    [root @ director root] # useradd –g 694 –u 694 hacluster 
    [root @ director root] # tar xzvf heartbeat-2.1.2.tar.gz 
    [root @ director root] # cd heartbeat-2.1.2 
    [root @ director heartbeat-2.1.2] # ./ConfigureMe configure 
    [root @ director heartbeat-2.1.2] # make 
    [root @ director heartbeat-2.1.2] # make install 
    在安装完 heartbeat 后,会有一个 /etc/ha.d 目录,这是 heartbeat 的配置文件存放的目录,heartbeat 的配置文件都放在这里。但默认在安装完 heartbeat 后,heartbeat 最重要的三个配置文件 ha.cf、haresources、authkeys却没有放在这里,需要我们手工 copy 过来才行。 
    [root @ director heartbeat-2.1.2] # cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d 
    将 ldirector 的配置文件也 copy 过来 
    [root @ director heartbeat-2.1.2] # cp ldirectord/ldirectord.cf /etc/ha.d 
    6、编辑 heartbeat 的配置文件 
    [root @ director heartbeat-2.1.2] # vi /etc/ha.d/ha.cf 
    # hearbeat 的查错文件存放点 
    debugfile /var/log/ha-debug 
    # heartbeat  的日志文件存放点 
    logfile        /var/log/ha-log 
    #设定heartbeat(心跳)之间的时间间隔为2秒。 
    keepalive 2 
    #在60秒后宣布节点死亡。 
    deadtime 60 
    #在日志中发出“late heartbeat“警告之前等待的时间,单位为秒。 
    warntime 10 
    在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。 
    initdead 120 
    #使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号。 
    udpport        694 
    #表示在eth0接口上使用广播heartbeat(将eth0替换为eth1,eth2,或者您使用的任何接口)。 
    bcast        eth0                # Linux 
    #必须的。集群中机器的主机名,与“uname –n”的输出相同。 
    node         director 
    node         bkdirector 
    # 必须的,当auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便不能重新获得资源。该选项与废弃的nice_failback选项类似。 
    auto_failback on 
    # 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。 
    # 所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。 
    # 可以通过ipfail插件,设置'ping nodes'来解决这一问题。详细说明参考hearbeat文档。 
    ping_group group1 192.168.0.160 192.168.0.225 
    respawn root /usr/lib/heartbeat/ipfail 
    apiauth ipfail gid=root uid=root 
    hopfudge 1 
    use_logd yes 
    #保存并退出 
    编辑 haresources 文件,haresources 文件通知 heartbeat 程序哪台机器拥有资源,资源名称实际是 /etc/init.d 或 /etc/ha.d/resource.d 目录下的脚本,Heartbeat 使用 haresources 配置文件确定它第一次启动时应该做的工作。该文件列出集群所提供的服务以及服务的默认所有者。 注意:两个集群节点上的该文件必须相同,否则BadThingsWillHappen。 
    [root @ director heartbeat-2.1.2] # vi /etc/ha.d/haresources 
    director lvsdr 
    #设置 director 为主节点,提供的群集服务为 lvsdr, 主节点的名称要与 “uname -n” 的输出相同 
    #保存并退出 
    编辑 authkeys 文件,需要配置的第三个文件authkeys决定了您的认证密钥。共有三种认证方式:crc,md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之: 
    如果您的Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。 
    [root @ director heartbeat-2.1.2] # vi /etc/ha.d/authkeys 
    auth 1 
    1 crc 
    # 保存并退出 
    确保 authkeys 文件仅能由 root 用户读取 
    [root @ director heartbeat-2.1.2] # chmod 600 /etc/ha.d/authkeys 
    编辑 /etc/hosts 文件,添加两台机器的名字,做好名字到IP的对应 
    [root @ director heartbeat-2.1.2] # vi /etc/hosts 
    192.168.0.160        director 
    192.168.0.225                bkdirector 
    注:在备用 director 上也做相同的设置

二、Real Server 配置 
    1、编辑网络接口 
    [root @cluser1 root] #vi /etc/sysconfig/network-scripts/ifcfg-eth0 
    DEVICE=eth0 
    BOOTPROTO=static 
    BROADCAST=192.168.0.255 
    HWADDR=00:0C:29:54:80:3A 
    IPADDR=192.168.0.249 
    NETMASK=255.255.255.0 
    NETWORK=192.168.0.0 
    ONBOOT=yes 
    TYPE=Ethernet 
    2、编辑 lvs 脚本 
    [root @cluser1 root] # vi /etc/init.d/lvsrs 
    #!/bin/bash 
    VIP=192.168.0.222 
    case "$1" in 
    start) 
    echo "Start Real Server" 
    /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 
    ;; 
    stop) 
      echo "Closeing Real Server....." 
    ifconfig lo:0 down 
    ;; 
    *) 
    echo "Usage: $0 {start|stop} 
    exit 1 
    esac 
    # 保存并退出 
    将 /etc/init.d/lvsrs 放到 /etc/rc.local 文件中,这样可以在开机时自启动 
    [root @cluser1 root] # echo “/etc/init.d/lvsrs” >> /etc/rc.local 
    在另外一台 Real Server 上做相同的设置 
    确保 Real Server 上的 http 服务已处于监听状态,可以用 netstat –tlunp 命令查看 
    [root @ cluster1 root] # netstat –tlunp 
    如果没有启用启用 http 服务,请启用。 
    [root @ cluster1 root] # /usr/local/apache/bin/apachectl start

三、启动web 群集负载平衡与测试 
    1、启动 heartbeat 
    [root @ director root] # /etc/init.d/heartbeat start 
    在备用 director 上启动 heartbeat 
    2、测试 
    此时在客户端的浏览器中输入群集服务器的IP 地址:http://192.168.0.222 
    就会显示相应的页面,最好是在两台 Real Server 上设置不同的WEB 页面,这样在客户端刷页面就会看到不同的页面,这样也可以证明客户端的请求是在两台不同的服务器进行轮询。 
    也可以在主备份服务器上使用 ipvsadm –lc 命令查看 
    [root @director root] # ipvsadm -lc 
    PVS connection entries 
    pro expire state       source             virtual            destination 
    TCP 01:55  FIN_WAIT    192.168.0.114:2849 192.168.0.222:http cluster1:http 
    TCP 14:56  ESTABLISHED 192.168.0.114:2850 192.168.0.222:http cluster2:http 
    测试1:主 director 崩溃后,从 director 是否可以接管主 director 的工作 
    为了测试主 director 崩溃后,从 director 是否可以接管主 director 的工作,将主 director 关机或拔掉网线.然后在从 director 进行如下操作以证明从 director 是否已经接管了主 director 的工作: 
    1、 用 ifconfig 命令查看是否有 eth0:0 接口,主 director 正常工作的时候,在从 director 是不会出现 eth0:0 接口的,主 director 崩溃后 eth0:0 即刻就会出现 
    2、 可以用 tail –f /var/log/messages 命令查看 heartbeat 的日志 
    3、 用 ipvsadm  命令查看是否已经启用 ipvsadm, 主 director 正常工作的时候,从 director 是不会启用 ipvsadm 的,主 director 正常工作时,在从 director 用 ipvsadm 查看的显示: 
    [root @bkdirector root] # ipvsadm 
    IP Virtual Server version 1.2.0 (size=4096) 
    Prot LocalAddress:Port Scheduler Flags 
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn 
    主 director 崩溃后,从 director 上的 ipvsadm 输出 
    [root @bkdirector root] # ipvsadm 
    IP Virtual Server version 1.2.0 (size=4096) 
    Prot LocalAddress:Port Scheduler Flags 
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn 
    TCP  192.168.0.222:http rr 
    -> redhat:http                  Route   1      0          0 
      -> redhatAS4.0:http             Route   1      0          0 
    测试2:主 director 恢复正常后,从 director 上的服务是否会回到主 director 上 
    1、 重新启动主 director,在主 director 启动,进入系统后,此时在从 director 上用 ifconfig 命令查看,发现 eth0:0 不见了,在主 director 上用 ifconfig 查看可以看到 eth0:0 ,据此可证明 VIP 已经由从 director 转移到了主 director 上。 
    2、 在客户端浏览器中输入群集服务器的IP 地址:http://192.168.0.222  可以正常浏览,在主 director 上用 ipvsadm –lc 命令可以查看到客户端浏览群集服务器的WEB页面,而在从 director 上用 ipvsdm –lc 命令查看,显示为空白。


     本文转自 wqmsl 51CTO博客,原文链接:http://blog.51cto.com/wqmsl/310815,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值