Keepalived高可用
1. 简介
Keepalived实现一个双机热备高可用功能,检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
2. Keepalived的工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
Vrrp详解:
VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。[1] 一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协
议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA 坏掉时,本网段内所有以RouterA 为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP 就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。
缺省路由:通常用相同的处理方式把报文指向另一个路由器。如果有其他路由匹配,则按照该路由规则转发相应的报文,否则该报文将被转发到该路由器的缺省路由。这个过程不断重复,直到一个数据包被传递到目的地。设备的缺省路由通常被也称为默认网关,它经常提供如数据包过滤,防火墙或代理服务器等功能。
路由下一跳:路由的下一个点。如果路由器没有直接连接到目的网络,它会有一个提供下一跳路由的邻居路由器,用来传递数据到目的地。
VRRP的工作过程如下:
1. 路由器开启VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为主用路由器,优先级低的成为备用路由器。主用路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;备用路由器则启动定时器等待通告报文的到来。
2. VRRP在不同的主用抢占方式下,主用角色的替换方式不同:
l在抢占方式下,当主用路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为主用路由器;否则将保持备用状态。
l在非抢占方式下,只要主用路由器没有出现故障,备份组中的路由器始终保持主用或备用状态,备份组中的路由器即使随后被配置了更高的优先级也不会成为主用路由器。
3. 如果备用路由器的定时器超时后仍未收到主用路由器发送来的VRRP通告报文,则认为主用路由器已经无法正常工作,此时备用路由器会认为自己是主用路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出主用路由器,承担报文的转发功能。
3. 配置keepalived
1.准备两台服务器
主服务器:192.168.1.101
从服务器:192.168.1.24
虚拟ip:192.168.1.254
两台机器安装keepalived
2.安装keepalived需要的依赖包
yum install openssl-devel(openssl分成了几个部分,openssl-devel这个是包含了头文件,头文件参考,某些库文件等跟开发相关的东西)
yum install popt-devel(popt解析命令行选项的一些开发软件的包)
yum install ipvsadm(ip虚拟服务器)
yum install libnl*
3.下载安装keepalived
yum install keepalived
4.修改主服务器配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#指定keepalived在发生切换时需要发送email到的对象,一行一个,没有服务器配置邮箱可将其注释掉
notification_email {
#acassen@firewall.loc
#sysadmin@firewall.loc
}
#notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
#smtp_server192.168.200.1 #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id 192.168.1.101 #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
}
vrrp_instance VI_1 {
state MASTER #指定那个为master,那个为slave
interface eno16777736 #设置实例绑定的网卡
virtual_router_id 51# VPID标记和slave一样
priority 100 #主机高于slave,优先级
advert_int 1 #检测服务器状态间隔时间
authentication{#验证类型和密码
auth_typePASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.254#虚拟IP地址,可以为多个
}
}
其他配置详解:http://www.cnblogs.com/linuxliu/p/5825108.html
http://blog.csdn.net/jibcy/article/details/7826158
开启服务
systemctl start keepalived
5.修改slave配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#notification_email {
# 644856452@qq.com
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server127.0.0.1
#smtp_connect_timeout 30
router_id 192.168.1.24 #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
vrrp_instance VI_1 {
state SLAVE #slave配置
interface eno16777736
virtual_router_id 51
priority 99#低于主服务器100
#nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
advert_int 1
authentication {
auth_typePASS
auth_pass1111#验证密码,两台机器保持一致
}
virtual_ipaddress {
192.168.1.254
}
}
开启服务
systemctl start keepalived
测试:
6.在两台服务器web根目录下建立一个index.php文件,写上本机ip地址
7.在两台机器上使用 "ip add" 查看虚拟 IP 信息
可以看到,虚拟Ip此时绑定在主机上
在浏览器中输入虚拟ip192.168.1.254(虚拟的ip地址)此时将看到,你在master服务器中的index.php中写的内容
8、将matser服务器的keepalived关掉