您的位置:首页 > 运维架构 > 网站架构

利用LVS+Keepalived实现高性能高可用负载均衡

2011-11-22 12:29 701 查看
2011-11-18 17:29:18

标签:负载均衡 高可用 lvs 高性能 keepalived

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/4130636.html

LVS的安装配置

减轻服务器的压力,是每个公司都想实现的,方法有很多种,可以用软件实现,也可以用硬件实现,可对于一些中小型企业来说,承受不起硬件负载均衡带来的负担,所以就选择了用软件,本文介绍了用LVS+Keepalived来搭建一个实现高性能高可用负载均衡的环境。

一. LVS+Keepalived 介绍

1. LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR );

八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh )。

2. Keepalvied

Keepalived 在这里主要用作 RealServer的健康状态检查LoadBalance主机和

BackUP 主机之间failover 的实现

二. 网站负载均衡拓朴图





IP信息表

LVS-DR-MASTER 192.168.2.117

LVS-DR-BACKUP 192.168.0.36

LVS-DR-VIP 192.168.2.121

WEB1-Realserver 192.168.2.116

WEB2-Realserver 192.168.2.119

GateWay 192.168.0.1

LVS-DR-VIP指的是虚拟IP地址,还可以叫做LVS集群的服务IP,在DR、TUN模式中,数据包是直接返回给用户的,所以,在Director Server上以及集群的每个节点上都需要设置这个地址。此IP在Real Server上一般绑定在回环地址上.

各个Real Server可以是在同一个网段内,也可以是相互独立的网段,还可以是分布在internet上的多个服务器.

三. 安装LVS 和Keepalvied 软件包

LVS安装:yum –y install ipvsadm

Keepalived安装:wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
#tar zxvf keepalived-1.1.15.tar.gz

#cd keepalived-1.1.15

#./configure && make && make install

#find / -name keepalived # 查看keepalived 位置

#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

#mkdir /etc/keepalived

#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

#cp /usr/local/sbin/keepalived /usr/sbin/

#service keepalived start|stop #做成系统启动服务方便管理.

四. 配置LVS 实现负载均衡

一、LVS-DR-MASTERS设置:

[root@localhost ~]#ifconfig eth0:0 192.168.2.121 broadcast 192.168.2.121 netmask 255.255.255.255 up

此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.2.121,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.2.121,需要特别注意的是,这里的子网掩码为255.255.255.255。

然后给设备eth0:0指定一条路由,执行如下指令:

[root@localhost ~]#route add -host 192.168.2.121 dev eth0:0

然后用ipvsadm来配置LVS

[root@localhost ~]# ipvsadm -A -t 192.168.2.121:80 -s rr -p 600

表示在内核的虚拟服务器列表中添加一条192.168.2.121的虚拟服务器记录,并且指定此虚拟服务器的服务端口为80,然后指定此虚拟服务器的调度策略为轮询调度,并且在每个real server上的持续服务时间为600秒,即10分钟

[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.116:80 –g

[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.119:80 –g

以上两条设置表示在虚拟服务器192.168.2.121中添加两条新的Real Server记录,两个Real Server的IP分别为192.168.2.116和192.168.2.119,参数“-g”指定了虚拟服务器的工作模式为直接路由模式,即DR模式。

然后开启数据转发功能 并且立即生效

[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward

[root@localhost ~]#sysctrl –p

以上的操作可以用脚本来实现

Vim /usr/local/sbin/lvs-dr.sh

#!/bin/bash

GW=192.168.0.1

# website director vip.

SNS_VIP=192.168.2.121

SNS_RIP1=192.168.2.119

SNS_RIP2=192.168.2.116

logger $0 called with $1

case "$1" in

start)

# set squid vip

/sbin/ipvsadm --set 30 5 60

/sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up

/sbin/route add -host $SNS_VIP dev eth0:0

/sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3

/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1

/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1

touch /var/lock/subsys/ipvsadm >/dev/null 2>&1

;;

stop)

/sbin/ipvsadm -C

/sbin/ipvsadm -Z

ifconfig eth0:0 down

ifconfig eth0:1 down

route del $SNS_VIP

route del $SS_VIP

rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1

echo "ipvsadm stoped"

;;

status)

if [ ! -e /var/lock/subsys/ipvsadm ];then

echo "ipvsadm stoped"

exit 1

else

echo "ipvsadm OK"

fi

;;

*)

echo "Usage: $0 {start|stop|status}"

exit 1

esac

exit 0

可以用以上脚本来启动和关闭LVS,只需要./ lvs-dr.sh start就可以开启LVS了

二、Realserver的设置

[root@localhost ~]#ifconfig lo:0 192.168.2.121 netmask 255.255.255.255 broadcast 192.168.2.121

在本地回环接口上绑定了一个虚拟设备lo:0 设置一个IP为192.168.2.121 掩码为255.255.255.255

[root@localhost ~]#route add -host 192.168.2.121 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

以上是忽略arp请求,立即生效。

由于虚拟ip,也就是上面的LVS-DR-VIP(192.168.2.121)地址,是Director Server和所有的Real server共享的,如果有ARP请求VIP地址时,Director Server与所有Real server都做应答的话,就出现问题了,因此,需要禁止Real server响应ARP请求。

2台WEB1-Realserver都做此配置

以上操作可以用如下脚本来操作:

Vim /usr/local/sbin/realserver.sh

!#/bin/bash

SNS_VIP=192.168.2.121

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

/sbin/route add -host $SNS_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 >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP >/dev/null 2>&1

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

echo "RealServer Stoped"

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit 0

可以用以上脚本来启动和关闭lo:0回环接口上绑定的虚拟设备,只需要./realserver start

五.利用Keepalvied 实现负载均衡和和高可用性

1.配置在主负载均衡服务器上配置keepalived.conf

#vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

# acassen@firewall.loc //报警的邮箱

}

# notification_email_from Alexandre.Cassen@firewall.loc //发送报警邮件的邮箱地址

# smtp_server 192.168.200.1 //提供邮件服务的服务器的IP

# smtp_connect_timeout 30 //邮件服务器连接超时的时间

# router_id LVS_DEVEL //邮件的标记

}

vrrp_instance VI_1 {

state MASTER // #备份服务器上将MASTER 改为BACKUP

interface eth0

virtual_router_id 51

priority 100 //备份服务上将 100 改为99

advert_int 1

authentication {

auth_type PASS //加密方式

auth_pass 1111 //密码,MASTER 和BACKUP必须一致

}

virtual_ipaddress {

192.168.2.121 // #(如果有多个VIP,继续换行填写.)

}

}

virtual_server 192.168.2.121 80 { //虚拟服务器IP和端口

delay_loop 6 // #(每隔6 秒查询realserver 状态)

lb_algo wrr // #(lvs 算法)

lb_kind DR // #(Direct Route)模式

nat_mask 255.255.255.255 //子网掩码

persistence_timeout 50 // #( 同一IP 的连接60 秒内被分配到同一台realserver)

protocol TCP // #(用TCP 协议检查realserver 状态)

real_server 192.168.2.116 80 { //虚拟服务器下面的realserver的IP和端口

weight 1 //#(权重),越大被分配到的几率越大

TCP_CHECK {

connect_timeout 10 // #(10 秒无响应超时)

nb_get_retry 3 //尝试3次

delay_before_retry 3 //每次间隔3秒

connect_port 80 //连接端口

}

}

real_server 192.168.2.119 80 {

weight 1

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

2. BACKUP服 务 器 同 上 配 置 ,先 安 装 lvs再 按 装 keepalived, 然 后 配 置

/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.

现在,在Master和backup上都运行脚本./lvs-dr.sh atsrt

在Master和backup上启动keepalived。

在realserver都运行脚本./realserver.sh start

然后用ipvsadm –ln来查看集群中的服务器

[root@localhost sbin]# 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.2.121:80 wrr persistent 3

-> 192.168.2.116:80 Route 1 0 0

-> 192.168.2.119:80 Route 1 0 0

这样,当用户访问192.168.2.121的80端口的时候,就会被随机分配到realserver其中的一台上面,当realserver其中一台宕机的话,LVS会自动把宕机的机器提出服务器群集,当这台宕机的服务器恢复正常的时候,LVS会自动把它加入服务器群集中。

如果LVS-MASTER宕机的话,,LVS- BACKUP就会自动接管LVS-MASTER上运行的服务,当LVS-MASTER恢复正常的时候,LVS- BACKUP就会把运行的服务交给LVS-MASTER来运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: