对于用户量较大的系统以及系统稳定性要求极高的企业,每一次计划外的系统停机都是严重事故。想要降低计划外系统停机的概率,有两个关键动作,一是执行计划内维护来及时更新硬件或者软件,另外一个有效的动作就是搭建一套高可用系统来降低系统意外停机的概率。
随着企业用户对集群方案需求的多样性提升、系统环境的复杂度增加,为了进一步满足企业用户的需求,帆软全新web集群方案就显得很重要。截止今天已经有140余家帆软客户选择使用web集群方案来提升系统的高可用性。
既然上面提到我们可以满足客户多样性、复杂性的需求,今天就给大家介绍一下如何选择集群方案,来量身打造一套适合企业的高可用性系统。
什么是集群和分布式?
想要深入了解一个东西,概念和基础知识很重要,我给你用大白话讲明白。
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 ... 厨师和配菜师的关系是分布式。
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群。
- 集群:多个人在一起作同样的事
- 分布式 :多个人在一起作不同的事
正式介绍之前,先说一点基础知识:帆软的web集群架构负载均衡+状态服务器+文件服务器/节点间同步+外置数据库,支持的组件比较多样化,我们可以针对不同场景进行选择和搭配。
第一步:选择操作系统
帆软web集群方案对Windows操作系统、Linux操作系统均能支持,如果企业还在考虑选择什么样的操作系统,这里推荐大家选择Linux操作系统,有两个关键:性能和稳定性。
- Linux系统处理多线程比Windows要好的多,而且不像Windows系统必备图形化操作界面,因此占用资源会少一些,性能也更好;
- Linux系统稳定性很好,大部分硬件和配置更新无需重启;相对Windows系统,宕机机率更低,常常一年都不用关机;
但是影响我们最终哪种系统的因素,还有一个最关键的点——运维能力,如果公司不具备Linux系统的运维能力,只能选择Windows系统了。
第二步:选择负载均衡
负载均衡作为集群的入口,起到请求分发和节点健康检查的作用。不管是软件负载均衡,还是硬件负载均衡,核心作用都是一样的。
硬件负载均衡稳定,性能也较好,但是采购和维护成本都比较高。软件负载均衡性价比高,像我们常用的Nginx、Traefik都是开源免费的,许多超大型的企业也在使用,可用性得到了有效的验证。
帆软官方验证过的软件负载均衡有两种:Treafik和Nginx,Linux系统推荐选用Nginx作为负载均衡,Windows系统推荐选用Treafik。如果希望负载均衡层面也具备高可用性,避免单点故障,可以再做一个Keepalived+Nginx方案,确保一个Nginx服务宕机或异常后,有备用的Nginx服务可以接手。
第三步:选择Redis方案
帆软集群方案里,状态服务器是用Redis实现的,常用的Redis方案有Redis单机、Redis集群、Redis哨兵三种。Redis单机方案简单易部署,运维成本低。但是如果希望Redis服务也达到高可用性,就需要选择Redis集群或者Redis哨兵方案了。
Redis集群是官方推荐方案,既能够保证Redis服务的高可用性,又因为数据是分区存储在不同的主节点上,可以大幅度提升Redis服务的性能支撑。不足之处就是运维和资源成本相对Redis单机要高一些。
Redis哨兵模式是通过哨兵节点来实现自动化监控Redis主节点健康状态,并提供故障恢复功能。最常用的Redis哨兵方案为1主2从3哨兵,能够做到较好的高可用。缺点是不能支持高并发,能提供写入功能的也就只有主节点。
注:FineReport和FineBI产品需要安装Redis哨兵插件来对接Redis哨兵服务,插件还在测试阶段,预计2020年2月份正式上线。
第四步:选择文件一致性方案
集群一致性里很关键的点就是文件一致性,帆软提供了多种方案来保障节点间资源文件的一致性。我们可以基于运维能力,实际场景来进行选择。
- 节点间同步
节点间同步是保障节点间文件一致性的最简方案。无须开启文件服务器,无须做任何配置即可使用。而且各节点均存储文件,具备高可用性。不过节点间同步方案建议仅在两节点时选用,因为当节点增多时,节点间通信和同步效率会逐渐变低。
- 文件服务器
当使用文件服务器时,各个节点都从同一个文件服务器读取资源文件,不涉及到节点间同步,因此各个节点读取的资源文件永远会保持一致性,节点数较多的场景下建议使用文件服务器。常用的几种文件服务器:FTP、SFTP、HDFS、NAS、NFS。
第五步:选择缓存模式
2019年12月更新的jar包里增加了缓存模式,当我们开启集群时,可以选择主动缓存、被动缓存、关闭缓存。主动缓存就是直接缓存所有资源文件,被动缓存是对访问到的资源文件进行缓存,开启缓存可以提高文件读写的性能。
而且配合文件服务器使用时,可以提升集群的高可用性,因为当文件服务器宕机时,系统可以继续从缓存文件中读取资源。
第六步:选择外置数据库
外置数据库在集群方案里也是很关键的点,由于各个节点均使用同一个外置数据库,因此节点间的配置可以保持一致性。FineReport和FineBI对常用的数据库都可以支持,包括MySQL、SqlServer、Oracle、DB2等。
若公司已有数据库服务,数据库版本符合帆软的要求则可直接使用,如果想要保证数据库的高可用性,还可以采用主从的数据库部署方案。
读完上面的内容,相信你已经知道了如何选择一套符合自己企业的集群方案了。不过值得说明的是,世上没有100%高可用的方案,不过我们通过选用完备的高可用方案,加上对系统定期运维检查和更新,是可以让系统的高可用性尽可能地接近100%。