keepalivednginx
keepalived的诞生本是为lvs提供高可用的,可是如今keepalived能够当成一组独立的高可用组件来使用,其主要是经过VRRP协议实现高可用(VRRP是什么这里不作过多介绍),而keepalived实现故障转移主要是经过优先级抢占来实现的(也可经过down掉其中一个keepalived),一般状况下是一主一备(固然也能够双主),后端
下面是官网的keepalived设计图服务器
2.1Scheduler -I/O Multiplexertcp
keepalived是使用I/O复用实现管理通讯的.ide
2.2 Memory Mngt设计
keepalived本身实现内存管理,包括内存分配,内存再分配,内存释放等.router
2.3 Control Planeserver
配置管理的东东,只须要按照默认的配置文件格式便可blog
2.4 Watch Dog进程
keepalived启动时会生成三个进程,其中主进程就靠这个Watch Dog去监控两个子进程,若是子进程挂了,会尝试去重启子进程,若是启动失败,就会把服务转移到备用节点上.
2.5 VRRP Stack
keepalived的一个重要功能,高可用的主要实现之一,VRRP协议主要是实现路由冗余的,keepalived就是靠VRRP在后端的两台real server虚拟一个vip和一个vmac地址,当一台的keepalived(或者使用Checkers监控的服务)挂了的时候能够把vip和vmac转移到另外一台real server上,实现高可用.
2.6Checkers
这也是keepalived的一个重要功能,主要对后端real server的服务进行健康状态检测的,若是检测到当前定义的检测项dead了的话,经过下降主服务器的优先级来实现故障转移.内置了tcp,http,ssl等检测手段,固然,这些还不够的话,能够使用自定义脚本,
2.7SMTP
这个是邮件模块,主要是当服务发生转移或者其它定义的条件被触发时通知管理员使用的.
2.8 System Call
自定义对服务检测的脚本
keepalived+nginx(配置以下),ngxinngxin自行定义
master:
! Configuration File for keepalived
global_defs { #全局配置段
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_down { #经过检测nginx服务是否在线,动态调整优先级
script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100 #master进程优先级
advert_int 1 #检测时长间隔
authentication {
auth_type ldf #和backup的验证机制
auth_pass 1212
}
virtual_ipaddress {
192.168.128.222 #vip
}
track_script { #追踪上面定义的检测脚本名
check_down
}
}
backup
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_down {
script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"
interval 1
weight -2
}
vrrp_instance VI_1 {
state BACKUP #backup
interface eth0
virtual_router_id 51 #虚拟mac地址,不能超过255
priority 99 #backup优先级
advert_int 1
authentication {
auth_type ldf
auth_pass 1212
}
virtual_ipaddress {
192.168.128.222
}
track_script {
check_down
}
}