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

转载 2017年01月03日 18:08:35
一、原理        
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,继续提供服务,从而保证了高可用性,具体如下图:

图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端口请求到后端的真实服务器来处业务逻辑,系统拓扑如下图所示:

图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地址。
        如果这些你都搞定了,恭喜你,你已经拥有高可用服务了,!

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

  • 2017年09月13日 16:44
  • 169KB
  • 下载

利用lvs+keepalived实现高可用负载均衡环境的部署

http://wangwq.blog.51cto.com/8711737/1852212 ,运行即可(注意脚本的VIP,不同的realserver对应不同的VIP) ...

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

转自:http://www.discuz.net/thread-1100984-1-1.html 作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性...

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

LVS + Keepalived 实现高可用负载均衡
  • xymyeah
  • xymyeah
  • 2011年03月16日 17:54
  • 726

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

最近公司用做负责均衡,研究了一下lvs,做为我的第一篇博客吧。 一.            LVS+Keepalived 介绍 1.      LVS LVS是Linux Virtual Serve...

LVS(NAT)+keepalived实现高性能高可用负载均衡

背景:         随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高...

centos部署lvs+keepalived+apache/tomcat实现高性能高可用负载均衡

前言: 常用的有的负载均衡软件有lvs、haproxy、nginx 一般lvs和keeplavied一起使用 lvs是实现负载均衡作用的,即将客户端的需求采用特定的负载均衡算法分发到后端的Web应用服...
  • nuli888
  • nuli888
  • 2016年07月14日 19:10
  • 3430

CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

一、简介 VS/NAT原理图: 二、系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1....
  • midion9
  • midion9
  • 2015年10月16日 08:38
  • 351

keepalived实现LVS_DR+HA高可用负载均衡

LVS_DR模式是一种负载均衡的模式,但是存在一个问题,当后端其中一台RS down掉后,LBserver是不会将请求都转发到另一台RS的,这样就会导致一半的请求会访问失败,keepalive解决了这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LVS+Keepalived实现高可用负载均衡
举报原因:
原因补充:

(最多只允许输入30个字)