LVS+keepalived(DR)

一、LVS+Keepalived 介绍

l  LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在19985月由章文嵩博士成立,是中国国内最早出现的*软件项目之一。

l  目前有三种IP负载均衡技术(VS/NATVS/TUNVS/DR);

十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

l  Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现

l  DR 模式的集群中,LVS 负载调度器作为群集的访问入口,但不作为网关使用,服务池中所有节点都各自接入Internet 发送给客户机的web响应数据包不需要经过lvs负载调度器。

二、实验环境与目标

网站负载均衡集群拓扑图

 

LVS+keepalived(DR)

 

系统环境(配置好yum源):

 

[[email protected] ~]# cat /etc/redhat-release

CentOS release 6.2 (Final)

 

[[email protected] ~]# uname -a

Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

 

通过部署Apache应用构建Web服务器测试效果,通过部属iSCSI做为存储服务器。

实验目标:

实现Web服务器的备份和冗余,其中任意借点出现故障都会自动切

换,保证应用正常运行。

 

三、LVS调度器的配置

[[email protected] ~]# modprobe ip_vs

 

[[email protected] ~]# cat /proc/net/ip_vs

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

 

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.10.100

NETMASK=255.255.255.0

 

[[email protected] ~]# /etc/init.d/network restart

[[email protected] ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:46:D9:DE 

 

 

          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

[[email protected] ~]# vim /etc/sysctl.conf           #避免网络内的ARP解析出现异常,应该关闭Linux内核的重定向参数响应

#在最后添加

net.ipv4.conf.all.send_redirects = 0               

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

 

[[email protected] ~]# sysctl -p

 

[[email protected] ~]# yum -y install ipvsadm        #ipvsadm是负载调度器上使用LVS群集管理工具通过调用ip_vs模块来添加、删除服务器节点以及查看群集的运行状态

 

[[email protected] ~]# ipvsadm -v

ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)

 

[[email protected] ~]# mkdir /etc/sysconfig/ipvsadm

 

[[email protected] ~]# /etc/init.d/ipvsadm restart

 

[[email protected] ~]# chkconfig ipvsadm on

 

[[email protected] ~]# yum -y install gcc kernel-devel openssl-devel popt-devel  #安装支持库      

 

[[email protected] ~]# tar -zxf keepalived-1.2.2.tar.gz               

 

[[email protected] ~]# cd keepalived-1.2.2

 

[[email protected] ~]# vi keepalived/libipvs-2.6/ip_vs.h

 

#include <sys/types.h>放到#include <linux/types.h>的上面

 

 

 

[[email protected] keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686/

 

[[email protected] keepalived-1.2.2]# make

 

[[email protected] keepalived-1.2.2]# make install

 

[[email protected] keepalived-1.2.2]# chkconfig --add keepalived

 

[[email protected] keepalived-1.2.2]# chkconfig keepalived on

 

[[email protected] keepalived-1.2.2]# cd /etc/keepalived/

 

[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak

 

[[email protected] keepalived]# vim keepalived.conf        #文件里面所有内容

! Configuration File for keepalived

 

global_defs {

   router_id LVS_MASTER                #从调度器上改为router_id LVS_SLAVE

}

 

vrrp_instance VI_1 {

    state MASTER                       #从调度器上改为state SLAVE

    interface eth0

    virtual_router_id 51

    priority 100                         #从调度器上改为priority 80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.10.100

    }

}

 

virtual_server 192.168.10.100 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_make 255.255.255.0

    persistence_timeout 50

    protocol TCP

 

    real_server 192.168.10.3 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

        }

    }

 

    real_server 192.168.10.4 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

        }

    }

}

 

 

配置负载分配策略

# /etc/init.d/ipvsadm stop

# ipvsadm A t 192.168.10.100:80 s rr

# ipvsadm a t 192.168.10.100:80 r 192.168.10.3 g w 1

# ipvsadm a t 192.168.10.100:80 r 192.168.10.4 g w 1

# /etc/init.d/ipvsadm save

# chkconfig ipvsadm on

ipvsadm

 

从调度器上同上所有配置先安装相关软件包在安装keepalived最后配置/etc/keepalived.conf,只需将注释的地方修改即可

 

四、节点配置

1分别在2RealServer(节点)上面编写脚本

[[email protected] ~]# vim /etc/init.d/realserver.sh

#!/bin/bash

VIP=192.168.10.100

startrs()

{

echo "start LVS of REALServer"

/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

}

stoprs()

{

/sbin/ifconfig lo:0 down

echo "close LVS Directorserver"

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

}

# ============ Main ===========

case $1 in

"start")

startrs;;

"stop")

stoprs;;

"*")

echo "Usage $0 {start|stop}"

exit 1

esac

 

 

 

[[email protected] ~]# chmod +x /etc/init.d/realserver.sh

[[email protected] ~]#/etc/init.d/realserver.sh start

 


(2)2RealServer(节点)中分别配置HTTP并启动realserver.sh

[[email protected] ~]# yum -y install httpd

 

[[email protected] ~]# cd /var/www/html/

 

[[email protected] html]# echo "192.168.10.3" > index.html

 

[[email protected] html]# cat index.html

192.168.10.3

 

[[email protected] html]# cat index.html         #两台节点的配置除了网页不一样为了更明显的看到测试效果),其他都一样

192.168.10.4

 

[[email protected] ~]# /etc/init.d/realserver.sh start

 

[[email protected] ~]# echo "/etc/init.d/realserver.sh start" >> /etc/rc.local

 

[[email protected] html]# /etc/init.d/httpd start

 

[[email protected] html]# chkconfig httpd on

 

(3)2台节点添加一条路由记录,将访问VIP的数据限制在本地以避免通信紊乱

[[email protected] ~]# route add -host 192.168.10.100 dev lo:0

 

[[email protected] ~]# echo "/sbin/route add -host 192.168.10.100 dev lo:0" >> /etc/rc.local

 

另一台的配置过程一样,过程略

 

五、测试

在两台调度器上分别启动Keepalived

[[email protected] ~]# /etc/init.d/keepalived restart

 

[[email protected] ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.100:80 rr persistent 50

  -> 192.168.10.3:80              Route   1      0          0        

  -> 192.168.10.4:80              Route   1      0          0

 

使用客户机访问<http://192.168.10.100>,使主调度器挂掉看是否能够访问

使用客户机访问<http://192.168.10.100>,使一个节点挂掉看是否能够访问

转载于:https://my.oschina.net/liting/blog/358499