可视化服务高可用探索
众所周知,任何大型网站都是从小型网站发展而来,小型网站在初始阶段时,它的应用程序、数据库和文件存储都放在一台服务器上,照样扛得住,因为没有庞大的访问量,2003年的淘宝就是从mysql+php这样简约的形态开始它的发展之路的。
现在的淘宝,我们也见到了,交易量级可以睥睨亚马逊,架构上一定是高度高可用的。
可视化VBI在高可用的探索路上也是业务的驱动,我们的用户要求可视化系统建设需要对硬件设备进行主备方式冗余,满足系统高可靠性、高稳定性、高可用性。
“高可用性”(High Availability),通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
说得更加具体一些,客户使用服务期间,即使因为机器故障、停电恢复这种外界不可控因素,我们的服务,也要做到具备最短的MTTR(平均故障恢复时间),减少等待。
业界对高可用原理的阐述:高可用的基本原理是为构成应用系统的每种服务提供多个实例(为了防止脑裂问题,应使用3个或更多的奇数个实例)同时提供服务,并进行负载均衡,通过自主选举动态确定Master,某个节点宕掉会自动切换到其他可用的实例,实现故障自动转移。
1.VBI5中转服务,由多个中转服务节点组成中转服务集群,且能够及时发现故障节点。
2.VBI5应用服务,由多个应用服务节点组成应用服务集群,且能够及时发现故障节点。
3.Redis为各节点数据缓存共享提供服务,通过集群实现高可用。
4.数据库(MySQL)服务,通过配置数据库集群实现高可用。
5.磁盘文件,通过配置GlusterFS分布式存储集群实现高可用。
6.操作系统层面(Linux),通过keepalive+haproxy实现虚拟ip和多节点负载均衡。
VBI的高可用部署方案,从实现整个系统的高可用性去设计和考虑,不仅是应用服务本身,还包括了构成一个应用系统的磁盘文件存储、数据缓存服务、数据库服务和操作系统。
我们一起来看下几个关键技术点分别在解决落实什么问题?
Keepalived是一个轻量级的HA(High Available)集群解决方案,使用VRRP组播协议,这是keepalived功能实现的基石,这种协议实现一种网络容错,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性,基于这个协议,keepalived就能通过配置实现master、backup和基于优先级的选举机制。
Keepalived用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用),我们通过它来实现虚拟ip(VIP,可漂移),主服务器宕机备服务器接管的过程,客户端感知不到,始终通过这个VIP进行访问。
HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
数智云图VBI的高可用方案中,使用HAProxy实现客户端访问负载均衡,配合keepalived实现故障自动转移。原理是检测机器上HAProxy进程是否启动,如果检测失败,就会降低这台机器上优先级,触发重新选举主机,会把虚拟ip漂移到优先级最高的机器上,实现多台机器负载均衡。
高可用集群部署方案下,服务一定是分布式的,处在不同的机器上,于是我们需要考虑如何解决文件内容同步的问题。
我们发现了GlusterFS,它是一个开源的分布式文件系统,支持解决网络存储、联合存储(融合多个节点上的存储空间)、冗余备份、大文件的负载均衡(分块)等问题,需要单独的磁盘/磁盘分区来配置。
如高可用部署预备的是3台机器,那么在3台机器上都安装并启动GlusterFS服务,配置挂载磁盘目录后(如方案部署图所示,将glustefs的文件共享路径设置为/mnt/gluster1),任何一台机器的写文件操作,都会在三台机器上实时同步,这个目录就会作为VBI系统存放共享文件资源的目录(创建分布式复制卷)。
高可用部署方案落地后,我们还不断追求简易实施。于是加入了ansible,在进行vbi服务的部署和运维时,我们采用ansible组件,将原本需要反复操作的配置工作自动化,只需在主控端部署Ansible环境,被控端无需做任何操作。
通过设置多台机器之间的ssh互信(将本机的ssh秘钥用ssh-copy-id将公钥复制到远程机器中),实现Ansible与客户机并行通信,更快地运行自动化任务。
硬件故障是常态,与常态作持久战的方式就是面对故障并提供故障下服务仍然可用、数据依然完好保存的解决方案,即冗余备份、失效转移。
数智云图VBI的高可用方案,已经在多个项目上成功运用,实现了客户想要的:通过一组负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备检测到某个服务器不可用时,随即将客户端请求分发到集群中其他服务器上,保持服务可用。
不断发展的用户量和丰富的业务形态成就了产品,所以业务在促使并推动技术发展,同样的,技术的探索和革新也在驱动业务的拓展,反哺着业务,毕竟最好的产品就是当下解决了客户需求的产品。
注:本文作者为(恒实研究院-研发中心-吕薪宇)原创,欢迎大家阅读转发!
标签: