keepalived原理、配置解析及其应用案例(keepalived双机热备实现)

本文详细介绍了keepalived的工作原理,包括VRRP协议及其工作流程,以及keepalived的体系结构。接着,解析了keepalived的配置文件,展示了双主模式下的配置示例。最后,通过实际操作演示了如何使用keepalived实现双机热备,包括主机状态切换和故障恢复。通过这个案例,读者将对keepalived的配置和应用有更深入的理解。
摘要由CSDN通过智能技术生成

一、keepalived原理及配置解析

keepalived:vrrp协议的实现

vrrp协议:virtual router redundancy protocol 即虚拟路由器冗余协议

vrrp基本实现及工作流程:

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

如图为一个基本的VLAN拓扑,其中,Device A、B、C共同组成一个VRRP组,其VIP为10.1.1.1,配置在路由器A的物理接口上,因此A为master路由器,B和C为backup路由器。

VRRP组中,master(路由器A)负责转发发往VIP地址的报文,客户端A、B、C都以此VIP作为其默认网关。一旦master故障,backup路由器B和C中具有最高优先级的路由器将成为master并接管VIP地址,而当原来的master路由器A重新上线时,如果工作在抢占模式下,其将重新成为master路由器。如果工作在非抢占模式下,其将作为backup路由器备用。

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

 

 

 

VRRP术语:

VRRP虚拟路由(VRRP router):由一个master路由器和多个backup路由器组成,主机将虚拟路由器作为默认网关。

VRID(虚拟路由器标志):同一个虚拟路由器VRID必须唯一。

master路由器:虚拟路由器中承担报文转发任务的路由器。

backup路由器:master路由器故障时,能够接替master路由器工作的路由器。

优先级:vrrp根据优先级高低确定虚拟路由器组中每台路由器地位。

IP地址拥有者(IP Address Owner):如果一个VRRP设备将虚拟路由器IP地址作为真实的接口地址,则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的,通常它将成为Master。

抢占模式:backup路由器工作于该模式下时,当它收到vrrp报文后,会将自身优先级与报文中的优先级作比较,如果自身优先级高,则会主动抢占成为master路由器,否则维持原状。

非抢占模式:backup路由器工作于该模式下时,只要master路由器不出现故障,则维持原状。

VRRP的优势:

冗余:可以使用多个路由器设备作为LAN客户端的默认网关,大大降低了默认网关成为单点故障的可能性;

负载共享:允许来自LAN客户端的流量由多个路由器设备所共享;

多VRRP组:在一个路由器物理接口上可配置多达255个VRRP组;

多IP地址:基于接口别名在同一个物理接口上配置多个IP地址,从而支持在同一个物理接口上接入多个子网;

抢占:在master故障时允许优先级更高的backup成为master;

通告协议:使用IANA所指定的组播地址224.0.0.18进行VRRP通告;

VRRP追踪:基于接口状态来改变其VRRP优先级来确定最佳的VRRP路由器成为master;

keepalived的体系结构

如图:

Keepalived大致分为两层空间:user space和kernel space。

watchdog:负责监控Checkers和VRRP Stack进程的状况。

Checkers:负责真实服务器的健康检查(health checking),是keepalived最主要的功能。换句话说,可以没有VRRP Stack,但是不能没有Checkers。

VRRP Stack:负责负载均衡器之间的失败切换FailOver,如果只有一个负载均衡器,则VRRP Stack不是必须的。

IPVS Wrappers:用来发送设定的规则(通过ipvsadm设置的规则)到内核ipvs的代码。

NetlinkReflector:用来设定VRRP的VIP等。

 

keepalived.conf配置组成:

      global_defs{......}

      vrrp_script XXX{......}

      vrrp_instance VI_X{......}

      virtual_server IPPORT { ...... }

           orvirtual_server fwmark int { ...... } 

           orvirtual_server group string { ...... }    

keepalived.conf常用参数解析:

以下为双主模式下keepalived+nginx配置。

[root@testkeepalived]# cat keepalived.conf

! ConfigurationFile for keepalived

global_defs {

   notification_email {

#notification_email:指定当keepalived出现问题时,发送邮件给哪些用户。  

     root@localhost

   }

   notification_email_from field@localhost

#notification_emai_from:发送邮件时,邮件的源地址。    

   smtp_server 127.0.0.1

#smtp_server<DOMAIN|IP> [<PORT>]:smtp服务器的地址或域名。默认端口为25.如:smtp_server smtp.field.com 25      

   smtp_connect_timeout 30

#指定smtp服务器连接的超时时间,单位s。  

   router_id test.field.com

#router_id:指定标识该机器的route_id. 如:route_id LVS_DEVEL  

   vrrp_mcast_group4 224.18.0.200

#vrrp_mcast_group4224.0.0.18:指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18

#vrrp_mcast_group6ff02::12 指定发送VRRP组播消息所使用的IPV6组播地址。默认是ff02::12  

}

