keepalived.conf说明

发表于 2017-06-04 | 分类于 运维相关Keepalived | | 阅读次数 348

| 字数统计 1,889 | 阅读时长预计 8

本文主要介绍了Keepalived配置文件keepalived.conf。

keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

1. global_defs区域

主要是配置故障发生时的通知对象以及机器标识

  1. global_defs {
  2. notification_email {
  3. a@abc.com
  4. b@abc.com
  5. ...
  6. }
  7. notification_email_from alert@abc.com
  8. smtp_server smtp.abc.com
  9. smtp_connect_timeout 30
  10. enable_traps
  11. router_id host163
  12. }
  • notification_email 故障发生时给谁发邮件通知。
  • notification_email_from 通知邮件从哪个地址发出。
  • smpt_server 通知邮件的smtp地址。
  • smtp_connect_timeout 连接smtp服务器的超时时间。
  • enable_traps 开启SNMP陷阱(Simple Network Management Protocol)。
  • router_id 标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。

2. static_ipaddress和static_routes区域

static_ipaddress和static_routes区域配置的是是本节点的IP和路由信息。如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置。其实,一般情况下你的机器都会有IP地址和路由信息的,因此没必要再在这两个区域配置。

  1. static_ipaddress {
  2. 10.210.214.163/24 brd 10.210.214.255 dev eth0
  3. ...
  4. }
  5. static_routes {
  6. 10.0.0.0/8 via 10.210.214.1 dev eth0
  7. ...
  8. }

以上分别表示启动/关闭keepalived时在本机执行的如下命令:

  1. # /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
  2. # /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
  3. # /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
  4. # /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0

注意: 请忽略这两个区域,因为我坚信你的机器肯定已经配置了IP和路由。

3. vrrp_script区域

用来做健康检查的,当时检查失败时会将vrrp_instancepriority减少相应的值。

  1. vrrp_script chk_http_port {
  2. script "</dev/tcp/127.0.0.1/80"
  3. interval 1
  4. weight -10
  5. }

以上意思是如果script中的指令执行失败,那么相应的vrrp_instance的优先级会减少10个点。

4. vrrp_instance和vrrp_sync_group区域

vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。

vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致。举个例子来说明一下其功能:

两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。

  1. vrrp_sync_group VG_1 {
  2. group {
  3. inside_network # name of vrrp_instance (below)
  4. outside_network # One for each moveable IP.
  5. ...
  6. }
  7. notify_master /path/to_master.sh
  8. notify_backup /path/to_backup.sh
  9. notify_fault "/path/fault.sh VG_1"
  10. notify /path/notify.sh
  11. smtp_alert
  12. }
  13. vrrp_instance VI_1 {
  14. state MASTER
  15. interface eth0
  16. use_vmac <VMAC_INTERFACE>
  17. dont_track_primary
  18. track_interface {
  19. eth0
  20. eth1
  21. }
  22. mcast_src_ip <IPADDR>
  23. lvs_sync_daemon_interface eth1
  24. garp_master_delay 10
  25. virtual_router_id 1
  26. priority 100
  27. advert_int 1
  28. authentication {
  29. auth_type PASS
  30. auth_pass 12345678
  31. }
  32. virtual_ipaddress {
  33. 10.210.214.253/24 brd 10.210.214.255 dev eth0
  34. 192.168.1.11/24 brd 192.168.1.255 dev eth1
  35. }
  36. virtual_routes {
  37. 172.16.0.0/12 via 10.210.214.1
  38. 192.168.1.0/24 via 192.168.1.1 dev eth1
  39. default via 202.102.152.1
  40. }
  41. track_script {
  42. chk_http_port
  43. }
  44. nopreempt
  45. preempt_delay 300
  46. debug
  47. notify_master <STRING>|<QUOTED-STRING>
  48. notify_backup <STRING>|<QUOTED-STRING>
  49. notify_fault <STRING>|<QUOTED-STRING>
  50. notify <STRING>|<QUOTED-STRING>
  51. smtp_alert
  52. }
  • notify_master/backup/fault 分别表示切换为主/备/出错时所执行的脚本。
  • notify 表示任何一状态切换时都会调用该脚本,并且该脚本在以上三个脚本执行完成之后进行调用,keepalived会自动传递三个参数($1 = “GROUP”|”INSTANCE”,$2 = name of group or instance,$3 = target state of transition(MASTER/BACKUP/FAULT))。
  • smtp_alert 表示是否开启邮件通知(用全局区域的邮件设置来发通知)。
  • state 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。
  • interface 节点固有IP(非VIP)的网卡,用来发VRRP包。
  • use_vmac 是否使用VRRP的虚拟MAC地址。
  • dont_track_primary 忽略VRRP网卡错误。(默认未设置)
  • track_interface 监控以下网卡,如果任何一个不通就会切换到FAULT状态。(可选项)
  • mcast_src_ip 修改vrrp组播包的源地址,默认源地址为master的IP。(由于是组播,因此即使修改了源地址,该master还是能收到回应的)
  • lvs_sync_daemon_interface 绑定lvs syncd的网卡。
  • garp_master_delay 当切为主状态后多久更新ARP缓存,默认5秒。
  • virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播。

