Keepalived+lvs+httpd之负载均衡

最近在研究 负载均衡。目前研究的是keepalived+lvs模式

1、软件介绍

keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。

单点故障:在公司整个业务流程中,某一点出现故障就会导致整个系统架构不可用,单点故障常发生在数据库、核心业务系统等。对此我们的解决办法是对核心业务系统进行高可用负载均衡。

LVS:Linux    Virtual    Server,linux虚拟服务器,是一个虚拟的服务器集群系统。目前有三种负载均衡技术(VS/NAT、VS/TUN和VS/DR);十种调度算法(rrr|wrr|lc|wlc|lblcr|lblc|dh|sh|sed|nq)。

2、实验拓扑图。

本次实验一共用到4台服务器,其中两台服务器用来搭建keepalived+lvs,另两台是对外提供服务的web服务器。

本次实验用到了5个ip地址。

Master:10.68.4.201                  Backup:10.68.4.58

web1:10.68.4.198                    web2:10.68.4.248

virtualIP:10.68.4.199

3、拓扑图介绍

keepalived--master和keepalived--backup  两者之间通过vrrp协议利用组播进行通信,master主机对外接受请求并将请求转发至后方的realserver,backup主机只接受请求而不转发请求。某时刻当backup主机没有接受到master主机发送的信息时,于是发送vrrp通告信息并广播arp信息,宣城自己是master,如果收到其他主机发送的通告信息的优先级比自己的高,那么自己将继续转为backup,优先级别高的机器,此时就是新master主机,并接替原master主机的工作。

每个keepalived机器都对后方的realserver进行监控,只不过master负责将外部请求转发至后方的realserver,backup则不作该处理。

4、keepalived安装

keepalived的安装参照这篇博客http://my.oschina.net/zyc1016/blog/138574?p=2#comments

keepalived的配置参照这篇博客http://bbs.nanjimao.com/thread-845-1-1.html

安装的过程中,如果报错

checking for IPVS syncd support... yes
                    checking for kernel macvlan support... no
                    checking whether SO_MARK is declared... no
                    configure: error: No SO_MARK declaration in headers

那么只需要在编译时,添加--disable-fwmark参数即可。最后确保如下几项为yes状态即可,加粗一定得是yes。

Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : Yes Use VRRP Framework : Yes

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {    #定义一个vrrp组,组名唯一  
    state MASTER        #定义改主机为keepalived的master主机
    interface eth0      #监控eth0号端口  
    virtual_router_id 58   #虚拟路由id号为58,id号唯一,这个id决定了多播的MAC地址
    priority 150         #设置本节点的优先级,master的优先级 要比backup的优先级别高,数值要大
    advert_int 1         #检查间隔,默认为1秒
    authentication {
        auth_type PASS    #认证方式,密码认证
        auth_pass 1111    #认证的密码,这个密码必须和backup上的一致
    }
    virtual_ipaddress {    #设置虚拟的ip, 这个ip是以后对外提供服务的ip。
        10.68.4.199
    }
}

virtual_server 10.68.4.199 80 {    #虚拟主机设置,ip同上。
    delay_loop 2                  #服务器轮询的时间间隔
    lb_algo rr                    #lvs的调度算法
    lb_kind DR                    #lvs的集群模式
    nat_mask 255.255.255.0
    persistence_timeout 50        #会话超时50s
    protocol TCP                  #健康检查是用tcp还是udp

    real_server 10.68.4.248 80 {    #后端真实主机1
        weight 100                #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {                #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }

    real_server 10.68.4.198 80 {        #后端真实主机2
        weight 100                    #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {                    #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }
}

backup主机的配置基本同上,只有以下地方需要修改。

state BACKUP        #定义改主机为keepalived的backup主机,监控主master
priority 100         #设置本节点的优先级,数值要比master主机上的小

测试keepalived的故障漂移,

首先,在10.68.4.201和10.68.4.58上同时启动keepalived,此时观察master主机和backup主机

可以看出虚拟ip此时绑定在4.201--master上,然后停止4.201上的keepalived服务

通过查看4.58上的日志,可以看到4.58已经宣告自己是master了。并且虚拟ip也漂移到新的mater机器上。

以上的配置,keepalived的高可用功能已经实现。

5、realserver服务器配置

本例中,我在4.198和4.248上,分别安装了httpd,模拟两台web服务器。然后要在两台服务器上配置虚拟vip,这里我写了一个脚本。

#!/bin/bash
#description: config realserver lo  and  apply noarp

WEB_VIP=10.68.4.199  #虚拟vip,也就是虚拟ip
. /etc/rc.d/init.d/functions

case "$1" in

start)
   ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
   /sbin/route add -host $WEB_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
   echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
   echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
   echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
   echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
   sysctl -p >/dev/null 2>&1
   echo "RealServer Start OK"
   ;;
stop)
   ifconfig lo:0 down
   route del $WEB_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 "0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
   echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_announce
   echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore
   echo "0" > /proc/sys/net/ipv4/conf/default/arp_announce
   echo "RealServer Stoped"
   ;;
status)
       # Status of LVS-DR real server.
       islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
       isrothere=`netstat -rn | grep "lo:0" | grep $WEB_VIP`
       if [ ! "$islothere" -o ! "isrothere" ];then
         # Either the route or the lo:0 device
         # not found.
         echo "LVS-DR real server Stopped."
       else
         echo "LVS-DR Running."
       fi
