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

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

一、原理

1、概要介绍

如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。

2、工作原理

Keepalived基于VRRP协议来实现高可用解决方案,利用其避免单点故障,通常这个解决方案中,至少有2台服务器运行Keepalived,即一台为MASTER,另一台为BACKUP,但对外表现为一个虚拟IP,MASTER会发送特定消息给BACKUP,当BACKUP收不到该消息时,则认为MASTER故障了,BACKUP会接管虚拟IP,继续提供服务,从而保证了高可用性,具体如下图:

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

图1 Keepalived原理图

3层机理是发送ICMP数据包即PING给某台服务器,如果不痛,则认为其故障,并从服务器群中剔除。

4层机理是检测TCP端口号状态来判断某台服务器是否故障,如果故障,则从服务器群中剔除。

5层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。

3、实际作用

主要用作RealServer的健康检查,以及负载均衡设备MASTER和BACKUP之间failover的实现。

二、架构

本系列文章以CentOS Linux release 6.0 (Final)为例,介绍用LVS+Keepalived实现高可用负载均衡。具体业务需求是用虚拟IP转发8080、25、21端口请求到后端的真实服务器来处业务逻辑,系统拓扑如下图所示:

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

图2 系统拓扑图

客户端通过VIP(Virtual IP)(172.28.14.227/228/229)来访问负载均衡服务器,负载均衡服务器通过MASTER/172.28.19.92或BACKUP/172.28.19.93将请求分别转发给真实服务器(Web服务器/172.28.19.100/101/102、邮件服务器/172.28.19.103/104/105、文件服务器/172.28.19.106/107/108)。

负载均衡服务器的MASTER和BACKUP上都必须安装LVS+Keepalived,下面开始安装和配置之旅。

三、LVS安装

Master和Backup都必须安装LVS,安装ipvsadm步骤如下:

(1)依赖包安装

执行如下命令查看依赖包是否安装:

(A)#rpm -qa|grep popt

popt-static-1.13-7.el6.x86_64

popt-devel-1.13-7.el6.x86_64

popt-1.13-7.el6.x86_64

如果没有上述包,则需要依次安装,具体如下:

#yum install popt

#yum install popt-devel

#yum install popt-static

(B)rpm -qa|grep libnl

libnl-1.1-14.el6.x86_64

libnl-devel-1.1-14.el6.x86_64

如果没有上述包,则需要依次安装,具体如下:

#yum install libnl

#yum install libnl-devel

(2)ipvsadm安装

#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

#tar zxvf ipvsadm-1.26.tar.gz

#ln -s /usr/src/kernels/2.6.32-71.el6.x86_64 /usr/src/linux //注意:每个系统这个路径可能会不一样

#cd ipvsadm-1.26

#make

#make install

OK,LVS就这么安装好了。

四、Keepalived安装

Master和Backup都必须安装Keepalive,安装步骤如下:

#wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

#tar zxvf keepalived-1.2.7.tar.gz

#cd keepalived-1.2.7

#./configure

#make

#make install

OK,Keepalived安装好了。

如果#./configure时出现下面错误:

configure: error:

!!! OpenSSL is not properly installed on your system. !!!

!!! Can not include OpenSSL headers files. !!!

则需要安装OpenSSL相关包:

#yum install openssl

#yum install openssl-devel

然后从#./configure步骤开始执行以下后续步骤就行。

五、配置

1、服务脚本

将Keepalived做成服务启动(MASTER和BACKUP都是必须的),具体步骤如下:

(1)拷贝服务启动脚本

#cp ./keepalived/etc/init.d /etc/init.d

(2)拷贝配置文件

#mkdir /etc/keepalived

#cp ./keepalived/etc/keepalived/keepalived.conf /etc/keepalived

(3)拷贝可执行文件

#cp ./bin/keepalived /usr/bin

(4)启动/停止服务

#service keepalived start

#service keepalived stop

2、配置MASTER

备份并打开配置文件修改部分内容,尤其注意红色部分,具体如下:

#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

#vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state MASTER # 状态实际MASTER

interface eth0 # 监听网卡切换

virtual_router_id 51

priority 100 # 优先级(越大优先级越高)

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress { # 虚拟IP地址列表,即VIP

172.28.14.227

172.28.14.228

172.28.14.229

}

}

virtual_server 172.28.14.227 8080 {

delay_loop 6

lb_algo wlc

lb_kind DR # DR模式

persistence_timeout 50

protocol TCP

real_server 172.28.19.100 8080 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8080

}

}

real_server 172.28.19.101 8080 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8080

}

}

real_server 172.28.19.102 8080 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8080

}

}

}

virtual_server 172.28.14.228 25 {

delay_loop 6

lb_algo wlc

lb_kind DR # DR模式

persistence_timeout 50

protocol TCP

real_server 172.28.19.103 25 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 25

}

}

real_server 172.28.19.104 25 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 25

}

}

real_server 172.28.19.105 25 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 25

}

}

}

virtual_server 172.28.14.229 21 {

delay_loop 6

lb_algo wlc

lb_kind DR # DR模式

persistence_timeout 50

protocol TCP

real_server 172.28.19.106 21 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 21

}

}

real_server 172.28.19.107 21 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 21

}

}

real_server 172.28.19.108 21 {

weight 1 # 权重(权重越高处理的请求越多)

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 21

}

}

}

3、配置BACKUP

BACKUP配置与MASTER基本一致,除了红色部分外,具体如下:

#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

#vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state BACKP # 状态实际BACKUP

...

priority 99 # 优先级99(比MASTER优先级100低)

...

}

4、配置Realserver

为Realserver的某块网卡创建启动脚本,脚本内容如下:

#vi realserverd

#!/bin/bash

VIP=172.28.14.227