注意: 同一网段中virtual_router_id的值不能重复,否则会出错,相关错误信息如下。

  1. Keepalived_vrrp[27120]: ip address associated with VRID not present in received packet :
  2. one or more VIP associated with VRID mismatch actual MASTER advert
  3. bogus VRRP packet received on eth1 !!!
  4. receive an invalid ip number count associated with VRID!
  5. VRRP_Instance(xxx) ignoring received advertisment...

可以用这条命令来查看该网络中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8

  • priority 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
  • advert_int 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
  • authentication 认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)。
  • virtual_ipaddress vip,不解释了。
  • virtual_routes 虚拟路由,当IP漂过来之后需要添加的路由信息。
  • virtual_ipaddress_excluded 发送的VRRP包里不包含的IP地址,为减少回应VRRP包的个数。在网卡上绑定的IP地址比较多的时候用。
  • nopreempt 允许一个priority比较低的节点作为master,即使有priority更高的节点启动。

首先nopreemt必须在state为BACKUP的节点上才生效(因为是BACKUP节点决定是否来成为MASTER的),其次要实现类似于关闭auto failback的功能需要将所有节点的state都设置为BACKUP,或者将master节点的priority设置的比BACKUP低。我个人推荐使用将所有节点的state都设置成BACKUP并且都加上nopreempt选项,这样就完成了关于autofailback功能,当想手动将某节点切换为MASTER时只需去掉该节点的nopreempt选项并且将priority改的比其他节点大,然后重新加载配置文件即可(等MASTER切过来之后再将配置文件改回去再reload一下)。

当使用track_script时可以不用加nopreempt,只需要加上preempt_delay 5,这里的间隔时间要大于vrrp_script中定义的时长。

  • preempt_delay master启动多久之后进行接管资源(VIP/Route信息等),并提是没有nopreempt选项。

5. virtual_server_group和virtual_server区域

virtual_server_group一般在超大型的LVS中用到,一般LVS用不过这东西,因此不多说。

  1. virtual_server IP Port {
  2. delay_loop <INT>
  3. lb_algo rr|wrr|lc|wlc|lblc|sh|dh
  4. lb_kind NAT|DR|TUN
  5. persistence_timeout <INT>
  6. persistence_granularity <NETMASK>
  7. protocol TCP
  8. ha_suspend
  9. virtualhost <STRING>
  10. alpha
  11. omega
  12. quorum <INT>
  13. hysteresis <INT>
  14. quorum_up <STRING>|<QUOTED-STRING>
  15. quorum_down <STRING>|<QUOTED-STRING>
  16. sorry_server <IPADDR> <PORT>
  17. real_server <IPADDR> <PORT> {
  18. weight <INT>
  19. inhibit_on_failure
  20. notify_up <STRING>|<QUOTED-STRING>
  21. notify_down <STRING>|<QUOTED-STRING>
  22. # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
  23. HTTP_GET|SSL_GET {
  24. url {
  25. path <STRING>
  26. # Digest computed with genhash
  27. digest <STRING>
  28. status_code <INT>
  29. }
  30. connect_port <PORT>
  31. connect_timeout <INT>
  32. nb_get_retry <INT>
  33. delay_before_retry <INT>
  34. }
  35. }
  36. }
  • delay_loop 延迟轮询时间(单位秒)。
  • lb_algo 后端调试算法(load balancing algorithm)。
  • lb_kind LVS调度类型NAT/DR/TUN
  • virtualhost 用来给HTTP_GET和SSL_GET配置请求header的。
  • sorry_server 当所有real server宕掉时,sorry server顶替。
  • real_server 真正提供服务的服务器。
  • weight 权重。
  • notify_up/down 当real server宕掉或启动时执行的脚本。
  • 健康检查的方式,N多种方式。
  • path 请求real serserver上的路径。
  • digest/status_code 分别表示用genhash算出的结果和http状态码。
  • connect_port 健康检查,如果端口通则认为服务器正常。
  • connect_timeout,nb_get_retry,delay_before_retry分别表示超时时长、重试次数,下次重试的时间延迟。

