1、keepalived简介:node
keepalived是一个相似于layer3, 4 & 5交换机制的软件,也就是咱们平时说的第3层、第4层和第5层交换。Keepalived的做用是检测web服务器的状态,若是有一台web服务器死机,或工做出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工做正常后Keepalived自动将web服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的web服务器。linux
工做原理nginx
Layer3,4&5工做在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别以下:web
Layer3:Keepalived使用Layer3的方式工做式时,Keepalived会按期向服务器群中的服务器发送一个ICMP的数据包(既咱们平时用的Ping程序),若是发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种状况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效做为服务器工做正常与否的标准。shell
Layer4:若是您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工做正常与否。如web server的服务端口通常是80,若是Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。vim
Layer5:Layer5就是工做在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,若是与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。centos
2、实验步骤:bash
1.建立管理节点在node1上,创建双机互信node1和node2,而后同步时间,安装keepalived服务器
2.在node1上配置文件须要作一下修改网络
3.把配置文件复制到node2上一份,并修改初始状态和优先级
在node1上开始启动服务[root@node1 ~]# servicekeepalived start
而后检查ip地址
4.如今把node1的keepalived停掉
[root@node1keepalived]# service keepalived stop
Stoppingkeepalived: [ OK ]
验证node2是否把virtual_ipaddress拿走
验证成功
能够在配置文件中手动经过vrrp_script定义一个外围的检测机制,并在vrrp_instance中经过定义track_script来追踪脚本执行过程,实现节点转移
实验测试在/etc/keepalived/keepalived.conf中作一下修改
在node2上作一样的操做,但不建立down文件,以后一块儿重启服务
进行检测
此时将node1中/etc/keepalived/下的down删除,进行查看
验证成功
3、详细介绍如下四个功能实现操做
1.如何在状态转换时进行通知?
2.如何配置Ipvs?
3.如何对某特定服务作高可用
4.如何实现基于多虚拟路由的master/master模型?
1.要在状态转换是进行通知,须要定义通知脚本能够在
vrrp_sync_group{
}中定义,也能够在
vrrp_instance{
}中定义
经过man keepalived命令能够查看通知脚本定义的两种方法
第一种
# to MASTER transition
notify_master /path/to_master.sh
# to BACKUP transition
notify_backup /path/to_backup.sh
# FAULT transition
notify_fault "/path/fault.sh VG_1"
第二种
#arguments
# $1 ="GROUP"|"INSTANCE"
# $2 = name of group or instance
# $3 = target state of transition
# ("MASTER"|"BACKUP"|"FAULT")
notify /path/notify.sh
例如:
转换为MASTER的状态通知
其余状态转换相似
下面用一个脚本notify.sh实现状态转换通知的简单示例:
进行测试
经过传参数master|backup|fault验证均可以成功
在配置文件keepalived.conf中进行脚本调用
为node2提供一样的配置而后进行测试
[root@node1keepalived]# ls
down keepalived.conf keepalived.conf.bak notify.sh
[root@node1keepalived]# rm -f down
[root@node1keepalived]# mail
>N18 root Thu Sep 2621:57 18/700 "node1.magedu.comto be master: 172.16.2.8 floating"截取了一条
验证均可以成功
二、如何配置ipvs
在node2上作一样的修改,启动httpd服务,keepalived能自动生成规则,而后查看ipvsadm规则
三、如何对某特定服务作高可用?以nginx为例进行讲解
在两个节点上安装nginx
[root@node1~]# ansible all -m yum -a 'name=nginx state=present'
启动nginx服务,启动以前注意要中止httpd服务
对node1和node2中/etc/keepalived/下的notify.sh脚本进行修改
而后启动keepalived服务,能够看到在node1上80端口开始启用
[root@node1keepalived]# ss -tanl | grep :80
LISTEN 0 128 *:80 *:*
而后在/etc/keepalive/下建立down文件,看nginx服务是否能够转移到node2上
验证成功,说明实现了nginx的高可用服务
总结:要对某特定服务作高可用有两个要点
一是:要提供监控服务脚本
二是:在vrrp实例中追踪服务
修改配置文件keepalived.conf
在node2上作一样的修改
测试:
[root@node2keepalived]# killall nginx
Youhave new mail in /var/spool/mail/root
[root@node2keepalived]# ss -tanl | grep :80
[root@node2keepalived]#
在node1上
[root@node1keepalived]# ss -tanl | grep :80
LISTEN 0 128 *:80 *:*
验证成功
四、如何实现基于多虚拟路由的master/master模型?
要实现双主模型须要定义两个vrrp_instance,在node1的配置文件中要一下修改:
在node2上作一样的修改,重启keepalived,进行测试
在node2上
验证成功