keepalived

keepalived

  • keeplived介绍
    • keepalived功能
    • VRRP协议
  • 安装 && 配置
    • 安装
    • 配置
      • 全局配置
        • global_defs
        • static_ipaddress && static_routes
      • VRRP配置
        • vrrp_script
        • VRRP instance && vrrp_sync_group
      • LVS配置
        • Virtual server group
        • Virtual server
          • 健康检查
            • HTTP及SSL GET检测
            • TCP_CHECK 检测
            • SMTP检测
            • DNS检测
            • MISC_CHECK检测

keeplived介绍

keepalived是一个基于VRRP协议来实现的服务高可用方案,利用其来避免IP单点故障。常常与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

keepalived功能

  • 健康检查
  • IP漂移、切换(依靠VRRP协议)

VRRP协议

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)
keepalived_第1张图片
通过上图可以看出VRRP协议的功能为:解决网络中出现单点故障的路由协议。
主要方法是IP漂移,正常情况主设备获得IP,主设备故障,IP漂移到备用设备上,使设备达到高可用。

安装 && 配置

安装

yum -y install keepalived

配置

/etc/keepalived/keepalived.conf 配置文件

全局配置

global_defs

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

global_defs {
   notification_email { #故障发生时给谁发邮件通知。
     [email protected] #收件人可多个
     [email protected]
   }
   notification_email_from [email protected] #通知邮件从哪个地址发出
   smtp_server 192.168.200.1 #通知邮件的smtp地址
   smtp_connect_timeout 30 #连接smtp服务器的超时时间
   router_id LVS_DEVEL #节点的标识符
}

static_ipaddress && static_routes

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

VRRP配置

vrrp_script

通过编写脚本对本机业务进程进行检测监控,防止keepliaved正常运行,但是关键性服务已经出错停止

vrrp_script chk_nginx {
    script "/etc/keepalived/ck_ng.sh" #脚本
    interval 2 #执行脚本频率
    timeout 30 #指定在多少秒后,脚本被认为执行失败。
    weight -5 #优先级改变值
    weight 10 #调整优先级。默认为2.
	rise 3 #执行成功多少次才认为是成功。
	fall 2 #执行失败多少次才认为失败。
}
注意点:
vrrp_script chk_nginx 
{	**//这个{要另起一行**
	XXX
}
并且它要放在下面段落之前:
vrrp_instance VI_1 {
......
}

vrrp_script脚本中weight这个值必须指定,否则有时候重启服务后该节点被显示为fault 状态。weight值分为正值和负值,假定weight值为W,初始的优先级为P。

  • 当weight值小于0时:
    • 如果检测脚本返回值=0,则节点最终优先级不改变;
    • 如果检测脚本返回值≠0,则节点最终优先级=P-W,优先级会减小。
  • 当weight值大于0时:
    • 如果检测脚本返回值=0,则节点最终优先级=P+W,优先级会增加;
    • 如果检测脚本返回值≠0,则节点最终优先级不改变。
  • 脚本同下结果为exit 数字
    keepalived_第2张图片

VRRP instance && vrrp_sync_group

  • vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。
  • vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致.:

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

vrrp_sync_group VG_1 {
   group {
      VI_1
}
    notify_master /path/to_master.sh
    notify_backup /path/to_backup.sh
    notify_fault "/path/fault.sh VG_1"
    #notify_master / backup / fault分别表示切换为主/备/出错时所执行的脚本。
    notify /path/notify.sh
    #notify /path/notify.sh [username [groupname]]
    #作用:在任何状态都会以指定的用户和组执行脚本。
    #该脚本会在notify_*脚本后执行。
    #notify可以使用3个参数,如下:
    #$1:可以是GROUP或INTANCE,表明后面是组还是实例。
    #$2:组名或实例名。
    #$3:转换后的目标状态。有:MASTER、BACKUP、FAULT。

	smtp_alert #表示状态改变时是否开启邮件通知(用全局区域的邮件设置来发通知)。
} 	
vrrp_instance VI_1 { #当前节点所属的虚拟路由的名称
    state MASTER #当前节点的状态,有Master和Backup两种状态
    interface ens33 #定义vrrp地址绑定在哪个接口
    virtual_router_id 51 #虚拟路由器的标识,同一虚拟路由器组中的ID要相同
    priority 100  #优先级设置
    advert_int 1 #每隔多久以组播形式向外通告一次,默认是1秒
    authentication { #认证方式,在组播信息中添加的信息,防止滥竽充数
        auth_type PASS #认证开启
        auth_pass 1111 #认证密码
    }
    virtual_ipaddress { #配置虚拟路由ip,即漂移地址
    	#/ brd  dev  scope  label 
        192.168.11.99/24 dev ens33 label ens33:0 #漂移地址为192.168.11.99,配置在ens33网卡上并指定接口0
    }
}

LVS配置

Virtual server group

不常见,先不提

Virtual server

