一、keepalived简介:
官网:https://www.keepalived.org/
下载:https://www.keepalived.org/download.html(v2.2.4)
用户手册:https://www.keepalived.org/doc/
配置文件详解:https://www.keepalived.org/manpage.html # man 5 keepalived.conf
1、定义:
c编写的路由软件,提供负载均衡和高可用
负载均衡框架是基于ipvs内核模块,提供第四层负载均衡
高可用基于vrrp协议
二、keepalived配置中文注释:
[root@s2 keepalived]# vim /etc/keepalived/keepalived.conf
#全局配置
global_defs {
notification_email {
root@localhost #故障时通知的邮件地址,可按行区分写多个
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ha1.example.com
vrrp_skip_check_adv_addr #提升性能:如果收到的报文和上一个报文是同一个路由器则跳过检查报文中的源地址
vrrp_strict #严格遵守VRRP协议,不允许状况:1,没有VIP地址,2.单播邻居,3.在VRRP版本2中有IPv6地址.
vrrp_garp_interval 0 #ARP报文发送延迟
vrrp_gna_interval 0 #消息发送延迟
vrrp_mcast_group4 224.0.0.18 #默认组播IP地址,224.0.0.0到239.255.255.255
#vrrp_iptables
}
#vrrp虚拟路由器
vrrp_instance VI_1 {
state MASTER/BACKUP #当前节点在此虚拟路由器上的初始状态MASTER/BACKUP
interface eth0 #绑定为当前虚拟路由器使用的物理接口
virtual_router_id 80 #当前虚拟路由器惟一标识,范围是0-255
priority 100 #当前物理节点在此虚拟路由器中的优先级;范围1-254
advert_int 1 #vrrp通告的时间间隔,默认1s
#preempt_delay 300 #定义工作模式为抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
#nopreempt #定义工作模式为非抢占模式,需要VIP state都为BACKUP
#配置主从漂移ip
unicast_src_ip 192.168.7.101 #本机源IP
unicast_peer {
192.168.7.102 #从节点的目标IP
……
}
#认证机制
authentication {
auth_type PASS#密码认证
auth_pass 1111qwer#仅前8位有效
}
#虚拟IP
virtual_ipaddress {
192.168.7.248 dev eth0 label eth0:0
}
#通知脚本的调用方法:
notify_master "/etc/keepalived/notify.sh master" #当前节点成为主节点时触发的脚本
notify_backup "/etc/keepalived/notify.sh backup" #当前节点转为备节点时触发的脚本
notify_fault "/etc/keepalived/notify.sh fault" #当前节点转为“失败”状态时触发的脚本
notify <STRING>|<QUOTED-STRING> #通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
}
#虚拟服务器配置:
#virtual_server IP port #定义虚拟主机IP地址及其端口
#virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群
#virtual_server group string #将多个虚拟服务器定义成组,将组定义成虚拟服务
virtual_server IP port {
delay_loop <INT> #检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #定义调度方法
lb_kind NAT|DR|TUN #集群的类型
persistence_timeout <INT> #持久连接时长
protocol TCP|UDP|SCTP #指定服务协议
sorry_server <IPADDR> <PORT> #所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT>{
weight <INT> #RS权重
notify_up <STRING>|<QUOTED-STRING> #RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> #RS下线通知脚本
#定义当前主机的健康状态检测方法
#HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }
#应用层监测
HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #判断上述检测机制为健康状态的响应码
}
connect_timeout <INTEGER> #连接请求的超时时长
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
}
#TCP监测
TCP_CHECK {
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER> #连接请求的超时时长
}
}
}
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
track_interface {
eth0
eth1
……
}
#keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整,
#分两步:(1) 先定义一个脚本;(2) 调用此脚本
#自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用。
vrrp_script <SCRIPT_NAME> { #基于第三方仲裁设备
script <STRING>|<QUOTED-STRING> #shell命令或脚本路径
interval <INTEGER> #间隔时间,单位为秒,默认1秒
timeout <INTEGER> #超时时间
weight <INTEGER:-254..254> #权重,监测失败后会执行权重+操作
fall <INTEGER> #脚本几次失败转换为失
rise <INTEGER> #脚本连续监测成果后,把服务器从失败标记为成功的次数
user USERNAME [GROUPNAME] #执行监测的用户或组
init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
}
#调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}