. /etc/rc.d/init.d/functions

case "$1" in

start)

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

ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev lo:0

sysctl -p > /dev/null 2>&1

echo "realserver start OK"

;;

stop)

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

ifconfig lo:0 down

/sbin/route del $VIP > /dev/null 2>&1

echo "realserver stoped"

;;

*)

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

exit 1

esac

exit 0

注意脚本中红色部分,每块网卡绑定一个虚拟IP地址,如果绑定多个虚拟IP,则需要为每块网卡创建一个脚本,并且指定lo:X(比如:lo:0,lo:1等),另外,.和/etc/rc.d/funtions之间有空格。

启动keepalived服务,并执行上述脚本,然后用ip a能确认是否有VIP地址。

输入ipvsadm -Ln查看LVS工作状态。

停止MASTER的keepalived服务,BACKUP能接管VIP地址,再次启动MASTER的keepalived服务,MASTER又能再一次接管VIP地址。

如果这些你都搞定了,恭喜你,你已经拥有高可用服务了

分类:默认分类 时间:2012-01-05 人气:8
本文关键词:
分享到:

相关文章

  • ?在看我的噗?第一回:DOM沙盒 vs 跨?站?本漏洞(XSS) 2012-03-30

    来源:阿?外??/FONT> 上星期天下午,下大雨,?]法出去,?手?了Plurk,想到了Plurk之前公?的「XSS挑?稹?/FONT>,只要找到漏洞,?明?K回?蟮泥塾眩?陀?lurk hacker?煺驴梢阅茫??拔乙埠芸斓?A href="http://armorize-cht.blogspot.com/2009/05/plurktwittermyspace911.html">??了一?蠕?demo?K回??/FONT>。(不用?岩桑??然?]有真的拿?硎褂茫?/P

  • Nginx主主负载均衡架构 2015-03-01

    在和一些朋友交流Nginx+Keepalived技术时,我虽然已成功多次实Nginx+Keepaived项目方案,但这些都是用的单主Nginx在工作,从Nginx长期只是处于备份状态,所以我们想将二台Nginx负载均衡器都处于工作状态,其实用Nginx+Keepalived也很容易实现。此方法适用场景:适合中小型网站应用场景。 一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80、443,通过Juniper SSG550防火墙映射出去,外

  • keepalived主备服务负载均衡.基于LAMP平台 2012-11-04

    一、keepalived的基本原理介绍 keepalived最初设计的目的是为了实现lvs前端director的高可用,非常轻量级。主要的实现的vrrp协议。 VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。 VRRP具有如下优点: 简化网络管理:在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改

  • LVS-NAT和LVS-DR模式的实现详解 2012-01-27

    linux下LVS的实现 在2.4.23之前的linux内核想要使用LVS需要重新编译内核打补丁,之后的LVS直接做进了内核 使用grep -i -C 5 ipvs /boot/config-`uname -r`可以查看 ipvsadm工作在用户空间/ipvs工作在内核空间,用户使用ipvsadm进行设置并且传递到内核空间中的ipvs (ipvsadm工具在光盘中的cluster中) ipvsadm功能 定义一个集群服务,定义REALSERVER,集群服务的查看 -t 基于tcp的集群服务 -u

  • keepalived构建高可用MySQL-HA 2012-08-28

      关于MySQL-HA,目前有多种解决方案,比如heartbeat、drbd、mmm、共享存储,但是它们各有优缺点。heartbeat、drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题;对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。使用MySQL双ma

  • LVS环境下的ARP欺骗简单分析 2013-03-18

    今天遇到一个问题,同事问怎么来防止LVS环境下的arp欺骗,对于LVS不是太熟悉,于是到whitehat群中请教,然后自己又看了下关于LVS的资料,做了个简单的分析,记录下。 首先了解下LVS,LVS是Linux服务器集群系统(Linux Virtual Server)的简称,其官方网址为: http://www.linuxvirtualserver.org/zh/lvs3.html,其中LVS主要采用了三种IP负载均衡技术,即: VS/NAT 通过NAT实现虚拟服务器(Virtual Serv

  • linux高级技巧:heartbeat+lvs(二) 2013-04-15

    上一个帖子介绍了heartbeat的单独使用,今天我们首先来介绍lvs的单独使用,最后将两者结合 起来。提供一个全面的服务。 1.LVS的三种负载均衡技术: 非常幸运的是kernel 2.6x 已经内建了LVS模块,而且在redhat6版本中也有LVS的安装包ipvsadm。 下面我们对LVS的三种负载均衡技术进行比较: 1.通过NAT实现虚拟服务器(VS/NAT): 由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址。这些地址不在Internet上使用,而是专门为内

  • 节省公网ip keepalived另类用法 2013-09-24

    用过keepalived 的朋友都知道在设置keepalived 的virtual ipaddress 地址时(以下简称vip)我们通常使用vip 相同网段的三个地址,问题来了如果有多个项目(vip)将会占用多个公网ip 地址,不过在使用keepalived 的过程中我们发现,即使用不同网段的ip 地址也能够"跑"vip ,举个例子比如我用内网地址 10.0.100.81 与 10.0.100.82 来跑公网 vip 192.168.57.75 ,这样我们就可以节省两个公网ip 地址了,不过要想

  • centos中lvs安装配置方法详解 2014-06-19

    一、lvs-nat模式 网络配置: 复制代码 代码如下: lvs-server eth0 :host-only adapter 192.168.56.101 lvs-server eth1 :Internal 192.168.0.1 real-server-1 eth0:Internal 192.168.0.2 real-server-2 eth0:Internal 192.168.0.3 lvs-server: 1、安装ipvsadm软件 复制代码 代码如下: yum -y install i

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.032 (s). 10 q(s)