发表于 2018-12-30 10:09:40

keepalived配置文件详解 ​

keepalived配置文件详解   
      keepalived配置文件分为三个部分:全局配置(Globals configurations)、vrrp配置(VRRP configuration)、 LVS配置(LVS configuration),针对这三部分对keepalived配置文件进行解析。
  1、全局配置
  全局配置分为2个子块:Global definitions与Static routes。
  (1)、Global definitions
  主要要是配置故障发生时的通知对象以及机器标识
  global_defs{                     
      notification_email {            
                       
        
         ...
      }
      notification_email_from
      smtp_server               
      smtp_connect_timeout                                                
      router_id                     
  }
  notification_email:接收告警通知的邮箱,可以设置多个。
  notification_email_fromemail:告警邮件从那个邮箱发出。
  smtp_server:发送告警邮件的SMTP服务器地址。
  smtp_connect_timeout:连接SMTP服务器超时时间。
  router_id: #运行keepalived的机器的路由标识,主备机一致。
  (2)、Static addresses
  static_ipaddress和static_routes用来给服务器配置静态的IP地址/路由。如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置。
  一般情况下你的机器都会有IP地址和路由信息的,因此没必要再在这两个区域配置。
  语法如下:
  static_ipaddress{         
      / brddevscope
      / brddevscope
  }
  static_routes{                        
      src / via|gwdevscope table# to is optional
      src / via|gwdevscope table# to is optional
      src / via|gwordev scopetable# will use multipathroute
      blackhole [/]
  }
  备注:以上两部份中的SCOPE可以指定的值为:site、link、host、nowhere、global。
  如下为静态地址与静态路由配置示例:
  示例1:
  static_ipaddress{
      192.168.200.16 dev eth0 scope link
      192.168.200.17 dev eth1 scope link
      192.168.200.18 dev eth2
  }
  示例2:
  static_routes{
      src 192.168.100.1 192.168.209.0/24 via192.168.200.254 dev eth0
      192.168.210.0/24 via 192.168.200.254 deveth0
      192.168.211.0/24 via 192.168.200.254 deveth0
      192.168.212.0/24 dev eth3 scope site
      192.168.213.0/24 dev eth1 scope link
  }
  2、VRRP配置
VRRP configuration配置是keepalive实现HA部分重要内容,同样也分为VRRP scripts、VRRP synchronization group、VRRP instance三个子块实现。
  (1)、VRRP scripts
  vrrp_script{          # vrrp_script与track_script结合使用,与track_script中值设置为相同。
script      #监控脚本或者监控命令。
interval          #脚本运行时间间隔。
weight#设置weight值,取值范围-254-254。keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
      fall               #运行失败指定次数后发生切换。
      rise               #运行成功指定次数后不发生切换。
  }
  (2)、VRRP synchronization group
vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致。举个例子来说明其功能:两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。
  vrrp_sync_group { #vrrp_sync_group组名。
  group {                        
              #指定加入vrrp_sync_group组的VRRP_Instance。
                       
  }
  notify_master | #表示切换为master时所执行的脚本。
  notify_backup | #表示切换为backup时所执行的脚本。
  notify_fault |#表示切换为fault时所执行的脚本。
  notify |      #表示任何一状态切换时都会调用该脚本,并且该脚本在以上三个脚本执行完成之后进行调用,keepalived会自动传递4个参数。
      $1 = A stringindicating whether it's a "GROUP" or an "INSTANCE"
      $2 = The name of said groupor instance
      $3 = The state it'stransitioning to ("MASTER", "BACKUP" or "FAULT")
      $4 = The priorityvalue
      $1 and $3 are ALWAYSsent in uppercase, and the possible strings sent are the
      same ones listed above("GROUP"/"INSTANCE", "MASTER"/"BACKUP"/"FAULT").
  smtp_alert#使用global_defs里面定义的邮件地址和smtp服务器在切换后发送邮件通知。
  }
  (3)、VRRP instance
      vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。
  常用参数说明:
  use_vmac:使用VRRP的虚拟MAC地址。
  state MASTER|BACKUP:设置节点状态。keepalived启动时会将priority比较大的节点选举为MASTER。
  interface :用于HA检测与对外提供服务的网络的接口。
  track_interface :监控指定的网卡,如果任何一个不通就会切换到FALT状态。
  track_script:与vrrp_script参数一同使用,设定监控服务的脚本,与vrrp_script参数中的名称相同。
  mcast_src_ip :发送多播包的地址,如果不设置,默认使用绑定的网卡的primary IP。
  dont_track_primary:忽略vrrp的interface错误,默认不设置。
  lvs_sync_daemon_interface :负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。.
  garp_master_delay :当切为主状态后多久更新ARP缓存,默认为5秒。
  virtual_router_id :虚拟路由标识,主机与备机保持一致。
  priority :优先级,主机与备机必须不同。
  advert_int :同步通知间隔,MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。
  authentication {                              
        auth_type PASS|AH:认证类型为PASS或AH,推荐使用PASS,主备必须使用相同认证方式及密码才可以通信。
        auth_pass:设置认证密码。密码最多8位。
      }
  virtual_ipaddress:漂移地址设置,可以设置多个。
  virtual_routes : 虚拟路由,当IP漂过来之后需要添加的路由信息。
  nopreempt:功能类似于heartbeat的auto_failback,设置不自动切回,该参数只能设置在state为backup的服务器上,且优先权必须高于其他节点的服务器上。
  preempt_delay: 抢占延时,默认为0。
  notify_master |:与vrrp_sync_group中相同。
  notify_backup |:与vrrp_sync_group中相同。
  notify_fault |: 与vrrp_sync_group中相同。
  notify_stop |:停止vrrp时,执行指定的脚本。
  notify |:       与vrrp_sync_group中相同。
  smtp_alert:与vrrp_sync_group中相同。
  3、LVS配置

