Centos 6.2高性能负载均衡的实现

LVS的安装配置

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

一.LVS+Keepalived介绍

1.LVS

LVS是LinuxVirtualServer的简写,意即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的实现

二.网站负载均衡拓朴图

 

Centos 6.2高性能负载均衡的实现

IP信息表

LVS-DR-MASTER192.168.2.117

LVS-DR-BACKUP192.168.0.36

LVS-DR-VIP192.168.2.121

WEB1-Realserver192.168.2.116

WEB2-Realserver192.168.2.119

GateWay192.168.0.1

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

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

三.安装LVS和Keepalvied软件包

LVS安装:yum–yinstallipvsadm

Keepalived安装:wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz

#tarzxvfkeepalived-1.1.15.tar.gz

#cdkeepalived-1.1.15

#./configure&&make&&makeinstall

#find/-namekeepalived#查看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/

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

四.配置LVS实现负载均衡

一、LVS-DR-MASTERS设置:

[root@localhost~]#ifconfigeth0:0192.168.2.121broadcast192.168.2.121netmask255.255.255.255up

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

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

[root@localhost~]#routeadd-host192.168.2.121deveth0:0

然后用ipvsadm来配置LVS

[root@localhost~]#ipvsadm-A-t192.168.2.121:80-srr-p600

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

[root@localhost~]#ipvsadm-a-t192.168.2.121:80-r192.168.2.116:80–g

[root@localhost~]#ipvsadm-a-t192.168.2.121:80-r192.168.2.119:80–g

以上两条设置表示在虚拟服务器192.168.2.121中添加两条新的RealServer记录,两个RealServer的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

#websitedirectorvip.

SNS_VIP=192.168.2.121

SNS_RIP1=192.168.2.119

SNS_RIP2=192.168.2.116

logger$0calledwith$1

case"$1"in

start)

#setsquidvip

/sbin/ipvsadm--set30560

/sbin/ifconfigeth0:0$SNS_VIPbroadcast$SNS_VIPnetmask255.255.255.255up

/sbin/routeadd-host$SNS_VIPdeveth0:0

/sbin/ipvsadm-A-t$SNS_VIP:80-swrr-p3

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

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

touch/var/lock/subsys/ipvsadm>/dev/null2>&1

;;

stop)

/sbin/ipvsadm-C

/sbin/ipvsadm-Z

ifconfigeth0:0down

ifconfigeth0:1down

routedel$SNS_VIP

routedel$SS_VIP

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

echo"ipvsadmstoped"

;;

status)

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

echo"ipvsadmstoped"

exit1

else

echo"ipvsadmOK"

fi

;;

*)

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

exit1

esac

exit0

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

二、Realserver的设置

[root@localhost~]#ifconfiglo:0192.168.2.121netmask255.255.255.255broadcast192.168.2.121

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

[root@localhost~]#routeadd-host192.168.2.121devlo: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)地址,是DirectorServer和所有的Realserver共享的,如果有ARP请求VIP地址时,DirectorServer与所有Realserver都做应答的话,就出现问题了,因此,需要禁止Realserver响应ARP请求。

2台WEB1-Realserver都做此配置

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

Vim/usr/local/sbin/realserver.sh

!#/bin/bash

SNS_VIP=192.168.2.121

case"$1"in

start)

ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP

/sbin/routeadd-host$SNS_VIPdevlo: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/null2>&1

echo"RealServerStartOK"

;;

stop)

ifconfiglo:0down

routedel$SNS_VIP>/dev/null2>&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"RealServerStoped"

;;

*)

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

exit1

esac

exit0

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

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

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

#vi/etc/keepalived/keepalived.conf

!ConfigurationFileforkeepalived

global_defs{

notification_email{

#[email protected]//报警的邮箱

}

#[email protected]//发送报警邮件的邮箱地址

#smtp_server192.168.200.1//提供邮件服务的服务器的IP

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

#router_idLVS_DEVEL//邮件的标记

}

vrrp_instanceVI_1{

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

interfaceeth0

virtual_router_id51

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

advert_int1

authentication{

auth_typePASS//加密方式

auth_pass1111//密码,MASTER和BACKUP必须一致

}

virtual_ipaddress{

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

}

}

virtual_server192.168.2.12180{//虚拟服务器IP和端口

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

lb_algowrr//#(lvs算法)

lb_kindDR//#(DirectRoute)模式

nat_mask255.255.255.255//子网掩码

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

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

real_server192.168.2.11680{//虚拟服务器下面的realserver的IP和端口

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

TCP_CHECK{

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

nb_get_retry3//尝试3次

delay_before_retry3//每次间隔3秒

connect_port80//连接端口

}

}

real_server192.168.2.11980{

weight1

TCP_CHECK{

connect_timeout10

nb_get_retry3

delay_before_retry3

connect_port80

}

}

}

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

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

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

在Master和backup上启动keepalived。

在realserver都运行脚本./realserver.shstart

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

[root@localhostsbin]#ipvsadm-ln

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:PortSchedulerFlags

->RemoteAddress:PortForwardWeightActiveConnInActConn

TCP192.168.2.121:80wrrpersistent3

->192.168.2.116:80Route100

->192.168.2.119:80Route100

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

如果LVS-MASTER宕机的话,,LVS-BACKUP就会自动接管LVS-MASTER上运行的服务,当LVS-MASTER恢复正常的时候,LVS-BACKUP就会把运行的服务交给LVS-MASTER来运行。

相关推荐