keepalived是一个类似于Layer2,4,7交换机制的软件。是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障。
 
keepalived的工作原理:
         keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。在了解keepalived原理之前先了解一下VRRP协议。
 
VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议。是一种容错协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。在介绍VRRP之前先介绍一些关于VRRP的相关术语:
 
虚拟路由器:由一个 Master 路由器和多个 Backup 路由器组成。主机将虚拟路由器当作默认网关。
VRID:虚拟路由器的标识。有相同 VRID 的一组路由器构成一个虚拟路由器。
Master 路由器:虚拟路由器中承担报文转发任务的路由器
Backup 路由器: Master 路由器出现故障时,能够代替 Master 路由器工作的路由器。
虚拟 IP 地址:虚拟路由器的 IP 地址。一个虚拟路由器可以拥有一个或多个IP 地址。
IP 地址拥有者:接口 IP 地址与虚拟 IP 地址相同的路由器被称为 IP 地址拥有者。
虚拟 MAC 地址:一个虚拟路由器拥有一个虚拟 MAC 地址。虚拟 MAC 地址的格式为 00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应 ARP 请求使用的是虚拟 MAC 地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。
 
优先级: VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。
非抢占方式:如果 Backup 路由器工作在非抢占方式下,则只要 Master 路由器没有出现故障,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器。
抢占方式:如果 Backup 路由器工作在抢占方式下,当它收到 VRRP 报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的 Master 路由器的优先级高,就会主动抢占成为 Master 路由器;否则,将保持 Backup 状态。
 
虚拟路由示意图:
              

 
 
      VRRP将局域网内的一组路由器划分在一起,形成一个VRRP备份组,它在功能上相当于一台路由器的功能,使用虚拟路由器号进行标识(VRID)。虚拟路由器有自己的虚拟IP地址和虚拟MAC地址,它的外在变现形式和实际的物理路由完全一样。局域网内的主机将虚拟路由器的IP地址设置为默认网关,通过虚拟路由器与外部网络进行通信。
 
      虚拟路由器是工作在实际的物理路由器之上的。它由多个实际的路由器组成,包括一个Master路由器和多个Backup路由器。 Master路由器正常工作时,局域网内的主机通过Master与外界通信。当Master路由器出现故障时, Backup路由器中的一台设备将成为新的Master路由器,接替转发报文的工作。(路由器的高可用)
 
VRRP的工作工程
(1) 虚拟路由器中的路由器根据优先级选举出 Master。 Master 路由器通过发送免费 ARP 报文,将自己的虚拟 MAC 地址通知给与它连接的设备或者主机,从而承担报文转发任务;
(2) Master 路由器周期性发送 VRRP 报文,以公布其配置信息(优先级等)和工作状况;
(3) 如果 Master 路由器出现故障,虚拟路由器中的 Backup 路由器将根据优先级重新选举新的 Master;
(4) 虚拟路由器状态切换时, Master 路由器由一台设备切换为另外一台设备,的 Master 路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP地址信息的ARP 报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到 Master 路由器已经切换为另外一台设备。
(5) Backup 路由器的优先级高于 Master 路由器时,由 Backup 路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举 Master。
VRRP优先级的取值范围为0到255(数值越大表明优先级越高)
 
================================================================
 
 
 
keepalived的工作原理就是基于VRRP实现的,keepalived的体系结构图如下:

             
 
在这个机构图中,处于内核的IPVS和NETLINK,其中NETLINK是提供高级路由及其他相关的网络功能,如果在负载均衡器上启用iptables/netfilter,将会直接影响它的性能。对于图中不同模块功能的介绍如下:
 
         - VRRP Stack 负责负载均衡器之间的失败切换FailOver;//LVS中负责DR调度器组的
 
         - Checkers 负责检查调度器后端的Real server 或者 Upstream Server的健康状况; // 检查RS的状态,决定是否将其剔除
   - WatchDog 负责监控checkers和VRRP进程的状况;
   - IPVS wrapper 用来发送设定的规则到内核IPVS;
   - Netlink Reflector 用来设定VRRP的vip地址。// VIP也有‘人’管
 
 
keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp 
    - core:负责主进程的启动,维护和全局配置文件的加载;
    - check:负责健康检查
    - vrrp:用来实现vrrp协议
 
