打造高性能、高可用的负载均衡集群
首先我们从一个最简单的后端架构开始(见图1)。
图1
在云计算环境中,网络架构的组织非常重要,QingCloud提供了基础网络和VPC两种网络,他们的区别在官网用户指南中已经介绍,这里不赘述。推荐企业使用VPC来构建自己的网络,将所有主机和系统资源放置在VPC网络中,指定内网网段(如 192.168.x.x / 172.16.x.x),主机可以通过内网地址进行通信,该地址不会变化。
随着主机越来越多,IP地址不易记忆,为了方便主机间相互识别,可以给每台主机设置内网别名。为方便在控制台管理,给每个资源打上标签,按照标签来组织分类。
接下来我们回到上面那个简单的后端架构。随着访问压力越来越大,单台Nginx + Java Application可能不足以应付,你会看到这台主机的CPU越来越忙Application,内存使用越来越多。而且这台主机一旦故障,整个服务都不可用了。
所以我们首先调整这里的结构,增加多台Nignx + Java Application同时提供服务,在接入层引入负载均衡器(下文用LB这个词代替),使外网请求首先发到LB上。LB的选择有很多,比如提供七层负载能力的Nginx和HAProxy,也有提供四层负载能力的LVS,安装和配置的方法各有不同。
LB的引入可以分摊请求压力到后端的多台业务服务器,并且可通过心跳检查,自动隔离后端出现故障的服务器,实现业务层的高可用。但这时LB本身也会成为一个单点,当出现故障也会导致全局不可用。所以可以使用Keeplived服务为LB提供一个副本,在一台出问题的时候可以马上顶上,部署方法网上有很多资料。
有人会说可以通过DNS轮询到不同的IP ,实现LB的高可用,但事实上这样不行,因为一旦一台LB挂掉,DNS还会解析到这个LB,此时即便马上修改DNS,在DNS缓存更新之前(通常要很久),服务也是不可用的。虽然LB的原理并不复杂,但是部署配置有很多工作量,而且为了实现LB的高可用还要额外做一些事情。
改造后的架构如图2所示。
图2