keepalived 配置文件解析
什么是keepalived?
http://baike.baidu.com/link?url=BJL-qbgDBRqciYuZn_kmdoOaDRUSPq1EHBkuAEMhAzuOAr0gzMl9szgmi4BSxw8hQMJ-cWSiDLaT6_o1XnvkIK
keepalived原理
keepalived是模块化设计,不同模块负责不同功能,其组件主要包括:
core #core是keepalived的核心,负责主进程的启动和维护全局配置文件的加载解析等;check #负责healthchecker(健康检查),包括各种健康检查方式以及对应的配置的解析(包括LVS的配置解析)vrrp #VRRPD子进程,实现vrrp协议libipfwc #iptables(ipchains)库配置LVS会用到libipvs #配置LVS会用到
keepalived进程
父进程:内存管理、子进程管理等等子进程:VRRP子进程子进程:healthchecker子进程
Keepalived配置文件
主要包括三类区域:全局配置、VRRPD配置、LVS配置
全局配置:包含全局定义和静态路由配置
全局定义:
# Configuration File for keepalivedglobal_defs { #全局配置标识 notification_email { admin@domain.com #定义邮件发送地址 0633225522@domain.com } notification_email_from keepalived@domain.com #发送邮件用户 smtp_server 192.168.200.20 #SMTP server 地址 smtp_connect_timeout 30 #SMTP server重连时间 lvs_id LVS_MAIN #LVS 服务器名}
静态路由配置:
static_ipaddress{192.168.1.1/24 brd + dev eth0 scope global #设置eth0的ip地址192.168.1.2/24 brd + dev eth1 scope global #设置eth1的ip地址}static_routes{src $SRC_IP to $DST_IP dev $SRC_DEVICEsrc $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE}
这里实际上就是给服务器配置真实的IP地址和路由的,一般这个区域不需要配置
VRRPD包括:VRRP同步组、VRRP实例、VRRP脚本
VRRP同步组(synchroization group)配置范例
vrrp_sync_group VG_1 {group { http #http和mysql是实例名和下面的实例名一致mysql}notify_master /path/to/to_master.sh #notify_master /path/to/to_master.sh:表示当切换到master状态时,要执行的脚本notify_backup /path_to/to_backup.sh #notify_backup /path_to/to_backup.sh:表示当切换到backup状态时,要执行的脚本notify_fault "/path/fault.sh VG_1"notify /path/to/notify.shsmtp_alert #切换时给global defs中定义的邮件地址发送邮件通知}
VRRP实例(instance)配置范例:
vrrp_instance http { state MASTER #角色,结合优先级设定 interface eth0 #VIP工作接口 dont_track_primary #忽略VRRP的interface错误 track_interface { #设置跟踪接口,也就是对网卡接口进行健康检查 eth0 eth1 } mcast_src_ip#发送多播数据包时的源IP地址,相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址 garp_master_delay 10 #在切换到master状态后,延迟进行ARP(gratuitous ARP)请求 virtual_router_id 51 #这里设置VRID,这里非常重要,相同的VRID为一个组,将决定多播的MAC地址 priority 100 # 优先级,优先级高的为master advert_int 1 # 检查间隔,默认为1秒 authentication { #认证设置 auth_type PASS #认证类型:包括pass和AH两种 autp_pass 1234 #认证密码} virtual_ipaddress { #VIP地址设置 # / brd dev scope label
VRRP脚本
vrrp_script check_running { #脚本运行设置 script "/usr/local/bin/check_running" #设置脚本路径 interval 10 #脚本执行间隔 weight 10 #脚本结果导致优先级变更:10表示优先级+10;-10表示优先级-10}vrrp_instance http { #定义实例 state BACKUP smtp_alert interface eth0 virtual_router_id 101 priority 90 advert_int 3 authentication { auth_type PASS auth_pass whatever } virtual_ipaddress { 1.1.1.1 } track_script { check_running weight 20 #调用脚本 }}
LVS配置:
#负载均衡服务virtual_server 192.168.200.15 80 { #指定192.168.200.15的http服务 delay_loop 30 #每个30秒检查一次real_server状态 lb_algo wrr #LVS算法 lb_kind NAT #LVS模式 persistence_timeout 50 #每个TCP会话连接保持时间为50s protocol TCP #使用TCP协议 sorry_server 192.168.100.100 80 #当real_server出现问题时切换到sorry_server real_server 192.168.100.2 80 { #负载均衡real_server 1 weight 2 #权重,算法采用的是加权轮询算法,因此需要配置权重 HTTP_GET { #http请求 url { path /testurl/test.jsp digest ec90a42b99ea9a2f5ecbe213ac9eba03 } url { path /testurl2/test.jsp digest 640205b7b0fc66c1ea91c463fac6334c } connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 2 #重连间隔时间 } }
部分参考博客“王者之心”:http://www.cnblogs.com/pricks/p/3822232.html
持续更新中……