keepalive:最主要的目的是能够自己调用ipvsadm命令来生成规则,并且能够自动实现将用户需求的访问地址转移到其他节点上来实现的。
keepalive:在一个节点上提供VIP向外提供服务,将用户的请求转发到后端的realservel上去。
一个dearicter有两个资源进行工作:
1、向外的VIP;
2、在内核中生效的ipvs规则
keepalive自身启动一个服务,它能够工作在两个节点上(也可以是多个节点),其中当前持有资源的节点称为活动节点Master,另一个称为备用节点backup,;对于Master和backup来讲,Master这个节点会不停的向backup这个节点通告心跳,但他的通告是基于VRRP这种机制来实现的,Master这个节点会一直处于存活状态的,备用节点backup一旦接收不到主节点的心跳传递过来的VRRP信息之后,他就会把资源抢过来在本地使用并在本地生效规则;
这个规则的生效是:本地有个服务,它只需要把本地的keepalive的那个生效服务中的某个模块把他生效起来就可以了,所以keepalive自身是模块化设计的,它有着诸多模块;有些模块是监控生效ipvs的,去监控配置文件中跟ipvs相关的一些应用;他的主要目的是为ipvs提供高可用性,keepalive除了能实现资源转移之外,还能自身调用ipvs命令来生成规则;而且还能够实现后端realserver的健康状态检测。
keepalive的核心:
1、vrrp的实现;
vrrp:是虚拟冗余路由协议;能把两个网关虚拟成一个网关来使用。
2、跟vrrp相关的一些配置:vrrp server
3、vrrp_script 调用vrrp脚本的实现
对keepalive他的架构是一个主进程称为Mster进程,在一个主进程下回生产两个子进程,一个是用来实现vrrp(keepalive的核心是vrrp),第二个是checkers(检测服务检测可用性)是提供ipvs后端realserver的健康状态检测的;
VRRP每个虚拟路由中的每个节点是有优先级的,优先级是从,0—255,0和255有特殊用法一般不用,一般来讲数字越大,优先级越高;谁是Master谁是Backup是由选举产生的,谁的优先级越高,谁是Master;
keepalive是轻量级,适用于节点少的场景;支持多个节点,但是对于同一组服务来讲,仍然跟此前的法则一样,只能有一个节点是活动的,因为VIP只能在一个节点上运行,所他是一主多从的模式;可以有一个主Master多个backup;但是backup越大浪费越大,资源占用越大
不能让其他节点随意加到集群中来:要通过认证来解决:
VRRP认证有两种认证:一种是明文认证,双方都配置好域共享密钥这种明文字符串;第二种:可以实现md5或sha1散列这种认证;
安装keepalive
先把两个节点复制上密钥文件:
# ssh-copy-id -i .ssh/[email protected]
# ssh-copy-id -i .ssh/[email protected]
首先要确保两个节点时间是同步的:
# ansible all –a ‘date’
如果时间不同步执行:# netdate 172.16.0.1 从主机上同步时间
而后去安装keepalive
# ansible all –m yum –a ‘name=keepalivestate=present’
然后切换到各个节点上编辑配置文件/etc/keepalived/keepalived.conf
keepalived.conf大致分为3个段:
1、GLOBAL CONFIGURATION:全局配置段:
它主要有两段组成:
Global definitions :全局定义;
Static routes:静态路由
2、VRRPD CONFIGURATION : 配置vrrp协议相关子进程工作方式;vrrpd是用来定义虚拟路由的;
VRRP synchronization group vrrp的同步组;
VRRP instance :VPPR实例:任何一个虚拟路由定义好了以后,在任何一个keepalive节点上都必须提供一个运行的实例,这两个节点上的实例要匹配,keepalive的每个节点上的初始信息是不一样的,因为每个节点都有初始状态大的,每个节点都有优先级,把优先级高的的初始状态应该是Master,第一个是Backup;
3、LVS CONFIGURATION:LVS配置;
Virtualserver group :虚拟路由服务器组
Virtualserver(s) :虚拟服务器:IPVS规则
编辑:# vim /etc/keepalived/keepalived.conf
notification_email:收件人
notification_email :发件人,这个可以随意定,因为发件人可以伪装
smtp_connect_timeout 30 :连接超时时间;
router_id LVS_DEVE :路由器的标示
state MASTER:初始状态;vrrp初始状态都是backup,选举产生后主的才能成为MASTER,
interface eth0 :所有的通告选举要通过那个接口进行
virtual_router_id :虚拟ID
priority :初始优先级
advert_int :通告几个
authentication ; 认证机制
virtual_ipaddress : 虚拟地址
配置好后复制一份到备节点上:
# scp /etc/keepalivesd/keepalived.confnode5:/etc/keepalived/
然后编辑备节点上的配置:改优先级、state、
stae改为BACKUP,优先级priority改为比MASTER小
然后启动主节点:# service keepalived start
此时可以查看邮件信息:# tail –f /var/log/messages
# ip addr show
此时把第一个几点关掉:# service keepaluived stop
另一个节点就会立即把优先级抢走:
默认情况下keepalive工作在抢占模式下,所以VRRP有两种工作模式:抢占模式和非抢占模式;在非抢占模式下就算你的节点优先级高也抢不走,除非别的节点挂了;所以默认情况下资源在那个节点上他就永远在那个节点上,除非这个节点出现了故障;
怎么能手动的让一个节点转移出去:需要依靠脚本实现:使用脚本要使用vrrp来定义
vrrp_scriptchk_mantaince_down{
script "[[ -f/etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -2
vrrp_script chk是自己定义在外围的自定义脚本
interval 1 :每个一秒钟检测一次;weight -2 :一旦这个脚本执行失败;则权重就会减2
script后是个判断命令:"[[ -f /etc/keepalived/down ]]&& exit 1 || exit 0" 如果执行成功就返回1,如果不成功就返回0;
在/etc/keepalived/keepalived.conf中加入:
vrrp_scriptchk_maintainace {
script "[[ -e /etc/keepalived/down ]]&& exit1 || exit 0"
interval 1
weight -2
}
然后要在最后追踪脚本,在vrrp_instance VI_1的最后行加入:
track script {
chk_maintainace
}
然后需要复制这个配置文件到另一个节点上;
# scp /etc/keepalived/keepalived.confnode5:/etc/keepalived/
然后让重启keepalived
然后查看:# ip addr show
然后让节点4 down掉:
# cd /etc/keepalived
# touch down
在查看:
# ansible all -m shell -a 'ip addr show | grep eth0'
注意:
1、上面的state为当前节点的起始状态,通常在master/slave的双节点模型中,其一个默认为MASTER,而别一个默认为BACKUP。
2、priority为当关节点在当前虚拟路由器中的优先级,master的优先级应该大于slave的;