keepalived 工作原理与配置文件讲解

Posted derrickrose

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived 工作原理与配置文件讲解相关的知识,希望对你有一定的参考价值。

1、简介

Keepalived:高可用或热备软件,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构不可用)的发生,keepalived就是VRRP协议的实现。

2、原理

keepalived采用是模块化设计,不同模块实现不同的功能,keepalived主要有三个模块,分别是core、check和vrrp。 core:是keepalived的核心,负责主进程的

启动和维护,全局配置文件的加载解析等 check: 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;

可基于脚本检查对IPVS后端服务器健康状况进行检查。 vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的,以上是主要组件;下面是其他库: libipfwc:iptables/ipchains库,配置LVS会用到 libipvs*:配置LVS会用到,注意,keepalived和LVS完全是两码事,各司其职相互配合。

        3、架构图

         技术分享图片

Keepalived启动后会有三个进程:

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

子进程:vrrpd子进程

子进程:healthchecker子进程

由上图可知,两个子进程都被系统WatchDog看管,两个子进程各自实现自己的事,healthchecker子进程实现检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态

 

4、工作原理

      keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是第3层、第4层和第5层交换,分别工作在IP/TCP协议栈的IP层、TCP层、应用层,原理分别如下:Layer3: Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既Ping),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除(这种情况的典型例子是某台服务器被非法关机)。Layer3方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 Layer4: Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

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

   5、vrrp协议介绍

VRRP协议简介

在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:

在主机上使用动态路由协议(RIP、OSPF等)

 在主机上配置静态路由

很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点。

VRRP的目的就是为了解决静态路由单点故障问题。

VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

工作机制

在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如 拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。

VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由 器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。

在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。

 

6、配置文件keepalived.conf 的介绍

#全局定义模块
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]   #邮件报警,可以不设置。
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL    #此处注意router_id为负载均衡标识,在局域网内应该是唯一的,建议使用机器名。
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

 #VRRP实例定义块
vrrp_instance VI_1 {
    state MASTER   #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
    interface eth0
    lvs_sync_daemon_inteface eth0  #这个默认没有,相当于心跳线接口,DR模式用的和上面的接口一样,也可以用机器上的其他网卡eth1,用来防止脑裂。
    virtual_router_id 51          #虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
    priority 100                #优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高。
    advert_int 1                #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    authentication {
        auth_type PASS             #验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS,
        auth_pass 1111              据说AH 使用时有问题。验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信。
    }
    virtual_ipaddress {   #虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
        192.168.200.100
        192.168.200.101
        192.168.200.102
    }
} 
#虚拟服务器定义块
virtual_server 192.168.200.100 443 {   #虚拟IP,来源与上面的虚拟IP地址,后面加空格加端口号
    delay_loop 6              #健康检查间隔,单位为秒
    lb_algo rr                #负载均衡调度算法,一般用wrr、rr、wlc
    lb_kind NAT               #负载均衡转发规则。一般包括DR,NAT,TUN 3种。
    persistence_timeout 50       #会话保持时间,会话保持,就是把用户请求转发给同一个服务器,不然刚在1上提交完帐号密码,就跳转到另一台服务器2上了。
    protocol TCP              #转发协议,有TCP和UDP两种,一般用TCP,没用过UDP。

    real_server 192.168.201.100 80 {          #真实服务器,包括IP和端口号
        weight 1              #权重,数值越大,权重越高 
        TCP_CHECK {            #通过tcpcheck判断RealServer的健康状态
            connect_timeout 3      #连接超时时间
            nb_get_retry 3       #重连次数
            delay_before_retry 3    #重连时间间隔
            connect_port 80        #检测端口
        }
    }
}

 

 

以上是关于keepalived 工作原理与配置文件讲解的主要内容,如果未能解决你的问题,请参考以下文章

keepalived

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

keepalived基础知识及扩展讲解

keepalived高可用

keepalived高可用

keepalived高可用