keepalived学习
一、Keepalived简介
1.Keepalived是啥?
Keepalived是一个免费开源的,用C编写的应用。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。
2.VRRP协议是啥?
它是一种主备模式的协议,通过VRRP可以在设备发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:真实物理地址(rip)和虚拟地址(vip)。VRRP可以将两台或者多台物理设备地址虚拟成一个虚拟地址,然后通过虚拟IP(一个或者多个)对外提供服务,而实际内部由十多个物理设备协同工作,设备中只有一台物理设备对外提供服务,这台物理设备设备被成为:主服务器(Master角色),一般情况下Master是由选举算法产生,其它的物理设备不对外的虚拟IP,也不提供对外网络功能,仅接收MASTER的VRRP状态通告信息,这些设备被统称为“BACKUP的角色”。当master失效时,处于BACKUP角色的设备将重新进行选举,产生一个新的设备进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID(虚拟路由id)与一组IP地址(真实ip地址)构成一个虚拟路由器(虚拟成一个服务器)。在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。
3.Keepalived工作原理
在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。
在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常。
在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。
二、keepalived编译安装与配置
keepalived安装包下载https://keepalived.org/download.html
1.编译安装
从官网下载keepalived的最新版本,本文档下载的是2.2.2版本
(1)上传安装包至/opt目录下
(2)解压安装包,创建安装目录
tar zxvf keepalived-2.2.2.tar.gz
mkdir -p /opt/keepalived
(3)预编译+安装路径
cd /opt/keepalived-2.2.2/
./configure --prefix=/opt/keepalived
(4)编译与安装
make && make install
(5)将相应的配置文件拷贝到系统目录中
#创建配置目录
mkdir -p /etc/keepalived
#复制安装包解压的文件夹里的启动文件到系统自启动目录中
cp /opt/keepalived-2.2.2/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived
#复制编译安装的文件夹里的配置文件
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
cp /opt/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
cp /opt/keepalived/sbin/keepalived /usr/sbin/
2.配置
在keepalived.conf文件中配置HA和负载均衡
一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器(负载均衡)是可选的。
Vi keepalived.conf
#全局定义块
global_defs {
#邮件通知配置
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件通知来源
smtp_server 192.168.200.1 #SMTP服务器
smtp_connect_timeout 30 #SMTP;连接超时时间
router_id LVS_DEVEL #标识本节点的字条串,通常为hostname
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#VRRP实例定义块
vrrp_instance VI_1 { #实例名
state MASTER #实例状态为master|backup
interface eth0 #本机网卡
virtual_router_id 51 #指定唯一的虚拟路由地址VRID
priority 100 #优先级,master为最高优先级
advert_int 1 #检查间隔,默认1s
authentication { #设置认证
auth_type PASS #认证方式为password
auth_pass 1111 #密码为1111
}
virtual_ipaddress { #对外服务的虚拟地址VIP
192.168.200.100
}
}
#虚拟主机配置(负载均衡配置)
virtual_server 192.168.200.100 443 { #对外服务的虚拟地址VIP
delay_loop 6 #服务轮询时间间隔
lb_algo rr #lvs调度算法默认rr轮询
lb_kind NAT #lvs模型nat|dr|trunk
persistence_timeout 50 #lvs会话保持时间,50s内同一用户访问分配到同一realserevr
protocol TCP #检查用tcp协议
sorry_server 192.168.200.200 1358 #当所有后端realserver节点都不可用时,所有请求访问到该sorry_server
real_server 192.168.201.100 443 { #真实服务器配置
weight 1 #调度的权重,0表示失效
HTTP_GET { #健康检查方式有HTTP_GET|SSL_GET|TCP_GET|SMTP_GET等
url { #要检测的Url可以有多个
path / #具体路径
digest ff20ad2481f97b1754ef3e12ecd3a9cc #摘要
Status_code 200 #返回状态码
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}