keepalived高可用原理

来源:互联网 发布:js alert 编辑:程序博客网 时间:2024/05/16 17:41

简介

keepalived是实现高可用(high available)的软件,那什么是高可用?怎么个高可用呢?

高可用就是尽可能高的使服务器正常提供服务,特别是在服务器受到物理伤害或者发生意外时候,一般情况下是利用冗余策略,来使用备用服务器顶替损坏的服务器来提供正常服务。

高可用对于不同的应用有不同的解决办法,keepalived专门解决的是没有涉及到存储的数据的服务。比如前端代理服务器的高可用。

高可用指标

在我们学校,我经常听到一个爱吹牛逼的老师,整天拿着4个9,来证明自己的水平有多高,这里就不说是那个老师了,毕竟他是我们的老师。那么四个9,五个9,指的是什么呢?其实就是自己的服务器年正常运行与年总天数365天的比例。
99% 一年宕机时间不超过4天
99.9% 一年宕机时间不超过10小时
99.99% 一年宕机时间不超过1小时
99.999% 一年宕机时间不超过6分钟

keepalived实现思路

整体思路:

是两台主机根据故障情况设置别名ip,如果两台主机都没有故障,则根据优先级来设定别名ip。

具体思路:

这里考虑两台主机之间的地址流动。两台主机都安装keepalived,并设定主(MASTER),备(BACKUP),和优先级。在启动服务时候,让两台keepalived主机进行组播通信,告诉彼此自己的优先级,优先级高的就设置网卡别名ip。当MASTER主机故障时候,BACKUP主机不能接收到来自MASTER主机的比自己优先级高的报文,则在自己的网卡上设置别名ip。如果MASTER主机恢复,则将自己的优先级通过组播发送出去,BACKUP主机接收到报文发现比自己的优先级高,则删除掉别名ip,同时MASTER发现并没有比自己优先级高的主机发来的报文,则在自己的网卡上设置别名ip。这样就达到了ip流动的技术。如果MASTER主机因为业务繁忙,没有将组播发送出去告知BACKUP主机,则BACKUP主机在自己的网卡上设置别名ip,这时候MASTER主机上也有相同的别名ip,过一会BACKUP在接收到比自己优先级高的报文后,又将设置的别名ip删除,这样就出现了ip抖动的情况。如果有多台主机思路一样,只是BACKUP主机增多了。

双虚拟ip:

上面这个思路会使两台机器其中的一台机器闲置起来,并没有达到资源的很好利用,我们可以考虑双虚拟ip,就是双主模式,设置两个虚拟ip。两个ip分别对应于两个MASTER.其中一台主机发生故障时候,会出现两个ip被设定到同一主机上,这时候,并没有影响正常业务。

简单实验

这里做一个简单配置,来理解一下这个原理,使用两台主机,一个做为主的,一个作为备的。

主keepalived

! Configuration File for keepalivedglobal_defs {    notification_email {通告邮箱        root@localhost    }    notification_email_from keepalived@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id node1    vrrp_mcast_group4 224.0.100.19##默认的组播地址是224.0.0.18}vrrp_instance VI_1 {    state BACKUP    interface eno16777736    virtual_router_id 14    priority 100 ##这个优先级要高于备的。值从1-255之间    advert_int 1    authentication {        auth_type PASS        auth_pass 571f97b2    }    virtual_ipaddress {        10.1.0.91/16 dev eno16777736    }}           

备keepalived

! Configuration File for keepalivedglobal_defs {    notification_email {通告邮箱        root@localhost    }    notification_email_from keepalived@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id node1    vrrp_mcast_group4 224.0.100.19##默认的组播地址是224.0.0.18}vrrp_instance VI_1 {    state BACKUP    interface eno16777736    virtual_router_id 14    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass 571f97b2    }    virtual_ipaddress {        10.1.0.91/16 dev eno16777736    }}           

测试

先启动备用服务器,看是否能将10.1.0.91/16加入到eno16777736网卡上。再启用主服务器,看是否能将备用服务器上的虚拟ip地址10.1.0.91/16“抢过来”。