zoukankan      html  css  js  c++  java
  • keepalived简介

    contents:

    什么是Keepalived
    VRRP协议简介
    Keepalived原理
    Keepalived配置文件详解
    Keepalived配置示例
    

    一 什么是Keepalived?

    保持存活,在网络里面就是保持在线了,即高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)发生。VRRP协议是keepalived实现的基础。

    keepalived + LVS实现负载均衡

    二 VRRP协议简介

    网络设计须考虑冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障。
    在路由器或三层交换机处实现冗余就显得尤为重要,Keepalived就是巧用VRRP协议来实现高可用性(HA)

    LAN客户端判定哪个路由器应该为其到达目标主机的下一跳网关的方式有动态及静态决策两种方式,其中,常见的动态路由发现方式有如下几种:

    1 Proxy ARP

    客户端使用ARP协议获取其想要到达的目标,而后,由某路由以其MAC地址响应此ARP请求;

    2 Routing Protocol

    客户端监听动态路由更新(如通过RIP或OSPF协议)并以之重建自己的路由表;

    3 ICMP IRDP (Router Discovery Protocol)

    客户端 —— 客户端主机运行一个ICMP路由发现客户端程序;

    动态路由发现协议不足:
    引起客户端一定的配置和处理方面的开销,并且,如果路由器故障,切换至其它路由器的过程会比较慢。
    解决此类问题的一个方案是为客户端静态配置默认路由设备,这大大简化了客户端的处理过程,但也会带来单点故障类的问题。默认网关故障时,LAN客户端仅能实现本地通信。

    VRRP通过在一组路由器(一个VRRP组)之间共享一个虚拟IP(VIP)解决静态配置问题,仅需客户端以VIP作为其默认网关。

    VLAN拓扑

    上图显示了一个基本的VLAN拓扑,其中:

    Router A、B、C共同组成一个VRRP组,其VIP为10.0.0.1,配置在路由器A的物理接口上,因此A为master路由器,B和C为backup路由器。

    VRRP组中,master(路由器A)负责负责转发发往VIP地址的报文,客户端A、B、C都以此VIP作为其默认网关。

    一旦master故障,backup路由器B和C中具有最高优先级的路由器将成为master并接管VIP地址,而当原来的master路由器A重新上线时,其将重新成为master路由器。

    VRRP是一个“选举”协议,它能够动态地将一个虚拟路由器的责任指定至同一个VRRP组中的其它路由器上,从而消除了静态路由配置的单点故障。

    三 Keepalived原理

    keepalived也是模块化设计,不同模块复杂不同的功能,下面是keepalived的组件

    core check vrrp libipfwc libipvs-2.4 libipvs-2.6
    
    core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
    check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
    vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
    libipfwc:iptables(ipchains)库,配置LVS会用到
    libipvs*:配置LVS会用到
    

    注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已

    keepalived原理

    keepalived启动后会有三个进程

    父进程:内存管理,子进程管理等等
    子进程:VRRP子进程
    子进程:healthcheckers子进程
    

    两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事;

    healthcheckers子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等;

    如果healthcheckers子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态

    四 Keepalived配置

    详见http://maoqiu.blog.51cto.com/8570467/1405675

  • 相关阅读:
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Python eval() 函数
    Python repr() 函数
  • 原文地址:https://www.cnblogs.com/pennli/p/8795113.html
Copyright © 2011-2022 走看看