KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控

KeepAlived介绍

keepalived:
vrrp协议的软件实现,原生设计目的为了高可用ipvs服务

vrrp协议:
Virtual Router Redundancy Protocol

功能:
vrrp协议完成地址流动
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各RS做健康状态检测
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

术语:
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC

通告:
心跳,优先级等;周期性

工作方式:
抢占式,非抢占式

安全工作:
认证:
无认证
简单字符认证:预共享密钥
MD5

工作模式:
主/备:单虚拟路径器
主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)

核心组件:
vrrp stack
ipvs wrapper
checkers

控制组件:配置文件分析器
IO复用器
内存管理组件

安装

keepalived包,CentOS 6.4+ Base源

主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:/usr/lib/systemd/system/keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived,如需独立日志也在此文件配置

配置文件组件部分

TOP HIERACHY
GLOBAL CONFIGURATION
Global definitions
Static routes/addresses

VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步组
VRRP instance(s):即一个vrrp虚拟路由器

LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs

配置语法

配置虚拟路由器:
vrrp_instance {

}

专用参数:
state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP
interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口
virtual_router_id VRID:当前虚拟路由器惟一标识,范围是0-255
priority 100:当前物理节点在此虚拟路由器中的优先级;范围1-254
advert_int 1:vrrp通告的时间间隔,默认1s

authentication { #认证机制
auth_type AH|PASS
auth_pass 仅前8位有效
}

virtual_ipaddress { #虚拟IP
/ brd dev scope label

track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态 实现地址转移
eth0
eth1
}

nopreempt:定义工作模式为非抢占模式
preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式

定义通知脚本:
当前节点成为主节点时触发的脚本
notify_master <STRING>|<QUOTED-STRING>

当前节点转为备节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>

当前节点转为“失败”状态时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>

通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
notify <STRING>|<QUOTED-STRING>

配置示例

配置前准备:
1.各节点时间必须同步
ntp, chrony

2.确保iptables及selinux不会成为阻碍

3.各节点之间可通过主机名互相通信(对KA并非必须)建议使用/etc/hosts文件实现

4.各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)

单主配置示例
! 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 k1 #主机名,在另一结点为k2
	vrrp_mcast_group4 224.0.0.100
}

vrrp_instance VI_1 {
	state MASTER #在另一个节点上为BACKUP
	interface eth0
	virtual_router_id 10 #多个节点必须相同
	priority 100 #在另一个结点上为50
	advert_int 1  #通告间隔1s
	authentication {
		auth_type PASS #预共享密钥认证
		auth_pass 123456
	}
	virtual_ipaddress {
		172.168.1.10/24 dev eth0 label eth0:1
	}
	track_interface {
		eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault" 
}

notify.sh内容
#!/bin/bash
contact='root@localhost'
notify() {
	mailsubject="$(hostname) is $1"
	mailbody="$(date +'%F %T'): vrrp transition, $(hostname) is $1"
	echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
	notify master
	;;
backup)
	notify backup
	;;
fault)
	notify fault
	;;
*)
	echo "Usage: $(basename $0) {master|backup|fault}"
	exit 1
	;;
esac

配置完毕启动服务
systemctl start keepalived

双主配置示例
! 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 k1 #主机名,在另一结点为k2
	vrrp_mcast_group4 224.0.0.100
}