virtual_server IP Port {
    delay_loop <INT> #健康检查的时间间隔
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh #LVS调度算法
    lb_kind NAT|DR|TUN #LVS调度类型
    persistence_timeout 360 #持久化超时时间,单位是秒。默认是6分钟。
    persistence_granularity #持久化连接的颗粒度。
    protocol TCP|UDP|SCTP #第4层协议
    ha_suspend #如果virtual server的IP地址没有设置,则不进行后端服务器的健康检查
    virtualhost <STRING> # 为HTTP_GET和SSL_GET执行要检查的虚拟主机。如virtualhost www.felix.com
    alpha #在keepalived启动时,假设所有的RS都是down,以及健康检查是失败的。有助于防止启动时的误报。默认是禁用的。
    omega #在keepalived终止时,会执行quorum_down指令所定义的脚本。
    quorum <INT> #默认值1. 所有的存活的服务器的总的最小权重。
    quorum_up <STRING> #当quorum增长到满足quorum所定义的值时,执行该脚本。
    quorum_down <STRING> #当quorum减少到不满足quorum所定义的值时,执行该脚本。
    sorry_server <IPADDR> <PORT> #添加一个备用服务器。当所有的RS都故障时。

	real_server IP Port {
	  weight <INT> #给服务器指定权重。默认是1.
	  inhibit_on_failure #当服务器健康检查失败时,将其weight设置为0,而不是从Virtual Server中移除。
	  notify_up <STRING> #当服务器健康检查成功时,执行的脚本。
	  notify_down <STRING> #当服务器健康检查失败时,执行的脚本。
	  uthreshold <INT> #到这台服务器的最大连接数。
	  lthreshold <INT> #到这台服务器的最小连接数。
	  健康检查
	  # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
      HTTP_GET|SSL_GET {
          url {
              path <STRING>
              # Digest computed with genhash
              digest <STRING>
              status_code <INT>
          }
          connect_port <PORT>
          connect_timeout <INT>
          nb_get_retry <INT>
          delay_before_retry <INT>
	}
健康检查
HTTP及SSL GET检测

HTTP_GET | SSL_GET {
url {
path :指定要检查的URL的路径。如path / or path /mrtg2
digest :摘要。计算方式:genhash -s 172.17.100.1 -p 80 -u /index.html
status_code :状态码。
}
nb_get_retry :get尝试次数。
delay_before_retry :在尝试之前延迟多长时间。

connect_ip :连接的IP地址。默认是real server的ip地址。
connect_port :连接的端口。默认是real server的端口。
bindto :发起连接的接口的地址。
bind_port :发起连接的源端口。
connect_timeout :连接超时时间。默认是5s。
fwmark :使用fwmark对所有出去的检查数据包进行标记。
warmup :指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。
}

TCP_CHECK 检测

TCP_CHECK {
connect_ip :连接的IP地址。默认是real server的ip地址。
connect_port :连接的端口。默认是real server的端口。
bindto :发起连接的接口的地址。
bind_port :发起连接的源端口。
connect_timeout :连接超时时间。默认是5s。
fwmark :使用fwmark对所有出去的检查数据包进行标记。
warmup :指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。
retry :重试次数。默认是1次。
delay_before_retry :默认是1秒。在重试之前延迟多少秒。
}

SMTP检测

SMTP_CHECK {
connect_ip :连接的IP地址。默认是real server的ip地址。
connect_port :连接的端口。默认是real server的端口。 默认是25端口
bindto :发起连接的接口的地址。
bind_port :发起连接的源端口。
connect_timeout :连接超时时间。默认是5s。
fwmark :使用fwmark对所有出去的检查数据包进行标记。
warmup :指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。

retry :重试次数。
delay_before_retry :在重试之前延迟多少秒。
helo_name :用于SMTP HELO请求的字符串。
}

DNS检测

DNS_CHECK {
connect_ip :连接的IP地址。默认是real server的ip地址。
connect_port :连接的端口。默认是real server的端口。 默认是25端口
bindto :发起连接的接口的地址。
bind_port :发起连接的源端口。
connect_timeout :连接超时时间。默认是5s。
fwmark :使用fwmark对所有出去的检查数据包进行标记。
warmup :指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。

retry :重试次数。默认是3次。
type :DNS query type。A/NS/CNAME/SOA/MX/TXT/AAAA
name :DNS查询的域名。默认是(.)
}

MISC_CHECK检测

MISC_CHECK {
misc_path :外部的脚本或程序路径。
misc_timeout :脚本执行超时时间。
user USERNAME [GROUPNAME]:指定运行该脚本的用户和组。如果没有指定GROUPNAME,则GROUPNAME同USERNAME。
misc_dynamic:根据退出状态码动态调整权重。
0,健康检查成功,权重不变。
1,健康检查失败。
2-255,健康检查成功。权重设置为退出状态码减去2.如退出状态码是250,则权重调整为248
warmup :指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。
}

你可能感兴趣的:(随笔(备份))