什么是keepalived?
1
http://baike.baidu.com/link?url=BJL-qbgDBRqciYuZn_kmdoOaDRUSPq1EHBkuAEMhAzuOAr0gzMl9szgmi4BSxw8hQMJ-cWSiDLaT6_o1XnvkIK
keepalived原理
keepalived是模块化设计,不同模块负责不同功能,其组件主要包括:
1
2
3
4
5
core #core是keepalived的核心,负责主进程的启动和维护全局配置文件的加载解析等;
check #负责healthchecker(健康检查),包括各种健康检查方式以及对应的配置的解析(包括LVS的配置解析)
vrrp #VRRPD子进程,实现vrrp协议
libipfwc #iptables(ipchains)库配置LVS会用到
libipvs #配置LVS会用到
keepalived进程
1
2
3
父进程:内存管理、子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程
Keepalived配置文件
主要包括三类区域:全局配置、VRRPD配置、LVS配置
全局配置:包含全局定义和静态路由配置
全局定义:
1
2
3
4
5
6
7
8
9
10
11
# Configuration File for keepalived
global_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 服务器名
}
静态路由配置:
1
2
3
4
5
6
7
8
9
10
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_DEVICE
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
这里实际上就是给服务器配置真实的IP地址和路由的,一般这个区域不需要配置
VRRPD包括:VRRP同步组、VRRP实例、VRRP脚本
VRRP同步组(synchroization group)配置范例
1
2
3
4
5
6
7
8
9
10
11
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.sh
smtp_alert #切换时给global defs中定义的邮件地址发送邮件通知
}
VRRP实例(instance)配置范例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
vrrp_instance http {
state MASTER #角色,结合优先级设定
interface eth0 #VIP工作接口
dont_track_primary #忽略VRRP的interface错误
track_interface { #设置跟踪接口,也就是对网卡接口进行健康检查
eth0
eth1
}
mcast_src_ip <IPADDR> #发送多播数据包时的源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地址设置
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes { #虚拟路由,与VIP一起工作,
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
nopreempt #不抢占模式,只能设置在state和backup上,而且这个节点优先级必须比别的高
preemtp_delay 300 #抢占延迟
debug #debug级别
notify master #和sync group里面设置一样,可以设置不同实例通知不同管理人员
}
VRRP脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#负载均衡服务
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 #重连间隔时间
}
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com