keepalived是什么:

简单来说 Keepalived 的功能
功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工作,一台slave热备;master失效后slave立即接替工作
功能2.监控 工作集群中的主机  ,如果有一台服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除
         当服务器工作正常后Keepalived自动将web服务器加入到服务器群中

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
     但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

1. Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现.

   2.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
 

keepalived工作原理:

(功能1)keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup。master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
       MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能
       配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,
具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;
同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数(255最大)。

MASTER选举:
如果对外的虚拟路由器IP就是路由器本身配置的IP地址的话,该路由器始终都是MASTER;
否则如果不具备虚拟IP的话,将进行MASTER选举,各路由器都宣告自己是MASTER,发送VRRP通告信息;
如果收到其他机器的发来的通告信息的优先级比自己高,将转回BACKUP状态;
如果优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过如果对外的虚拟路由器IP就是路由器本身的IP的话,该路由器始终将是MASTER,这时的优先级值为255。

keepalived主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。

 (功能2)其工作在OSI七层协议的Layer3,4,7层。工作在IP/TCP协议栈的IP层,TCP层,及应用层。
原理分别如下:
Layer3网络层:
Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4传输层:
如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

Layer7应用层:
Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

 

keepalived的配置文件:

keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是
global_defs、            故障时默认邮件发送 参数
static_ipaddress、    设置本节点的IP              如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置
static_routes、          设置本节点路由信息       如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置
vrrp_script、              用来做健康检查,检查失败时会将vrrp_instance的priority减少相应的值。

vrrp_instance             用来定义对外提供服务的VIP区域及其相关属性
virtual_server            一般在超大型的LVS中用到,一般LVS用不到,略过

 

 
一、全局配置

全局配置又包括两个子配置

全局定义(global definition)

静态路由配置(static ipaddress/routes)

实战阶段:

1.全局定义(global definition)

global_defs {
notification_email                                                    发生诸如切换操作时发送email通知邮件地址 可以多个每行一个
{
   admin@example.com
}
notification_email_from admin@example.com         发送通知邮件时邮件源地址是谁

smtp_server 127.0.0.1                                            发送email时使用的smtp服务器地址

stmp_connect_timeout 30                                        连接smtp连接超时时间

router_id node1                                                        机器标识 节点名标识,主要用于通知中

}

2.静态地址和路由配置
static_ipaddress {
     10.210.214.163/24 brd 10.210.214.255 dev eth0                 静态ip配置        这里实际上和系统里面命令配置IP地址和路由一样
...}
static_routes {
     10.0.0.0/8 via 10.210.214.1 dev eth0                                    静态路由配置
...}
以上分别表示启动/关闭keepalived时在本机执行的如下命令:

# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0
注意: 请忽略这两个区域,一般这个区域不需要配置,因为我坚信你的机器肯定已经配置了IP和路由。

二、VRRPD配置

VRRPD配置包括三个类

VRRP实例(VRRP Instance)

VRRP同步组(synchroization group)

VRRP脚本

 

1.VRRP实例(instance)

vrrp_instance http {
state   MASTER           实例初始状态(还要根据priority值确定)可以是MASTER 或 BACKUP
                                               如果设置了nopreempt 则这个值不起作用,主从根据priority确定
interface eth0               实例节点固有IP(非VIP)的网卡,用来发VRRP包
dont_track_primary     忽略VRRP网卡错误。(默认未设置)
track_interface {           监控以下网卡,如果任何一个不通就会切换到故障FALT状态。(可选项)
     eth0 eth1
}
mcast_src_ip <IPADDR>     vrrp组播包的源地址,默认源地址为master的IP 这里相当于heartbeat的心跳端口
                                                  如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
garp_master_delay 10          当切换为Master状态后多久更新ARP缓存
virtual_router_id 51                虚拟路由标识即VRID  相同的VRID为一个组 他将决定多播的MAC地址
priority 100                             定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER 的优先级必须大于BACKUP。
                                                 
这个选项的值最好高于其他机器50个点,该项范围是1-255
advert_int 1                           检查间隔默认为1秒

authentication {                     设置认证
      auth_type PASS                   认证方式可以是PASS或AH两种认证方式
      autp_pass 1234                    认证密码
}

设置虚拟IP 可以设置多个
virtual_ipaddress {

#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

}

设置虚拟路由的地方
virtual_routes {

# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab

src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1

192.168.110.0/24 via 192.168.200.254 dev eth1

192.168.111.0/24 dev eth2

192.168.112.0/24 via 192.168.100.254

}

nopreempt                      设置不抢占,这里只能设置在state为backup的节点上
                                         而且这个节点的优先级必须别另外的高。当主MASTER恢复后不抢占资源

preemtp_delay 300       抢占延迟 master启动多久之后进行接管资源(VIP/Route信息等)

debug                               debug级别

}

注意事项: 设置state为 双备原理
通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP.
这样就会发生两次切换对业务繁忙的网站来说是不好的。
所以我们要在配置文件加入 nopreempt 非抢占 参数,但是这个参数只能用于state 为backup,
故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。
 这样加上nopreempt的时候,即使master又好了,依旧不会切换 。 
    state   nopreempt  priority
 主机  backup  设置  100
 从机  backup  不设置  50