;;
*)
       # Invalid entry.
       echo "$0: Usage: $0 {start|status|stop}"
       exit 1
;;
esac
exit 0

将此脚本分别在4.198和4.248上执行下。此时,我们在两台keepalived的主机上可以查看到如下相同信息。

此时,我们通过网页访问10.68.4.199,时,根据ipvsadm查询到的realserver主机的顺序,可以看出此时优先访问4.198.

而当我们将4.198这台机器的httpd的服务停掉,首先可以看到两台keepalived主机都会将4.198这台机器剔除,此时我们再次查询时ipvsadm,只可以看到一台web服务器,再次页面访问,这时就是在访问4.248这台机器了。

而当我们修复好4.198机器后,keepalived又会自动将改服务器添加进来。

从上面的测试可知,lvs的负载均衡功能已经实现。

6、我碰到过的问题

页面乜有任何显示,思来想去就是找不到问题出在哪?    后面从论坛上看到一位网友也出现同样的问题,细问下才知导致这个问题出现是因为我们keepalived.conf 文件   的书写格式存在问题,后面我回去重新检查了下,发现少写了一个 “}”  keepalived启动时不会检测keepalived.conf 配置文件语法格式。 所以以后再配置书写时,一定要格外注意啊。

时间: 2024-08-29 08:14:21

Keepalived+lvs+httpd之负载均衡的相关文章

keepalived+lvs 实现tcp负载均衡

因为测试机其有限,而且也只是为了看看lvs负载均衡tcp端口能否正确获取到客户端的真实IP,之前用过nginx,haproxy,对非http协议的获取客户端真实IP都毫无办法.安装过程就不叙述. keepalived+lvs server 192.168.53.10 DR server 192.168.53.10 real server 192.168.53.12 keepalived server :执行以下操作 [ [email protected] ]cat keepalived.conf

mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

mysql主从复制与lvs+keepalived实现负载高可用 目录 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方案    4 3.1.环境    4 3.2.架构图    5 3.3.设计原理    6 4.相关软件安装    6 4.配置mysql的主从    7 5.通过lvs+keepalived实现负载与热备,并实现读写分离    8 1.前言 最近研究了下高可用的东西,这里总结一下mysql主从复制读

Consul+Nginx+Upsync+Linux+Keepalived+Lvs的动态负载均衡

注: Nginx版本必须大于等于1.9,linux我使用的是7.0版本,记得关闭防火墙 开始正文: 这里只提一下两个比较会出错的配置,consul,upsync,PCRE库,SSL库,ZLIB库的配置网上很多不一一详解(我是在/usr/local中配置的) Nginx的配置: cd /usr/local/ wget http://nginx.org/download/nginx-1.9.10.tar.gz tar -zxvf nginx-1.9.10.tar.gz groupadd nginx

Keepalived + LVS 高可用负载均衡集群部署

Keepalived(高可用) 通过在两台主.备调度器上实现Keepalived高可用解决调度器单点失败问题 主.备调度器上配置LVS,正常情况下主调度器工作 主调度器异常时,Keepalived启用备用调度器,保证了调度器的高可用 调度器保证了后台服务的高可用 Keepalived机制把同一个IP一直分配给同一个Web服务器 IP地址分配: Web1:        192.168.10.20      ifcfg-lo:0   192.168.10.50 Web2:        192.1

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

用LVS+Keepalived实现高可用负载均衡,简单来说就是由LVS提供负载均衡,keepalived通过对rs进行健康检查.对主备机(director)进行故障自动切换,实现高可用. 1. LVS NAT模式配置准备三台服务器,一台director, 两台real serverdr1: 外网ip 192.168.75.130,内网ip 10.1.1.10 两台real serverrs1: 内网ip 10.1.1.11rs2: 内网ip 10.1.1.12 两台real server的内网网

MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验【转】

一.环境Master(主机A):192.168.1.1Slave(主机B) :192.168.1.2  W-VIP(写入)  :192.168.1.3 R-VIP(读取)  :192.168.1.4 Client(测试) :192.168.1.100 操作系统版本:CentOS release 6.4MySQL数据库版本:5.6.14keepalived版本:1.2.7LVS版本:1.26 所有环境均为虚拟机 二.设计思路 1. 服务器A和B,通过mysql的slave进程同步数据.2. 通过k

借助LVS+Keepalived实现mysql的负载均衡

1 初识LVS:Linux Virtual Server 1.1 LVS是什么       LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,

lvs+keepalived+nginx实现高性能负载均衡集群(转)

lvs+keepalived+nginx实现高性能负载均衡集群 一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件,并能实现无缝配置变更! 二.LVS+Keepalived介绍 1.  LVS LVS是一个开源

mysql主从之LVS+keepalived+双主MySQL 负载均衡

LVS(Linux Virtual Server)即Linux 虚拟服务器,是一个的开源负载均衡项目,目前LVS 已经被集成到Linux 内核模块中.LVS 是四层负载均衡,也就是说建立在OSI 模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS 支持TCP/UDP 的负载均衡. 一 环境 192.168.132.120    VIP192.168.132.123   LVS01,keepalived192.168.132.124   LVS02,keepalived192.