keepalived的简介

一、Keepalived简介

Keepalived是HA cluster的一种实现方案,其以vrrp协议为实现基础,在N台具有相同功能的路由器或服务器中选出一个master或多个backup,这些路由器或服务器会共用一个对外提供服务的VIP。在此HA cluster集群中,master主机会发送组播来跟backup主机进行通信确认双方是否存活。当backup主机在指定的时间内没有收到vrrp组播报文则认为master主机宕机了,此时就会在所有的backup主机中根据vrrp协议来选举出新的master主机来保证服务的高可用性。
keepalived主要有三个模块,分别是ipvs wrapper、checkers和vrrp stack。ipvs wrapper模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。checkers负责健康检查,包括常见的各种检查方式。vrrp stack模块是来实现VRRP协议的。

二、HA Cluster的配置前提:

(1) 各节点时间必须同步; ntp, chrony
(2) 确保iptables及selinux不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对KA并非必须);
建议使用/etc/hosts文件实现;
(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
D类:224-239;

三、Keepalived的配置文件及组成

Keepalived的默认配置文件为/etc/keepalived/keepalived.conf,其主程序文件为/usr/sbin/keepalived。
Keepalived的配置文件的组成主要分为三部分,而每个部分下面又包含着各自的子段,其组成及配置如下:
1、GLOBAL CONFIGURATION:全局配置段
Global definitions:用于定义全局设置,常用的参数及示例如下:

global_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    #用于设置vrrp的广播地址,在同一个HA cluster中的机器,要确保其广播地址一致才能接受到相应的vrrp报文
    vrrp_strict    #执行严格的vrrp协议检查,某些情况下会禁止到vip的访问。
}

Static routes/address/rules:用于配置keepalived中不会被VRRP移除的静态地址、路由或者规则,一般不会使用。
2、VRRPD CONFIGURATION:VRRP相关配置段

  • VRRP instance(s):用于定义vrrp同步组,其常用的格式及参数如下:
vrrp_instance <STRING> {
    state MASTER|BACKUP    #用于指定此虚拟路由器在vrrp组的角色状态
    interface eno16777736    #用于绑定当前虚拟路由器所使用的物理接口
    virtual_router_id 14    #用于指定当前虚拟路由器在vrrp组的唯一标识id,范围为0-255
    priority 100    #用于设置当前虚拟路由器在vrrp组里面的优先级,范围为1-254;
    advert_int 1    #用于设置虚拟路由器发送vrrp通告的时间间隔
    nopreempt|preempt    #定义工作模式为非抢占或抢占模式;
    preempt_delay 300    #定义在抢占式模式下,节点上线后触发新选举操作的延迟时长;
    authentication {    #用于设置vrrp组协商的方式及密码
        auth_type PASS    #定义认证类型为简单密码认证
        auth_pass 571f97b2    #定义密码串,最长不超过8个字符
    }
    virtual_ipaddress {    #用于指定需要在绑定的物理接口上添加的虚拟ip地址
        #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
        10.1.0.91/16 dev eno16777736
    }
    track_interface {    #配置需要监控的网络接口,一旦接口出现故障,此虚拟路由器转为FAULT状态
      eth0
      eth1
      ...
     }
    track_script {    #用于调用在vrrp_script中定义的脚本,然后根据脚本的来进行监控调整
       <SCRIPT_NAME>
       <SCRIPT_NAME> weight <-254..254>
    }

    notify_master <STRING>|<QUOTED-STRING>    #当前节点成为主节点时触发的通知脚本;
    notify_backup <STRING>|<QUOTED-STRING>    #当前节点转为备节点时触发的通知脚本;
    notify_fault <STRING>|<QUOTED-STRING>    #当前节点转为“失败”状态时触发的通知脚本;
    notify_stop <STRING>|<QUOTED-STRING>     #当前节点停止时所触发的通知脚本
}
  • VRRP script(s):用于定义周期性执行的脚本,可定义调用用于检查相应的服务或Ip的状态的脚本。
vrrp_script <SCRIPT_NAME> {    #定义周期执行的脚本,此脚本的退出码决定了当前监控的vrrp组的运行状态
    script <STRING>|<QUOTED-STRING>    #定义执行脚本的存放路径
    interval INT     #定义调用执行脚本的周期,默认为1s。
    timeout <INTEGER>   # 脚本执行超时时间,脚本执行超时后,则被认为失败
    rise <INTEGER>              # 定义脚本检查成功多少次,才认可当前的状态为正常
    fall <INTEGER>              #定义检查失败多少次,才认为当前状态为失败
}

3、LVS CONFIGURATION:LVS配置段

  • Virtual server(s):用于定义虚拟服务器的设置,虚拟服务器可以用Ip端口、fwmark或virtual server group来定义。
virtual_server IP port | virtual_server fwmark <int>  |virtual_server group string

{
    delay_loop <INT>    #=服务轮询的时间间隔;
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh    #定义调度方法;
    lb_kind NAT|DR|TUN    #集群的类型;
    persistence_timeout <INT>    #持久连接时长;
    protocol TCP|UDP|SCTP    #服务协议;
    sorry_server <IPADDR> <PORT>    #备用服务器地址;
    real_server <IPADDR> <PORT>{
        weight <INT>    #设置real server的权重
        notify_up <STRING>|<QUOTED-STRING>    #当出现匹配字符串时,就认为服务是up的
        notify_down <STRING>|<QUOTED-STRING>    #当出现匹配字符串时,就认为服务是down的
        HTTP_GET|SSL_GET {    #对real server作应用层检测
            url {
                path <URL_PATH>    #定义要监控的URL;
                status_code <INT>    #判断上述检测机制为健康状态的响应码;
                digest <STRING>    #判断上述检测机制为健康状态的响应的内容的校验码;
            }
            nb_get_retry <INT>    #重试次数;
            delay_before_retry <INT>    #重试之前的延迟时长;
            connect_ip <IP ADDRESS>    #向当前RS的哪个IP地址发起健康状态检测请求
            connect_port <PORT>    #向当前RS的哪个PORT发起健康状态检测请求
            bindto <IP ADDRESS>    #发出健康状态检测请求时使用的源地址;
            bind_port <PORT>    #发出健康状态检测请求时使用的源端口;
            connect_timeout <INTEGER>    #连接请求的超时时长;
        }
        
         TCP_CHECK {
            connect_ip <IP ADDRESS>    #向当前RS的哪个IP地址发起健康状态检测请求
            connect_port <PORT>    #向当前RS的哪个PORT发起健康状态检测请求
            bindto <IP ADDRESS>    #发出健康状态检测请求时使用的源地址;
            bind_port <PORT>    #发出健康状态检测请求时使用的源端口;
            connect_timeout <INTEGER>    #连接请求的超时时长;
        }
    }
}

四、keepalived的配置实例

  • 高可用的ipvs集群
! Configuration File for keepalived

global_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
}

vrrp_instance VI_1 {
   state MASTER
   interface eno16777736
   virtual_router_id 14
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 571f97b2
   }
   virtual_ipaddress {
       10.1.0.93/16 dev eno16777736
   }
   notify_master "/etc/keepalived/notify.sh master"
   notify_backup "/etc/keepalived/notify.sh backup"
   notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server 10.1.0.93 80 {
   delay_loop 3
   lb_algo rr
   lb_kind DR
   protocol TCP

   sorry_server 127.0.0.1 80

   real_server 10.1.0.69 80 {
       weight 1
       HTTP_GET {
       url {
           path /
           status_code 200
       }
       connect_timeout 1
       nb_get_retry 3
       delay_before_retry 1
       }
   }
   real_server 10.1.0.71 80 {
       weight 1
       HTTP_GET {
       url {
           path /
           status_code 200
       }
       TCP_CHECK {
           nb_get_retry 3
           delay_before_retry 2
           connect_timeout 3
       }
   }
}
  • 双主模型:
    主机配置:
global_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
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 14
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 571f97b2
    }
    virtual_ipaddress {
        10.1.0.91/16 dev eno16777736
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 15
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 578f07b2
    }
    virtual_ipaddress {
        10.1.0.92/16 dev eno16777736
    }
}

备机配置:

global_defs {
    notification_email {
        root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node2
    vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 16
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 571f97b2
    }
    virtual_ipaddress {
        10.1.0.91/16 dev eno16777736
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 17
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 578f07b2
    }
    virtual_ipaddress {
        10.1.0.92/16 dev eno16777736
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 转载自:http://blog.csdn.net/u010391029/article/details/48311...
    Chris_Zheng阅读 1,358评论 0 2
  • 一、Keepalived简介 Keepalived是HA cluster的一种实现方案,其以vrrp协议为实现基础...
    小尛酒窝阅读 489评论 0 0
  • 一、简述HA Cluster原理 高可用集群,英文原文为High Availability Cluster,简称H...
    Net夜风阅读 825评论 4 5
  • 一、高可用集群 (一)提升系统高可用性的解决方案:冗余(redundant) 工作模式active/passive...
    哈喽别样阅读 1,711评论 2 5
  • 母亲结婚的时候已经25岁,在她们那个年代属于大龄了。 对于为什么延误成大龄青年,母亲娘家的人倒是众口一词,为了当时...
    曾柒白阅读 291评论 0 0