阿里云支持使用Keepalived搭建负载均衡软件吗?
Posted 虞大胆的叽叽喳喳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云支持使用Keepalived搭建负载均衡软件吗?相关的知识,希望对你有一定的参考价值。
现在接触的项目是部署在阿里云上的,负载均衡使用七层的nginx,部署在ECS上的某一台设备上。该七层Proxy代理了后端ECS服务器,虽然通过Nginx负载均衡技术能够对后端ECS进行健康检查,但这七层Proxy本身却是个单点,所以它本身不能算一个负载均衡设备(软件),一般负载均衡设备都有主备的概念,所以想着使用Keepalived搭配两台ECS服务器做一个真正的负载均衡设备)。
由于原理没有想通,再加上Keepalived文档内容很多,又不想花太多的时间去学习,咨询了一些同事,但越理解越费劲,这一块确实需要很多的网络知识,以下是自己记录的一些内容。
如何实现一个内网VIP
在原公司的时候,经常说为一个项目申请内网或外网的VIP,这个VIP叫做虚拟IP,它能够保证其对应的服务是存活的,所以对于开发人员来说,可能没有关心它细节,实际上这个虚拟IP对应了负载均衡技术,可能是自行搭建的,比如Keepalived就是为了配合LVS才开发出来的。
先大概了解下Keepalived,它是一个基于VRRP协议来实现的服务高可用方案,能够避免IP的单点故障,它结合其他的负载均衡技术(比如LVS),从而保证整个集群的高可用性。
通过VRRP协议,由多台机器构成一个虚拟路由器组,里面有一个master和多个backup,同个时刻只有master拥有虚拟IP(LVS集群或Nginx集群),master会发送vrrp包,如果其他backup机器收不到,就会选举出一个新的master,且绑定虚拟IP,也就是说这个虚拟IP是漂移的。拥有虚拟IP的master负责arp和ip包转发。
对于内网VIP来说就很简单了,这个VIP和其他负载均衡设备在同一个网络上,一旦设备绑定了这个VIP,就由它负责“负载均衡了”。
Keepalived配置文件主要有三个段一个master和多个backup,vrrp_instance,vrrp_instance。
现在假设网络组分配了三个ip,192.168.10.10(eth1,在eth0也可以),192.168.10.11(eth1),192.168.10.13(虚拟IP),看配置文件(部署Keepalived的10和11两台机器):
global_defs {
notification_email {
}
}
vrrp_script chkscript {
script "check.sh"
}
vrrp_instance VI_1 {
state MASTER
interface eth0
mcast_src_ip 192.168.10.11#(另外一台配置192.168.10.12)
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.10.13
}
track_script {
chkscript
}
}
interface就是将来要绑定vip的网卡接口,mcast_src_ip表示在虚拟路由器组中该机器发送的源IP,virtual_ipaddress就是在interface接口上绑定vip,从而完成VIP宣告,track_script就是使用脚本检测服务是否存活(负载均衡软件,比如用Nginx搭建的话,就检测Nginx是否存活)。
如何实现一个外网VIP
如果虚拟IP是一个内网的IP,如果该负载均衡要对外服务,可以在公网IP上做一个NAT映射,不过实际上Keepalived也可以直接配置一个外网的VIP,只是该外网VIP和负载均衡设备和这个VIP要在一个交换机上,且VIP在漂移后要绑定默认网关。
现在假设网络组分配了三个ip,192.168.10.10(eth0,eth1配置为空),192.168.10.11(eth0,eth1配置为空),202.108.3.133(虚拟IP)。
global_defs {
notification_email {
}
}
vrrp_script chkscript {
script "check.sh"
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
virtual_ipaddress {
202.108.3.133/26 dev eth1
}
virtual_routes {
default via 202.108.3.1 #默认网关
track_script {
chkscript
}
}
如果virtual_ipaddress没有配置,则interface对应的接口就用来发送vrrp包,一旦漂移成功,在对应的机器上的eth1外网接口上绑定虚拟公网VIP,virtual_routes配置默认路由。
不过很少有这么做的,因为交换机对应的网络如果很大,则会发送大量的广播包。
阿里云上支持Keepalived吗?
以前阿里云支持HAVIP,用于配合Keepalived,不过现在已经不支持了,所以文档中也看不到了,不过可以通过腾讯云的介绍了解下细节,在VPC网络下才有HAVIP,它的概念:
为什么我们不随便找一个内网IP做VIP呢?腾讯云介绍到:
公有云厂商的普通内网 IP,出于安全考虑(如 ARP 欺骗等),不支持主机通过 ARP 宣告 IP 。当用户直接在 keepalived.conf 文件中指定一个普通内网 IP 为 virtual_address,系统无法完成迁移。
所以它们才出了HAVIP,相当于先要到腾讯云或阿里云申报,具体技术细节就未知了,现在假设阿里云支持 HAVIP,如何搭建呢?
比如VPC(192.168.1.0/24),ECS(192.168.1.1,192.168.1.2,一般绑定在主内网网卡上,在ECS上一定会有的),HAVIP(192.168.1.3),公网EIP(202.108.3.133)用于映射到HAVIP,EIP是阿里云的弹性IP,可以绑定到SLB,ECS,NAT网关,而HAVIP有点像弹性网卡。
global_defs {
notification_email {
}
}
vrrp_script chkscript {
script "check.sh"
}
vrrp_instance VI_1 {
state MASTER
interface eth1 #有点类似于弹性网卡,用于绑定HAVIP
unicast_src_ip 192.168.1.1
unicast_peer {
192.168.1.2
# 192.168.1.3 如果有多台机器
}
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.1.3
}
track_script {
chkscript
}
}
阿里云HAVIP只支持单播,所以要使用unicast_src_ip参数,且要使用unicast_peer配置对端的设备IP。
结论
虽然阿里云不支持HAVIP,无法配合Keepalived搭建高可用解决方案,但从中也学到了一些技术,但由于自己网络知识还一般,所以很多东西不能明白原理,只能尽力而为去理解,且没有真正去时间,同时对于阿里云的VPC网络,包括弹性网卡,弹性IP也有了一定的理解。
最后还是建议购买SLB,如果你理解了阿里云地域和可用区,且要搭建一个同城多机房的高可用解决方案,最好还是别自行搭建了,这一块后面还会分享。
以上是关于阿里云支持使用Keepalived搭建负载均衡软件吗?的主要内容,如果未能解决你的问题,请参考以下文章
配置nginx+keepalived高可用负载均衡的时候。主从服务器都出现了VIP 阿里云问题