vrrp_instance VI_1 {
	state MASTER #在另一个节点上为BACKUP
	interface eth0
	virtual_router_id 10 #多个节点必须相同
	priority 100 #在另一个结点上为50
	advert_int 1  #通告间隔1s
	authentication {
		auth_type PASS #预共享密钥认证
		auth_pass 123456
	}
	virtual_ipaddress {
		172.168.1.10/24 dev eth0 label eth0:1
	}
	track_interface {
		eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault" 
}

vrrp_instance VI_2 {
	state BACKUP #在另一个节点上为MASTER
	interface eth0
	virtual_router_id 20 #节点与V1不同
	priority 100 #在另一个结点上为50
	advert_int 1  #通告间隔1s
	authentication {
		auth_type PASS 
		auth_pass 998877 #密钥也要不同
	}
	virtual_ipaddress {
		172.168.1.20/24 dev eth0 label eth0:2
	}
	track_interface {
		eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault" 
}

配置发送邮件的邮箱设置

vim ~/.mailrc 或 /etc/mail.rc
set from=11111111@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=11111111@qq.com
set smtp-auth-password=123456789aqwe
set smtp-auth=login
set ssl-verify=ignore

测试:echo test mail | mail –s test 11111111@qq.com

修改keepalived配置
notification_email {
11111111@qq.com
}

KeepAlived配置IPVS

配置信息:
virtual_server IP port | virtual_server fwmark int
{
real_server {
}
}

常用参数
delay_loop :检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
lb_kind NAT|DR|TUN:集群的类型
persistence_timeout :持久连接时长
protocol TCP:服务协议,仅支持TCP
sorry_server :所有RS故障时,备用服务器地址
real_server
{
weight RS权重
notify_up | RS上线通知脚本
notify_down | RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { … }:定义当前主机的健康状态检测方法
}

检测方法:
应用层检测: HTTP_GET|SSL_GET
HTTP_GET|SSL_GET {
url {
path <URL_PATH>:定义要监控的URL
status_code :判断上述检测机制为健康状态的响应码
digest :判断为健康状态的响应的内容的校验码
}
connect_timeout :连接请求的超时时长
nb_get_retry :重试次数
delay_before_retry :重试之前的延迟时长
connect_ip :向当前RS哪个IP地址发起健康状态检测请求
connect_port :向当前RS的哪个PORT发起健康状态检测请求
bindto :发出健康状态检测请求时使用的源地址
bind_port :发出健康状态检测请求时使用的源端口
}

传输层检测:TCP_CHECK
TCP_CHECK {
connect_ip :向当前RS的哪个IP地址发起健康状态检测请求
connect_port :向当前RS的哪个PORT发起健康状态检测请求
bindto :发出健康状态检测请求时使用的源地址
bind_port :发出健康状态检测请求时使用的源端口
connect_timeout :连接请求的超时时长
}

单主配置示例
! 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 k1 #另一个k2
	vrrp_mcast_group4 224.0.100.10
}

vrrp_instance VI_1 {
	state MASTER #另一个BACKUP
	interface eth0
	virtual_router_id 10 #ID一致
	priority 100 #另一个50
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 998877 
	}
	virtual_ipaddress {
		192.168.1.100/24 dev eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server 192.168.1.100 80 {
	delay_loop 3 #检查间隔
	lb_algo rr #调度算法
	lb_kind DR
	protocol TCP
	sorry_server 127.0.0.1 80
	real_server 192.168.1.11 80 {
		weight 1
		HTTP_GET {
			url {
				path /
				status_code 200
			}
			connect_timeout 1
			nb_get_retry 3
			delay_before_retry 1
		}
	}
	
	real_server 192.168.1.12 80 {
		weight 1
		HTTP_GET {
			url {
				path /
				status_code 200
			}
			connect_timeout 1
			nb_get_retry 3
			delay_before_retry 1
		}
	}
}


双主配置示例
! 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 k1 #另一个k2
	vrrp_mcast_group4 224.0.100.10
}

vrrp_instance VI_1 {
	state MASTER #另一个BACKUP
	interface eth0
	virtual_router_id 10 #ID一致
	priority 100 #另一个50
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass f1bf7fde
	}
	virtual_ipaddress {
		192.168.1.100/24 dev eth0 label eth0:1
	}
	track_interface {
		eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault"
}

vrrp_instance VI_2 {
	state BACKUP #另一个MASTER
	interface eth0
	virtual_router_id 20
	priority 50 #另一个100
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 123456
	}
	virtual_ipaddress {
		192.168.1.100/24 dev eth0 label eth0:2
	}
	track_interface {
		eth0
	}
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server fwmark 3 {
	delay_loop 2
	lb_algo rr
	lb_kind DR
	nat_mask 255.255.0.0
	protocol TCP
	sorry_server 127.0.0.1 80
	real_server 192.168.1.11 80 {
	weight 1
	HTTP_GET {
		url {
			path /
			status_code 200
			}
		connect_timeout 2
		nb_get_retry 3
		delay_before_retry 3
	}
	}

	real_server 192.168.1.12 80 {
	weight 1
	HTTP_GET {
		url {
			path /
			status_code 200
			}
		connect_timeout 2
		nb_get_retry 3
		delay_before_retry 3
	}
	}
}

调用脚本进行监控

keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外

track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script

配置步骤
1.先定义一个脚本
vrrp_script <SCRIPT_NAME> {
script “”
interval INT
weight -INT
}

2.调用此脚本
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}

示例
vrrp_script katest {
script “/data/test.sh”
interval INT
weight -INT
}
track_script {
katest
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值