设为首页 收藏本站
查看: 1317|回复: 0

[经验分享] keepalived原理及常用的配置参数

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-3 16:21:28 | 显示全部楼层 |阅读模式
简介
keepalived原理
keepalived配置文件注解
---------------------------------
一、简介
Keepalived:它的诞生最初是为ipvs(一些服务,内核中的一些规则)提供高可用性的,最初最主要目的是能够自主调用ipvsadm来生成规则,并且能够自动实现将用户访问的地址转移到其他节点上进行实现的。
Keepalived:核心包含两个ckeckers和VRRP协议。
ckeckers
检查服务检查reserved的健康状况的,基于脚本也可检查服务本身的健康状况。这里是实现ipvs后端健康状况的检测的。
VRRP
是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。VRRP中每个节点之间都有优先级的一般为0-255(0,255有特殊用法)数字越大优先级越高。
相关术语解析
虚拟路由器
由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当作默认网关;
VRID
虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器;
Master路由器
虚拟路由器中承担报文转发任务的路由器;
Backup路由器
Master路由器出现故障时,能够代替Master路由器工作的路由器;
虚拟IP 地址
虚拟路由器的IP 地址。一个虚拟路由器可以拥有一个或多个IP地址;
IP地址拥有者
接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者;
虚拟MAC地址
一个虚拟路由器拥有一个虚拟MAC地址。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址;
优先级
VRRP根据优先级来确定虚拟路由器中每台路由器的地位;
非抢占方式
如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器;
抢占方式
如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态.
二、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启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:checkers子进程
wKioL1NkAtXT2YBkAAHdTUCBUMc227.jpg
两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,checkers子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果checkers子进程检查到MASTER上服务不可用,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态
三、keepkeepalived配置文件介绍
安装
[iyunv@essun yum.repos.d]# yum install -y keepalived
只有一个配置文件/etc/keepalived/keepalived.conf,里面主要包括以下几个比较常用的配置区域,分别是global_defs、vrrp_script、vrrp_instance和virtual_server。
global_defs区域主要是配置故障发生时的通知对象以及机器标识


global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
notification_email
故障发生时给谁发邮件通知
notification_email_from
通知邮件从哪个地址发出
smpt_server
通知邮件的smtp地址
smtp_connect_timeout
连接smtp服务器的超时时间
router_id
标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到
vrrp_instance区域


vrrp_script  switch {
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 1
   weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
      switch
}
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault "/path/fault.sh VG_1"
}
vrrp_script
定义vrrp_script 区域名称
script
所要执行的脚本
interval
脚本执行间隔时间
weight
脚本结果导致的优先级变更:2表示优先级+2;-2则表示优先级-2
vrrp_instance
用来定义对外提供服务的VIP区域及其相关属性
state
可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途
interface
节点固有IP(非VIP)的网卡,用来发VRRP包
virtual_router_id
取值在0-255之间,用来区分多个instance的VRRP组播。
注意: 同一网段中virtual_router_id的值不能重复,否则会出错。
priority
用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)
advert_int
检查间隔,默认为1秒
authentication
这里设置认证
auth type
认证方式,可以是PASS或AH两种认证方式
auth pass认证密码
track_script
对vrrp_script定义的脚本进行追踪
switch
对那一个区域进行追踪
notify_master /path/to/to_master.sh
切换到主状态要发的通知
notify_backup /path_to/to_backup.sh
切换到备状态要执行的通知
notify_fault "/path/fault.sh VG_1"
故障时要执行的通知(如果路径中有空格,需要加双引号引用)
注:
以上三个参数指的脚本要自定义
virtual_server区域


virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 192.168.200.100 443
对外通过ip地址192.168.200.100 提供443端口的服务
delay_loop
延迟轮询时间(s)
lb_algo
后端指定的调度算法
lb_kind
调度模式
nat_mask
网络地址
persistence_timeout
会话保持时间(秒为单位),用户在50秒内被分配到同一个后端realserver
protocol TCP
健康检查用的是TCP还是UDP
real_server <IPADDR> <PORT>                  
后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个
weight
每一台realserver的权重
SSL_GET
健康检查方式
url
要坚持的URL,可以有多个
path
具体的路径
digest
表示用genhash算出的结果
connect_timeout
超时时长
nb_get_retry
重试次数
delay_before_retry
下次重试的时间延迟
在realserver也可自定义服务器状态发生变化后所执行的脚本
notify_up <STRING> | <QUOTED-STRING>  
检查服务器正常(UP)后,要执行的脚本
notify_down <STRING> | <QUOTED-STRING>
检查服务器失败(down)后,要执行的脚本
以上则常用到的参数,更多参数及用法请man keepalived.conf
======================================完========================================


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18513-1-1.html 上篇帖子: Keepalived基础知识 下篇帖子: keepalived简单描述和其功能的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表