#vrrp_script添加一个周期性执行的脚本。脚本的退出状态码会调用它的所有的VRRP Instance记录。

#至少应该有一个VRRP实例调用它并且优先级不能为0.优先级范围是1-254.

vrrp_scriptchk_maintanance {

        script "[[ -f /etc/keepalived/down]] && exit 1 || exit 0"

#手工编写测试keepalived脚本,如果down文件存在则优先级-2       

        interval 1

#interval多长时间检查一次

#如果失败返回1权重-2

        weight -2

}

vrrp_scriptchk_nginx {

        script "killall -0 nginx &>/dev/null"

#nginx检测脚本,nginx服务是否在线。       

        interval 1

#interval多长时间检查一次

#如果失败返回1权重-2

        weight -5

}

vrrp_instanceVI_1 {

    state MASTER

#stateMASTER|BACKUP:指定该keepalived节点的初始状态。   

    interface eth0

#interface eth0:vrrp实例绑定的接口,用于发送VRRP包,注意要与本机借口一致。

    virtual_router_id 51

#virtual_router_id51:指定VRRP实例ID,范围是0-255,注意每个vip实例id必须严格一致。   

    priority 100

#priority 100:指定优先级,优先级高的将成为MASTER。 

    advert_int 1

#advert_int 1:指定发送VRRP通告的间隔。单位是秒。

    authentication {

        auth_type PASS

#auth_typePASS|AH:指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。  

        auth_pass 4e78bb3a

#auth_pass 1234:指定认证所使用的密码,可用“openssl rand -hex 4”生成8位随机码     

}

    virtual_ipaddress {

        192.168.88.80/16 dev eth0 label eth0:0

#指定VIP地址/掩码,接口名,别名,可只是用IP/掩码。

    }

track_script {

#track_script 添加一个track脚本,即vrrp_script配置的脚本。每个周期通过调用脚本,会监控服务状态。

        chk_nginx

}

#通知脚本

        notify_master"/etc/keepalived/notify.sh master"

        notify_backup"/etc/keepalived/notify.sh backup"

        notify_fault"/etc/keepalived/notify.sh fault"

}

vrrp_instanceVI_2 {

    state BACKUP

    interface eth0

    virtual_router_id 61

    priority 99

    advert_int 1   

#nopreempt

#设置为非抢占模式。默认是抢占模式,设置非抢占模式时,即使高优先级的机器已经上线,也允许低优先级的机器继续成为MASTER。注意使用非抢占模式时,初始化状态必须为BACKUP。

#preempt_delay:

#设置抢占延迟。单位是秒,范围是0---1000,默认是0.发现低优先级的MASTER后多少秒开始抢占。   

    authentication {

        auth_type PASS

        auth_pass Te7UYb3a

    }

    virtual_ipaddress {

        192.168.88.90/16 dev eth0 label eth0:1

    }

track_script {

#track_script 调用脚本

        chk_nginx

}

        notify_master"/etc/keepalived/notify.sh master"

        notify_backup"/etc/keepalived/notify.sh backup"

        notify_fault"/etc/keepalived/notify.sh fault"

}

#virtual_server192.168.200.100 443 {

#    delay_loop 6

#  delay_loop <INT>:健康检查的时间间隔。

#    lb_algo rr

#  lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS调度算法。默认为轮询。

#    lb_kind NAT

#  lb_kind NAT|DR|TUN:LVS模式。

#    nat_mask 255.255.255.0

#    persistence_timeout 50

#persistence_timeout360:持久化超时时间,单位是秒。默认是6分钟。

#    protocol TCP

#  protocol TCP|UDP|SCTP:使用的4层协议。默认TCP.

#    sorry_server 192.168.200.200 1358

#sorry_server<IPADDR> <PORT>:添加一个备用服务器。当所有的RS都故障时,作为显示页面。

#    real_server 192.168.201.100 443 {

#        weight 1

#weight<INT>:给服务器指定权重。默认是1.

#        SSL_GET {

#            url {

#              path /

#path<STRING>:指定要检查的URL的路径。如path / or path /mrtg2

#              digestff20ad2481f97b1754ef3e12ecd3a9cc

#digest<STRING>:摘要。计算方式:genhash-s 172.17.100.1 -p 80 -u /index.html

#            }

#            url {

#              path /mrtg/

#              digest 9b3a0c85a887a256d6939da88aabd8cd

#            }

#            connect_timeout 3

#            nb_get_retry 3   

#nb_get_retry<INT>:get尝试次数。

#            delay_before_retry 3

#delay_before_retry<INT>:延迟多长时间再次尝试。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值