总结:在vrrp协议的基础上实现了服务器主机的负载均衡,VRRP负责调度器之间的高可用。
 
 
Keepalived 配置文件介绍:
 
              在yum安装好keepalived之后,keepalived会产生一个配置文件/etc/keepalived/keepalived.conf ,配置文件包含了三个段:
  全局定义段、VRRP实例定义段、虚拟服务器定义段。
 
  1. global_defs {
  2. notification_email { 指定keepalived在发生切换时需要发送email到的对象。
  3. acassen@firewall.loc
  4. }
  5. notification_email_from huangxin202823@163.com #指定发件人
  6. smtp_server smtp.163.com #指定smtp服务器地址
  7. smtp_connect_timeout 3 #指定smtp连接超时时间
  8. router_id LVS_DEVEL #运行keepalived的一个标识
  9. }
  10. vrrp_sync_group VG_1{ #监控多个网段的实例
  11. group{
  12. inside_network #实例名
  13. outside_network }
  14. notify_master /path/xx.sh #指定当切换到master时,执行的脚本
  15. netify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
  16. notify_fault "path/xx.shVG_1" #故障时执行的脚本
  17. notify /path/xx.sh #脚本所在目录
  18. smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知}
  19. #VRRP实例定义段
  20. vrrp_instance VI_1 {
  21. state MASTER #指定哪个为master,哪个为backup
  22. interface eth0 #设置实例绑定的网卡
  23. virtual_router_id 51 #VRID标记
  24. priority 100 #优先级,高优先级的DR会抢占为master (默认为抢占模式)
  25. advert_int 1 #检查间隔,1秒
  26. authentication { #设置认证
  27. auth_type PASS #认证方式
  28. auth_pass 1111 #认证字符串(使用 openssl rand -hex 6生成随机字符串)
  29. }
  30. virtual_ipaddress { #设置VIP
  31. <IPADDR>/<MASK> brd <IPADDR> dev <STRING>scope <SCOPE> label <LABEL>
  32. 192.168.200.17/24 deveth1
  33. 192.168.200.100/24 deveth2 label eth2:1
  34. }
  35. sorry_server 127.0.0.1 80 #web服务器全部失败,可以指定Sorry web
  36. }
  37. virtual_server 192.168.200.100 443 {
  38. delay_loop 6 #健康检查时间间隔,单位秒
  39. lb_algo rr #负载调度算法,支持的算法:rr|wrr|lc|wlc|lblc|sh|dh
  40. lb_kind DR #LVS的类型:有NAT|DR|TUN
  41. nat_mask255.255.255.0 #子网掩码
  42. persistence_timeout50 #会话保持时间,单位秒(可以适当延长时间以保持session)
  43. protocol TCP #转发协议类型,有TCP和UDP两种
  44.   real_server 192.168.201.100443 { #定义RS 服务
  45. weight 1#权重
  46. #inhibit_on_failure #当服务器健康检查失效时,将weight设置为0不是直接从ipvs中删除
  47. #notify_up <STRING>|<QUOTED-STRING>#Server启动时执行的脚本
  48. #notify_down <STRING>|<QUOTED-STRING>#Server down时执行的脚本
  49. #后端RS服务器的检查 (HTTP_GET 和SSL_GET):
  50. SSL_GET {
  51. url { #检查url,可以指定多个,status_codeand digest
  52. path /
  53. digest ff20ad #或者status_code 200 ....
  54. }
  55. connect_timeout 3 #连接超时时间
  56. nb_get_retry 3 #重连次数
  57. delay_before_retry 3 #重连间隔时间
  58. }
  59. #也可以通过TCP_CHECK判断RealServer的健康状况:
  60. }
  61. }
 

keepalived工作原理的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Keepalived 工作原理和配置说明

    keepalived是什么: 简单来说 Keepalived 的功能功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工作,一台slave热备:master失效后slave ...

  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. StringUtils工具类常用方法介绍(持续更新)

    StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出Nu ...

  2. Canvas + JavaScript 制作图片粒子效果

    首先看一下源图和转换成粒子效果的对比图:       左侧图片为源图,右侧图片为粒子效果图.该效果是在Canvas画布上制作的.将图片制作成粒子效果相对而言是比较简单的.重点了解两个知识点即可 1:图 ...

  3. java反射的理解与应用(某大神博客中看到的博文,写的真的太好了,果断转载作为笔记)

    原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html#undefined 一.什么是反射机制 简单的来说,反射机制指的是程序 ...

  4. API内部文件读取

    直接上代码吧 尝试将项目复制后建一个新的项目,结果总是有问题,不过可以把原项目转换为新项目,方法如下: 1.项目右键在android tools 有个 rename application packa ...

  5. .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)

    1..Net for Oracle 常见数据库驱动 1.1.微软提供的驱动 1.2.甲骨文提供的驱动 1.3.其它厂商提供的驱动 2.ODP.NET 常见问题分析 2.1.参数化问题 2.2.方法调用 ...

  6. 【轮子狂魔】手把手教你用JS给博客动态增加目录 - 超级懒人版

    动态显示目录的作用 不用每次写博客的时候繁琐的人工整理目录,又可以动态浮动在右下角,方便快速跳到感兴趣的位置同时也可以快速的对文章内容有一个大概的了解. 实现原理 首先根据个人喜好,我习惯了用 h1 ...

  7. 从0到1学习node(七)之express搭建简易论坛

    我们需要搭建的这个简易的论坛主要的功能有:注册.登录.发布主题.回复主题.下面我们来一步步地讲解这个系统是如何实现的. 总索引: http://www.xiabingbao.com/node/2017 ...

  8. BZOJ 3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者(贪心)

    这= =,就是线段覆盖对了= =直接贪心就行了= = CODE: #include<cstdio>#include<iostream>#include<cstring&g ...

  9. BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)

    这个= =最近刷的都是水题啊QAQ 排除掉不可能的边然后就最小生成树就行了= = CODE: #include<cstdio>#include<iostream>#includ ...

  10. HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(二)

    HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一) 下面来查看其他对保存HSTS信息的enabled_sts_hosts ...