keepalived是什么:
node
简单来讲 Keepalived 的功能
功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工做,一台slave热备;master失效后slave当即接替工做
功能2.监控 工做集群中的主机 ,若是有一台服务器死机,或工做出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除
当服务器工做正常后Keepalived自动将web服务器加入到服务器群中
mysql
keepalived是集群管理中保证集群高可用的一个服务软件,其功能相似于heartbeat,用来防止单点故障。
可是它通常不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一块儿工做来达到集群的高可用。nginx
1. Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,能够利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),可是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现.web
(功能1)keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。sql
虚拟路由冗余协议,能够认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup。master上面有一个对外提供服务的vip(该路由器所在局域网内其余机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就须要根据VRRP的优先级来选举一个backup当master。这样的话就能够保证路由器的高可用了。
MASTER实现针对虚拟路由器IP的各类网络功能,如ARP请求,ICMP,以及数据的转发等;其余设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能
配置VRRP协议时须要配置每一个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,
具备相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;
同一组中的路由器经过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数(255最大)。缓存
MASTER选举:
若是对外的虚拟路由器IP就是路由器自己配置的IP地址的话,该路由器始终都是MASTER;
不然若是不具有虚拟IP的话,将进行MASTER选举,各路由器都宣告本身是MASTER,发送VRRP通告信息;
若是收到其余机器的发来的通告信息的优先级比本身高,将转回BACKUP状态;
若是优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过若是对外的虚拟路由器IP就是路由器自己的IP的话,该路由器始终将是MASTER,这时的优先级值为255。服务器
keepalived主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各类检查方式。
vrrp模块是来实现VRRP协议的。网络
keepalived只有一个配置文件keepalived.conf,里面主要包括如下几个配置区域,分别是
global_defs、 故障时默认邮件发送 参数
static_ipaddress、 设置本节点的IP 若是你的机器上已经配置了IP和路由,那么这两个区域能够不用配置
static_routes、 设置本节点路由信息 若是你的机器上已经配置了IP和路由,那么这两个区域能够不用配置
vrrp_script、 用来作健康检查,检查失败时会将vrrp_instance的priority减小相应的值。负载均衡
vrrp_instance 用来定义对外提供服务的VIP区域及其相关属性
virtual_server 通常在超大型的LVS中用到,通常LVS用不到,略过网站
全局配置又包括两个子配置
全局定义(global definition)
静态路由配置(static ipaddress/routes)
实战阶段:
1.全局定义(global definition)
global_defs {
notification_email 发生诸如切换操做时发送email通知邮件地址 能够多个每行一个
{
admin@example.com
}
notification_email_from admin@example.com 发送通知邮件时邮件源地址是谁
smtp_server 127.0.0.1 发送email时使用的smtp服务器地址
stmp_connect_timeout 30 链接smtp链接超时时间
router_id node1 机器标识 节点名标识,主要用于通知中
}
2.静态地址和路由配置
static_ipaddress {
10.210.214.163/24 brd 10.210.214.255 dev eth0 静态ip配置 这里实际上和系统里面命令配置IP地址和路由同样
...}
static_routes {
10.0.0.0/8 via 10.210.214.1 dev eth0 静态路由配置
...}
以上分别表示启动/关闭keepalived时在本机执行的以下命令:
# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0
注意: 请忽略这两个区域,通常这个区域不须要配置,由于我坚信你的机器确定已经配置了IP和路由。
2、VRRPD配置
VRRPD配置包括三个类
VRRP实例(VRRP Instance)
VRRP同步组(synchroization group)
VRRP脚本
1.VRRP实例(instance)
vrrp_instance http {
state MASTER 实例初始状态(还要根据priority值肯定)能够是MASTER 或 BACKUP
若是设置了nopreempt 则这个值不起做用,主从根据priority肯定
interface eth0 实例节点固有IP(非VIP)的网卡,用来发VRRP包
dont_track_primary 忽略VRRP网卡错误。(默认未设置)
track_interface { 监控如下网卡,若是任何一个不通就会切换到故障FALT状态。(可选项)
eth0 eth1
}
mcast_src_ip <IPADDR> vrrp组播包的源地址,默认源地址为master的IP 这里至关于heartbeat的心跳端口
若是没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
garp_master_delay 10 当切换为Master状态后多久更新ARP缓存
virtual_router_id 51 虚拟路由标识即VRID 相同的VRID为一个组 他将决定多播的MAC地址
priority 100 定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER 的优先级必须大于BACKUP。
这个选项的值最好高于其余机器50个点,该项范围是1-255
advert_int 1 检查间隔默认为1秒
authentication { 设置认证
auth_type PASS 认证方式能够是PASS或AH两种认证方式
autp_pass 1234 认证密码
}
设置虚拟IP 能够设置多个
virtual_ipaddress {
#<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 {
# 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的节点上
并且这个节点的优先级必须别另外的高。当主MASTER恢复后不抢占资源
preemtp_delay 300 抢占延迟 master启动多久以后进行接管资源(VIP/Route信息等)
debug debug级别
}
state | nopreempt | priority | |
主机 | backup | 设置 | 100 |
从机 | backup | 不设置 | 50 |
2.VRRP同步组(synchroization group)配置
定义vrrp_intance组,使得这个组内成员动做一致。
例如两个vrrp_instance同属于一个vrrp_rsync_group,
那么其中一个vrrp_instance发生故障切换时,另外一个vrrp_instance也会跟着切换(即便这个instance没有发生故障)。
vrrp_sync_group VG_1 {
group {
http
mysql
}
notify_master /path/to/to_master.sh 表示当切换到master状态时要执行的脚本
notify_backup /path_to/to_backup.sh 表示当切换到backup状态时要执行的脚本
notify_fault "/path/fault.sh VG_1" 表示出错状态时要执行的脚本
notify /path/to/notify.sh 表示任何状态切换时都调用该脚本,该脚本在以上三个脚本执行完成以后进行调用
smtp_alert 表示切换时给global defs中定义的邮件地址发送邮件通知
}
3.VRRP脚本
告诉 keepalived 在什么状况下切换,因此尤其重要。能够有多个 vrrp_script
vrrp_script check_running {
定义脚本名字
interval 10
脚本执行的间隔
weight -10
脚本执行的优先级
}
若是script中的指令执行失败,那么相应的的优先级会减小10个点vrrp_instance