原理-->
通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移.
通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现了虚拟路由的重新选择.

通过notify定义通知脚本,在重新选择时,发送通知邮件.
故,根据vrrp的运行机制,那么keepalived的默认工作机制就是一主多从.

vrrp状态转移机制图:

若需要双主,则需要在节点前,添加两组vip和vmac,然后将客户端分成两份,一份指向vip1,一份指向vip2,vip1对应节点A,vip2对应节点B,并通过dns的A记录,来将客户的请求,均分到两个节点上,并通过节点反向代理给上游服务器
功能-->
最初就是为了给IPVS提供高可用,并且可以自动调用ipvsadm添加规则,当然规则信息是又keepalived的配置文件定义的,后来也可以为其他轻量级的调度器(nginx等)提供高可用,不过在非ipvs服务中,需要调用vrrp_script来判定
核心组件-->master进程+vrrp+checkers
master进程基于watchdog来查看子进程的状态,子进程不停的通过内部套接字给主进程发送心跳信息,如果master没收到,则kill掉对应的子进程,并重启
子进程有两个:

vrrp:虚拟冗余路由协议,作用就是将多个网关虚拟成一个虚拟网关(vip和vmac都是虚拟的),从而解决默认网关失效

checkers:检查各项服务的可用性,,怎么检测,则需要自己定义脚本
配置文件-->/etc/keepalived/keepalived.conf(每个节点都需要)
! Configuration File for keepalived
#****************************************全局配置段************************************
global_defs {
#定义接收邮箱
   notification_email {
       root@localhost
   }
#定义发送邮箱(可随意,即便不存在也可以)
   notification_email_from admin@localhost
#定义邮件服务器
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#********************************虚拟路由配置段:定义虚拟路由相关信*************************************
#为keepalived定义服务检测脚本,定义关键字就是vrrp_script
vrrp_script chk_keepalived_down {
#如果存在down文件,则返回1(表示keepalived服务失效),否则返回0(表示服务没有失效)
    script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
#检测间隔1秒
    interval 1
#如果失效,权重减2
    weight -2
}

#为nginx提供高可用
vrrp_script chk_nginx {
#检测nginx是否存在,如果存在返回0,如果不存在返回1
    script "killall -0 nginx"
#检测间隔时间
    interval 1
#如果失败,权重减2
    weight 2
#失败检测次数
    fall 2
#成功检测次数
    rise 1
}

#定义vrrp实例VI_1(即一个虚拟路由器)
vrrp_instance VI_1 {
#若权重高,则定义此实例为主(主从区别),从为BACKUP
    state MASTER
#定义接口(便于从哪个网卡进行宣告,从而进行优先级选举)
    interface eth0
#定义vrrp虚拟路由唯一标识,即确定vmac
    virtual_router_id 51
#初始权重(主从区别),从需要比此数据小
    priority 100
#通告
    advert_int 1
#认证机制,防止未知设备,成为节点
    authentication {
#认证类型:密码
        auth_type PASS
#认证密钥随机字符串
        auth_pass 1111
    }
#定义vip
    virtual_ipaddress {
        10.10.10.2
    }
#追踪脚本
    track_script {
    chk_keepalived_down
    chk_nginx
    }
}

#为ipvs提供高可用,需要与vip相同(也可以根据防火墙标识来定义,virtual_server fwmark int)
virtual_server 10.10.10.2 80 {
    delay_loop 6
#负载均衡算法,若使用wrr,则real server中的权重不能相同
    lb_algo rr 
#负载均衡模式
    lb_kind DR
#vip掩码
    net_mask 255.255.255.0
#持久连接
    persistence_timeout 50
#负载均衡协议
    protocol TCP
#类似于fail_back
    sorry_server 192.168.200.200 80
#定义第一个真实服务器
    real_server 192.168.200.2 80 {
#权重
        weight 1
#real server的状态信息检测,定义http判定,并使用HTTP_GET方法检测(也可以使用SSL_GET/TCP_CHECK检测,其中TCP_CHECK检测,仅仅只需要定义connect_timeout就可以了)
        HTTP_GET {
            url { 
              path /
              status_code 200
            }
#超时时间
            connect_timeout 3
#重试次数
            nb_get_retry 3
#重试等待间隔时间
            delay_before_retry 3
        }
    }
#定义第二个真实服务器
    real_server 192.168.200.3 80 {
        weight 1
        HTTP_GET {
            url { 
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}




1、如何在状态转换时进行通知?(需要自己写脚本来进行通知)
在/etc/keepalived/keepalived.conf中vrrp_instance上下问中定义通知脚本:
notify_master|backup|fault指切换到master|backup|fault时执行的脚本,使用绝对路径
notify_master "/path/to/master.sh master"
notify_backup "/path/to/backup.sh backup"
notify_fault "/path/to/fault.sh fault"

master脚本示例如下-->转换成master时发邮件通知:
#!/bin/bash
#
vip=192.168.1.250
contact='root@localhost'
thisip=`ifconfig eth0 | awk -F : '/inet addr/{print $2}' | awk '{print $1}'`
notify(){
#定义邮件内容
    mailbody="vrrp transaction:vrrp changed the keepalived service to $1."
    subject="$thisip is to be $1."
    echo $mailbody | mail -s "$subject" $contact
}
case "$1" in 
    master)
        notify master
        exit 0
    ;;
    backup)
        notify backup
        exit 0
    ;;
    fault)
        notify fault
        exit 0
    ;;
    *)
        echo 'Usage:`basename $0` {master|backup|fault}'
        exit 1
    ;;
esac

2、如何配置IPVS高可用(安装ipvsadm,查看ipvs规则负载均衡集群之LVS配置命令),ipvs高可用,keepalived已经提供了状态通知脚本,不需要自行定义
在/etc/keepalived/keepalived.conf中添加virtual_server上下文:
    virutal server
    realserver
        health check
配置格式如下-->
virtual_server vip port {
    lb_kind
    #定义负载均衡算法(rr,wrr,sh,dh,lblc,lc)负载均衡集群之LVS算法和模型
    lb_algo
    real_server rip port {
        weight
        notify_up "up.sh"
        notify_down "down.sh"
    }        
}
配置示例-->
virtual_server 10.10.10.2 80 {
    delay_loop 6
#负载均衡算法
    lb_algo rr
#负载均衡模式
    lb_kind DR
#持久连接
    persistence_timeout 50
#负载均衡协议
    protocol TCP
#类似于fail_back
    sorry_server 192.168.200.200 80
#定义第一个真实服务器
    real_server 192.168.200.2 80 {
#权重
        weight 1
#定义http判定,并使用get方法
        HTTP_GET {
            url {
              path /
              status_code 200
            }
#超时时间
            connect_timeout 3
#重试次数
            nb_get_retry 3
#重试等待间隔时间
            delay_before_retry 3
        }
    }
#定义第二个真实服务器
    real_server 192.168.200.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

3、如何对某特定服务器做高可用?(这里以nginx为例)
关键点:监控服务和追踪服务,具体查看上面的配置文件
4、如何实现基于多虚拟路由的master/master模型
定义两个vrrp_instance即可,需要注意的是vmac标识不能一样

高可用集群(HA)之Keeplived原理+配置过程的更多相关文章

  1. 高可用集群(HA)之DRBD原理和基础配置

    目录 1.工作原理图 2.用户空间工具 3.工作模式 4.实现主备故障自动切换 5.所需软件 6.配置文件 7.详细配置     1.配置通用属性信息     2.定义一个资源     3.初始化资源 ...

  2. linux高可用集群(HA)原理详解(转载)

    一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...

  3. linux高可用集群(HA)原理详解

    高可用集群 一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服 ...

  4. 分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  5. 分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

    原文:http://www.iteye.com/topic/1145651 从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...

  6. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

  7. Mycat节点扩缩容及高可用集群方案

    数据迁移与扩容实践: 工具目前从 mycat1.6,准备工作:1.mycat 所在环境安装 mysql 客户端程序. 2.mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包. 3.对 ...

  8. Hadoop高可用集群

    1.简介 若HDFS集群中只配置了一个NameNode,那么当该NameNode所在的节点宕机,则整个HDFS就不能进行文件的上传和下载. 若YARN集群中只配置了一个ResourceManager, ...

  9. LVS+Keepalived-DR模式负载均衡高可用集群

    LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...

随机推荐

  1. JS函数自动执行

    关于让网页中的JavaScript函数自动执行,方法就多洛,但是万变不离其宗,下面给大家介绍一下! 前提条件,网页中必须有JS函数代码,或者,使用文件导入的方法也行: 在HTML中的Head区域中,有 ...

  2. WPF InkCanvas MouseDown及MouseLeftButtonDown事件不触发的代替事件

    PreviewMouseDown事件可以触发  再通过e.LeftButton 的状态判断是否按钮被按下 特此备忘

  3. android UI之Shape详解_GradientDrawable

    在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来解决.不过这种方式可能需要多个图片,比如一个按钮,需要点击时的式样图片,默认的式样图片. 这样就容易使apk变大. 那 ...

  4. centos 6.5 hadoop 2.3 初配置

    为了安装hadoop废了好大的劲才把esxi5.5给装好. 同时装了centos6.5,由于hadoop里面有个免密码登陆所以这里讲的就是免密码登陆. 看了大家的博客文章发现转发的一部分,写ubunt ...

  5. UNIX时间戳与日期的相互转换

    mysql中UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数:FROM_UNIXTIME() select FROM_UNIXTIME(1410318106); 日期转换为UNIX时间戳 ...

  6. Uiviewcontroller 控制器的生命周期

    这是一个ViewController完整的声明周期,其实里面还有好多地方需要我们注意一下: 1:initialize函数并不会每次创建对象都调用,只有在这个类第一次创建对象时才会调用,做一些类的准备工 ...

  7. Max Sum of Max-K-sub-sequence(单调队列)

    Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. To Miss Our Children Time(dp)

    To Miss Our Children Time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Jav ...

  9. 微信网页授权获取code链接

    本公众号授权 "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&r ...

  10. fuser:用文件或者套接口表示进程

    fuser:用文件或者套接口表示进程 作用:fuser命令用文件或者套接口表示进程. 用法:fuser [-a | -s | -c] [-4 | -6] [-n space] [-k [-i] [-s ...