LVS的配置包括2部分:虚拟主机组(virtual server group)和虚拟主机(virtual server)。虚拟主机组一般用不到,这里不介绍。以下为虚拟主机常用参数介绍。
  virtual_server{   # 虚拟服务器设置标识,指定虚拟ip与端口,ip地址与端口号之间用空格隔开。
      delay_loop               # 延迟轮询时间
      lvs_sched rr|wrr|lc|wlc|lblc|sh|dh# LVS调度算法
      ops               #Apply One-Packet-Scheduling (only for UDP),不常用。
      lvs_method NAT|DR|TUN               # LVS调度类型
      persistence_timeout      # 会话保持时间,单位为秒。
      persistence_granularity    # 此选项是配合persistence_timeout,后面跟的值是子网掩码,表示持久连接的粒度。
      protocol TCP                        # 指定协议
      ha_suspend                        #节点状态从MASTER到BACKUP状态切换时,暂不启用real_server健康检查。
      virtualhost               # HTTP_GET做健康检查时,检查的Web服务器的虚拟主机。
      sorry_server      # 备用机,所有的real server失效后启用。
      real_server健康检查方法有HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK多种,以下分别做以介绍如何使用。
   real_server   {# 定义realserver
     weight   # 用来配置real server节点的权值,数字越大权值越高。默认为1,0为失效。
     inhibit_on_failure# 服务器健康检查失败时,将其weight设置为0,而不是直接从IPVS里面删除。
     notify_up |   # 在检测到real server节点服务up状态后执行脚本。
     notify_down|# 在检测到real server节点服务down状态后执行脚本。
         HTTP_GET|SSL_GET {   
              url {               # HTTP/SSL检查的URL,这里可以指定多个URL。
              path      # 详细的URL路径。
              digest      # SSL检查后的摘要信息。
              status_code# HTTP检查的返回状态码,一般为200.
              }                     
              url {
              path
              digest
              status_code
              }
     connect_ip# 健康检查连接的ip地址,如果不指定默认为realserver指定的IP。
     connect_port      # 健康检查的端口,如果不指定默认为real server指定的端口。
     bindto      # 如果本机有多个网卡配置多个地址,那么通过此地址来发送请求对服务进行健康检查。
     bind_port         # 通过本机此端口来发送请求对服务进行健康检查。
     connect_timeout    # 连接超时时间
     fwmark         # fwmark to set on socket (SO_MARK)
     nb_get_retry   # 重试次数。
     delay_before_retry# 重试间隔时间(秒)。
     warmup         # 如果后端有众多realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞,因此可以使用warmup 指定一个时间,表示将发送检测报文的精确时间差开一点的时间,以免造成本机堵塞。
        }
      }
      real_server{   # 同上
        weight         # 同上
        inhibit_on_failure      # 同上
        notify_up| # 同上
        notify_down| # 同上
  
        TCP_CHECK {
              connect_ip# IPaddress to connect
              connect_port      # TCP port to connect
              bindto      # IP address to bind to
              bind_port         # TCP port to bind to
              connect_timeout   # Timeout connection
              fwmark         # fwmark to set on socket (SO_MARK)
              warmup         # random delay for maximum N seconds
        }
      }
      real_server{   # 同上
        weight                # 同上
        inhibit_on_failure             # 同上
        notify_up|   # 同上
        notify_down| # 同上
  
        SMTP_CHECK {                  
              connect_ip      #Optional IP address to connect to
              connect_port          # Optional port to connect to
              bindto          # Optional interface to use tooriginate the connection
              bind_port             # Optional source port to originatethe connection from
              connect_timeout   # Optional per-hostconnection timeout.
              fwmark         # Optional fwmark to mark alloutgoing checker pakets with
              host {                      # Optional additional host/port to check
                  connect_ip#IP address to connect
                  connect_port      # TCP port to connect
                  bindto      # IP address to bind to
                  bind_port         # TCP port to bind to
                  connect_timeout   # Timeout connection
                  fwmark         # fwmark to set on socket (SO_MARK)
              }
              host {
                  connect_ip#IP address to connect
                  connect_port      # TCP port to connect
                  bindto      # IP address to bind to
                  bind_port         # TCP port to bind to
                  connect_timeout   # Timeout connection
                  fwmark         # fwmark to set on socket (SO_MARK)
              }
              connect_timeout# Connection andread/write timeout
              warmup         # random delay for maximum N seconds
              retry            # Number of times to retry afailed check
              delay_before_retry # Delay in seconds before retrying
              helo_name| # Host to use for the HELO request
        }
      }
      real_server{   # 同上
        weight                # 同上
        inhibit_on_failure             # 同上
        notify_up|   # 同上
        notify_down |# 同上
  
        MISC_CHECK {               
              misc_path|# 外部执行脚本。
              misc_timeout       # 脚本执行超时时间。
              warmup         # random delay for maximum N seconds
  
              # If set, exit code from healthcheckeris used
              # to dynamically adjust the weightas follows:
              #exit status 0: svc check success, weight
              #   unchanged.
              #exit status 1: svc check failed.
              #exit status 2-255: svc check success, weight
              #   changed to 2 less than exit status.
              #(for example: exit status of 255 would set
              #   weight to 253)
              misc_dynamic
        }
      }
  }



页: [1]
查看完整版本: keepalived配置文件详解 ​