keepalived实践总结

keepalived实践总结

一:keepalived简介

keepalived是一款高可用的开源软件,配置起来相比于Heartbeat来说要简单的多了,可以进行后端web server的健康检测功能。其实现原理是基于VRRP协议,多台服务器只向外提供一个共同的VIP和MAC地址,当服务器发生故障,各服务器之间会根据VRRP协议广播自己的优先级进行master竞选。

二:VRRP原理

VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

二:keepalived结构

Control Plane: 负责配置文件的解析Memory Management:负责内存管理 有两种模式一个是正常模式一个是就调试模式(可以追踪内存泄漏)Schedule-I/O Multiplexer:负责I/O调度和服用WatchDog:负责对子进程监控,每一个子进程都通过unix domain socket和watchdog进程连接,父进程会发送hello报文给子进程来对子进程进行监控Core components:定义了一些全局的库文件,包括html解析,定时器,link-list,vector,格式化字符串,网络组件,pid handling , tcp layer4 ,daemon managerment,buffer dumpCheckers:负责realserver的健康检查,负责移除和添加realserver到lvsSMTP:负责进行邮件通知IPVS wrapper:负责在用户空间生成lvs规则并送往内核空间应用IPVS:lvs代码

keepalived启动后主要有三个进程:

父进程:内存管理,子进程管理等等子进程:VRRP子进程 负责VRRP报文的发送和竞选子进程:healthchecker子进程

三:keepalived配置文件详解

//全局定义global_defs{notification_email//定义发送邮件的地址{admin@example.com}notification_email_from admin@example.com //定义使用什么邮件账号来发送smtp_server 127.0.0.1//定义发送邮件的邮件服务器地址stmp_connect_timeout 30//连接邮件服务器地址的超时时间router_id node1//定义一个全局的路由标识 用于标识一台路由设备/PC}static_ipaddress//用于配置静态地址 等同于用ip ifconfig等命令设置静态地址 一般不需要配置{192.168.1.1/24 brd + dev eth0 scope global 192.168.1.2/24 brd + dev eth1 scope global}static_routes//用于配置静态路由,等同于用route命令来配置路由条目,一般不需要配置{src $SRC_IP to $DST_IP dev $SRC_DEVICEsrc $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE}vrrp_sync_group VG_1 {//配置一个同步组,用于设置几个实例,只有当几个实例都失效了菜才转移vipgroup {//将http mysql两个实例设置成一个组httpmysql}notify_master /path/to/to_master//切换到master状态执行的脚步notify_backup /path_to/to_backup//切换到backup状态执行的脚步notify_fault “/path/fault.sh VG_1″//切换到fault状态执行的脚步notify /path/to/notifysmtp_alert//状态切换的时候发送邮件信息}vrrp_instance http {//定义一个实例state MASTER//定义实例的状态 MASTER 和 BACKUP 两种状态,意义不大 最终还是根据优先级确定stateinterface eth0//实例绑定的接口 绑定虚拟IP的接口dont_track_primary//忽略vrrp的interface错误track_interface {//跟踪接口,设置额外的监控,里面任意一块网卡出现问题,都会进入故障(FAULT)状态切换的时候发送邮件信息态.eth0eth1}mcast_src_ip <IPADDR>//设置使用指定的ip发送多播数据包 默认使用绑定网卡的地址garp_master_delay 10//切换到master后延迟进行arp请求 用于通知网关vip的mac地址更改virtual_router_id 51//VRID 相同的VRID为一个组priority 100//设置节点的优先级advert_int 1//检测间隔authentication {//多播报文是加密传送的,这里用于设置加密的类型和密码auth_type PASSautp_pass 1234}virtual_ipaddress {//设置VIP 可以指定VIP绑定的接口#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>192.168.200.17/24 dev eth1192.168.200.18/24 dev eth2 label eth2:1}virtual_routes {//设置虚拟路由# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tabsrc 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1192.168.110.0/24 via 192.168.200.254 dev eth1192.168.111.0/24 dev eth2192.168.112.0/24 via 192.168.100.254}nopreempt//不抢占,当master挂了的时候,重新恢复后是否抢占再次变成masterpreemtp_delay 300//抢占延迟debug//调试}vrrp_script check_running {//定义一个检测脚步 script “/usr/local/bin/check_running” //脚步的路径 interval 10//定义脚步检测的间隔 weight 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 }}virtual_server_group <STRING> {//定义一个lvs server组# VIP port<IPADDR> <PORT><IPADDR> <PORT>fwmark <INT>}virtual_server 192.168.1.2 80 {//定义一个lvs server实例delay_loop 3//服务轮询的时间间隔lb_algo rr|wrr|lc|wlc|lblc|sh|dh//设置使用的算法lb_kind NAT|DR|TUN//设置使用的lvs模型persistence_timeout 120//设置会话保持persistence_granularity <NETMASK>//会话保持的粒度 定义那些realserver 做会话保持protocol TCP//健康检查的使用的协议ha_suspend//virtualhost <string>//sorry_server <IPADDR> <PORT>//备用机 当所有后端realserver节点不可以用的时候 就临时把所有的请求都发送到这里(一般设置成lvs服务器自身,定义一个临时的错误界面)real_server <IPADDR> <PORT>//定义一个realserver{weight 1//定义权重inhibit_on_failure//设置当节点不可用的时候把其权重设置为0 而不是从规则中删除notify_up <STRING> | <QUOTED-STRING> //检查服务器正常后执行的脚步notify_down <STRING> | <QUOTED-STRING> //检查服务器失败后的要执行的脚步#HTTP_GET方式//定义HTTP_GET健康检查方式HTTP_GET | SSL_GET{url {//定义检查的urlpath ///设置url路径digest <STRING>//ssl 检查后的摘要信息status_code 200//HTTP检查的状态返回码}connect_port 80//定义连接的端口bindto <IPADD>//以这个绑定的地址发送请求对服务器进行监控检查connect_timeout 3//连接超时时间nb_get_retry 3//重连次数delay_before_retry 2//重连间隔时间}#下面是常用的健康检查方式,健康检查方式一共有HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK这些#TCP方式TCP_CHECK {connect_port 80bindto 192.168.1.1connect_timeout 4} # TCP_CHECK

四:keepalived的安装

人的一生是奋斗的一生,人们为了取得成功都在不断地努力着,

keepalived实践总结

相关文章:

你感兴趣的文章:

标签云: