网站首页 > 技术教程 正文
文章来源:思快奇(微信公众号)
?
背景
最近由于监管合规之反洗钱要求,上线了OCR身份证识别系统,但是供应商提供的架构方案中有单点故障的不完美之处,虽然以现有的交易规模和业务模式来讲,单套服务具备承接业务峰值的能力,但是作为集群服务和高可用遍地的互联网时代,高效的架构不仅可以避免单点故障(不会出现某个服务或者某台服务器故障导致整个应用不可使用),还可以提高系统运维质量,确保服务的高可用(High Availability)。
负载均衡
说到高可用,就要先说说负载均衡。常见的互联网架构最外面的F5就是典型的负载均衡处理设备。负载均衡器是数据中心的切入点,处于后续一切服务的关键路径。这部分的应用也很多,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不多,访问量不大,也可以用DNS轮询;大型网站或者重要的服务,可以考虑利用LVS或者商用F5设备。一般四层负载使用LVS软件或F5硬件实现,七层负载使用nginx实现,至于网络四层负载和七层负载的区别以及nginx、LVS和F5等的区别有兴趣的可以研究下。下图便是经典的负载实现架构:
高可用
回到高可用,我们选择了Keepalived,其期初是专为LVS负载均衡软件设计的,用来管理并监控LVS系统各个服务节点的状态,后来加入了可以实现高可用的VRRP功能。因此Keepalived除了能管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、Mysql等)的高可用解决方案软件。Keepalived的作用是检测服务器的状态(注意是服务器层面不是应用层面),如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。它能够保证当个别节点宕机时,整个网络可以不间断的运行。
一般来讲,直接在需要实现高可用的服务器中部署Keepalived即可,但是本次的OCR服务是C/S实现的Windows服务,而keepalived是linux的专有软件,所以必须在OCR服务之前架设高可用转发服务,我们选择了nginx的stream转发模块来完整这个处理,并且将原来的一路OCR服务分成多路,通过NAS盘共享存储和nginx负载均衡来达到集群效果。从理论值来做一个架构优化后的对比,假设原单路OCR处理能力是100并发,现在因一台nginx的最大并发量达50000,所以并发限制在分了N路负载决定,处理能力提升N倍,且不会有单点故障(之前的日志分析平台ELK架构中也可以引入改HA模式)。
脑裂问题
高可用一般有一个数据安全的隐患就是脑裂问题。在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果,比如共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,其用IP组播的方式(默认组播地址: 224.0.0.18), 实现服务节点间的通信,定期向服务器群中的服务器发送一个ICMP的数据包(既Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效, 通过一种竞选机制来将路由任务交给某台VRRP路由器. 工作时主节点发送VRRP协议报文, 备节点接收报文, 若一段时间(默认3个报文发送时间)备节点接收不到主节点发送的报文, 就会启动接管程序接管主节点的资源. 备节点可以有多个, 通过优先级竞选。从原理上也可以看出VRRP协议出现的目的就是为了解决静态路由单点故障问题。
本文暂时没有评论,来添加一个吧(●'◡'●)