其他选项暂时不作说明。

###参考

About the Keepalived Configuration File

Keepalived配置及典型应用案例

keepalived工作原理和配置说明

详解keepalived配置和使用

keepalived.conf说明的更多相关文章

  1. 配置文件keepalived.conf详解

    keepalived.conf       一个功能比较完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三个文本块:全局定义块.VRRP 实例定义块及虚拟服务 ...

  2. keepalived.conf配置说明

    vim /etc/keepalived/keepalived.conf配置信息如下! Configuration File for keepalived global_defs { notificat ...

  3. Keepalived系列一:Keepalived.conf 详解

    接上一篇博客: http://www.cnblogs.com/xiaoit/p/4499703.html 1:按照上篇博客安装后的配置文件在 /usr/local/etc/keepalived/kee ...

  4. nginx+keepalived主辅切换(监控脚本在keepalived.conf中执行)

    以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研 ...

  5. keepalived.conf 配置文件小结

    vrrp_script vs_mysql_82 {     script "/etc/keepalived/checkMySQL.py -h 192.168.11.82 -P 3306&qu ...

  6. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  7. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  8. Keepalived+LVS+nginx双机热备

    Keepalived简介 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生. Keepalived采 ...

  9. 基于keepalived双主模型的高可用LVS

    背景知识: keepalived:Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除, ...

随机推荐

  1. ctfshow—web—web7

    打开靶机 发现是SQL注入,盲注 过滤了空格符,可以用/**/绕过,抓包 直接上脚本 import requestss=requests.session()url='https://46a0f98e- ...

  2. 查询数据库v$session时报部分多维元组字元

    在查询v$session视图时,出现如下图报错,基本原因是用plsql dev时使用汉字打开新标签,导致v$session action栏位出现乱码 解决方法: select SID,SERIAL#, ...

  3. JavaScript中创建数组的方式!

    JavaScript中创建数组的方式! 利用数组字面量 // 1 直接量 console.log(Array.prototype); var arr = [1, 2, 4, 87432]; // 注意 ...

  4. django模板中导入js、css等静态文件

    打开settings.py,在底部添加: import os STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(os.path.dir ...

  5. 广告召回 Query-Ad Matching

    小结: 1.最为基础的召回链路就是要保证召回层的相关性,但是相关性高的广告并不一定具有很高的商业价值,所以开始尝试将一些商业化业务指标作为召回的依据 百度凤巢新一代广告召回系统--"莫比乌斯 ...

  6. # Functions are First-Class Citizens in Python 一等公民

    # Functions are First-Class Citizens in Python 一等公民https://cn.bing.com/search?form=MOZSBR&pc=MOZ ...

  7. 从零开始学Java (三)基础语法

    1. 基本数据类型 整数类型:byte,short,int,long 浮点数类型:float,double 字符类型:char 布尔类型:boolean java最小单位是bit,一个byte占用8个 ...

  8. ThinkPHP 5.0.24 反序列化RCE (Windows下EXP)

    直接上exp吧,Windows下. <?php namespace think\process\pipes; class Windows { private $files = []; publi ...

  9. 单机模拟配置Eureka集群

    首先先提醒单机部署的重要点 如果使用一个ip地址(适用于单网卡)每个eureka实例使用不同的域名映射到同一个IP 如果每个eureka实例使用不同的IP(多网卡),要确保这些IP要都表示本地 本文假 ...

  10. CentOS 7 使用pyenv安装python3.6

    安装pyenv 1.安装git yum install -y git 2.安装pyenv curl -L https://raw.githubusercontent.com/yyuu/pyenv-in ...