在企业应用中,一般单个计算机的配置是有限的,而企业应用又是高并发的需求,这个时候会经过计算机集群的方式来提升并发数,从而提升总体应用服务的性能。集群是将多台计算机做为一个总体来提供相关应用的服务。FineBI支持多计算机服务的集群部署,经过集群部署利用有限的计算机资源来有效提升总体应用的并发性能。本文主要介绍总体FineBI集群的思路。
FineBI采用负载均衡集群的模式,将多台服务器建立为一个集群服务器。这里碰到这几个问题:1)web工程的存储问题:FineBI在集群中,因为自身的问题须要多台服务器读取同一个web工程。所以要实现web工程分享。2)系统数据一致性:在FineBI的运行过程当中,存在读写的操做,同时有部分的数据的配置文件要写入数据库。须要保证集群的状况下,系统数据的一致性。3)负载均衡:一方面经过负载均衡来处理session的问题,另外一方面达成负载均衡的集群环境,使用代理服务器能够将请求转发给集群内部的服务器,能够将负载均衡和代理服务器的高速缓存技术结合在一块儿,提供有益的性能。4)FS平台集群:如FineBI使用FS平台,则FS平台的各类配置也须要进行集群配置。
以下图是一个FineBI进去的架构的案例示意图,这种方式经过NFS文件共享来处理web工程。mysql
Web工程存储问题
Web工程的存储,咱们要解决的是多个服务器保证读取同一个web工程。咱们能够经过ceph作到多块物理硬盘组件一块逻辑硬盘,从而实现全部节点都是在访问同一地址;也能够经过linux自己带有的nfs共享文件服务来达成访问同一web工程。不管使用哪种方式,咱们要保证:
1)访问同一web工程
2)存储地址是一致的
由于同一个web工程下,要求cube的存储地址是一致的,所以要求cube存储地址必定要同样。
而真正使用的时候,ceph的实现须要至少三台计算机来实现,而实际企业应用中,比较少使用三台;而nfs都可以且是linux自己的,所以使用“nfs”方案。
系统数据配置
单节点的状况下,利用缓存和经过操做系统的文件系统来保存数据的方式,在集群模式下再也不合适。主要缘由在于数据的一致性问题,多个节点可能进行同时读写,更改系统数据,最终势必会形成总体数据不一致。最好的解决方案是系统配置数据所有交给MySQL等关系型数据库来管理。但因为这样工程量好大,更主要的缘由为许多代码缺乏维护,贸然更改可能带来意想不到的bug。因而咱们采用一种折中的作法。在集群中选出一台几点做为主节点,简称M。其他节点担当子节点,简称S。当S上全部与更改系统配置相关的操做,所有发送到M上进行处理。M负责来更改系统状态,维护整个系统到底一致的状态。S节点放弃所有的缓存数据,读取状态的时候,再也不经过读取自身数据,而是经过向M发送读取请求,得到M上的数据。M节点自身能够存在缓存数据。其余数据S节点与M节点时等同的,不存在从属关系。linux
所以按上述起因咱们提供以下解决方案:
1)数据库:原web工程中存在finedb的配置信息转存到mysql数据库中。由于finedb数据库只能有一个链接,没法多节点同时读取,而mysql数据库则不存在。Logdb也需迁移;
2)主子节点:咱们使用主子节点的方式来配置集群,系统数据的更改均在主节点上进行,子节点只读取主节点上的数据;
3)Zookeeper:为了保证读写状况下,主子节点保证数据一致性,还须要zookeeper进行通讯,充当文件锁的功能。
负载均衡
在FineBI的集群环境中,咱们可使用任何支持负载均衡的服务器来完成轮发的任务,并保证session粘滞。此处咱们使用的是nginx反向代理,使用IP标识轮发,保证同一个用户在同一个session。(在一个服务器一个节点的状况下,同一个IP就保证session粘滞)。
FS平台集群
使用FS平台集群插件,将FS平台配置可以知足集群需求。在FS平台集群中,FS平台的全部操做都是发到主节点上来操做;子节点只是做计算服务器。nginx