2.VRRP同步组(synchroization group)配置

定义vrrp_intance组,使得这个组内成员动作一致。

例如两个vrrp_instance同属于一个vrrp_rsync_group,
那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。

vrrp_sync_group VG_1 {
group { 
  http 
  mysql 

notify_master /path/to/to_master.sh      表示当切换到master状态时要执行的脚本
notify_backup /path_to/to_backup.sh   表示当切换到backup状态时要执行的脚本
notify_fault "/path/fault.sh VG_1"      表示出错状态时要执行的脚本
notify /path/to/notify.sh                       表示任何状态切换时都调用该脚本,该脚本在以上三个脚本执行完成之后进行调用
smtp_alert                                          表示切换时给global defs中定义的邮件地址发送邮件通知
}

 

3.VRRP脚本
告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script
vrrp_script check_running {

script "/usr/local/bin/check_running"

定义脚本名字

interval 10

脚本执行的间隔

weight -10

脚本执行的优先级

}

如果script中的指令执行失败,那么相应的vrrp_instance的优先级会减少10个点
  • 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
  • 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
  • 其他情况,原本配置的优先级不变,即配置文件中priority对应的值。
 
 

Keepalived 工作原理和配置说明的更多相关文章

  1. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  2. keepalived工作原理和配置说明

    keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived工作原理 keepalived是以VR ...

  3. 转载: keepalived工作原理和配置说明

    转自:http://outofmemory.cn/wiki/keepalived-configuration keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件, ...

  4. keepalived工作原理和配置文件说明

    keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived工作原理 keepalived是以VR ...

  5. [转帖]keepalived工作原理和配置、使用

    keepalived工作原理和配置.使用 https://www.iteye.com/blog/aoyouzi-2288124 keepalived是什么 keepalived是集群管理中保证集群高可 ...

  6. keepalived工作原理

    keepalived是一个类似于Layer2,4,7交换机制的软件.是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障.   keepalived的工作原理:         ...

  7. Linux keepalived工作原理

    keepalived简介与工作原理 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他 ...

  8. keepalived 工作原理

    keepalived主要通过vrrp协议为基础进行通信 所以先从VRRP协议说起: VRRP: 英文全称 Virtual Router Redundancy Protocol, .中文:虚拟路由冗余协 ...

  9. 简述keepalived工作原理

    1.Keepalived 定义 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器 ...

随机推荐

  1. 非关系数据库与redis安装

    1.什么是 NoSQL? NoSQL(NoSQL = Not Only SQL ),意为反 SQL 运动,是一项全新的数据库革命性运动,2000 年 前就有人提出,发展至 2009 年趋势越发高涨.它 ...

  2. 谈谈Java的Collection接口

    目录 谈谈Collection 前言 Collection 方法 1.boolean add(E) 2.void clear() 3.boolean contains(Object o) 4.bool ...

  3. scratch3.0二次开发scratch3.0基本介绍(第一章)

    为什么要自己开发而不使用官方版本? 这个问题要看我们的做少儿编程教育的需求是怎么样的. scratch本身提供了离线版本以及官网在线平台供我们使用,这足以满足我们对于编程教学模块的需求.但是对于一些教 ...

  4. wtforms 钩子函数

    参考: https://www.cnblogs.com/wupeiqi/articles/8202357.html class LoginForm(Form): name = simple.Strin ...

  5. Redis 使用总结

    1. 避免大key 危害: 数据热点问题,集群模式在slot分片均匀情况下,会出现数据和查询倾斜情况,部分有大key的Redis节点占用内存多,QPS高 慢查询问题,服务超时 网卡带宽压力,极端情况下 ...

  6. 从0开发3D引擎(八):准备“搭建引擎雏形”

    大家好,现在开始本系列的第三部分,按照以下几个步骤来搭建引擎雏形: 1.分析引擎的需求 2.实现最小的3D程序 3.从中提炼引擎原型 4.一步一步地对引擎进行改进,使其具备良好的架构 5.实现与架构相 ...

  7. NC使用教程

    NetCat参数说明: 一般netcat做的最多的事情为以下三种: 扫描指定IP端口情况 端口转发数据(重点) 提交自定义数据包 1.扫描常用命令. 以下IP 处可以使用域名,nc会调用NDS解析成I ...

  8. 「 从0到1学习微服务SpringCloud 」13 断路器Hystrix

    背景与功能 在微服务架构中,很多情况下,各个服务之间是相互依赖,一个服务可能会调用了好几个其他服务,假设其中有一个服务故障,便会产生级联故障,最终导致整个系统崩溃无法使用(这称为雪崩效应),Sprin ...

  9. QEMU和KVM的关系

    首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器).在支持VMX(Virtual Machin ...

  10. JavaFx图形界面开发

    相关学习教程:http://www.javafxchina.net/blog/docs/ ,makery写的教程:https://code.makery.ch/zh-cn/library/javafx ...