基于Java应用的高并发高可用集群服务器的设计与实现
2019-11-16王瑛
文/王瑛
在互联网越来越发达的今天,搭建一个单位或企业的服务器势在必行。经调研,湖北大学知行学院官网使用的是windows(Microsoft-IIS)+linux(apache)。其中心服务器的地址及配置情况如表1所示。
1 需求分析
采用软件方式搭建具有高可用、高并发的服务器集群,首先要选取基础环境、搭建主体架构,然后安装组件、完善架构、安装辅助软件。本文采用当前经典的lnmp架构,用虚拟技术模拟多台计算机服务器。
测试程序:JAVA的测试程序是做的一个简易的图书管理系统,具备分页功能,连接到后台数据库保存数据。由于测试软件的数据库设计较为简单,只需版本兼容,不再详细说明。
2 主体架构
2.1 组件分析
Nginx:lnmp和lamp架构的不同在于组件分别为Nginx和apache。apache稳定性强,bug少,模块较多,动态处理有优势;nginx配置简洁、抗并发强、可在运行时升级其版本,具备反向代理功能,适合作为前端响应服务器。由于测试软件较为简单,故推崇轻量级的nginx架构,本文使用nginx1.8.1版本。
Lvs:Lvs(Linux Virtual Server)是虚拟服务器集群系统。Lvs采用直接连接模式,在收到网关代理服务器发来的请求后不经过网关直接将答复发给客户。客户通过lvs连接后台服务器,而后端服务器网络使用同一虚拟IP,故可将lvs用做调度器,采用轮叫调度模式,从而提高并发能力。
Web服务有多个,所以不需要担心单节点故障。
Mysql:为了达到高可用并保证数据同步,启用数据库之前,设置好双主模式,确定两台mysql服务器互信后才能开始使用,否则会一直报错。此外,数据要定期备份以保证一定容灾能力。
Php:php服务一般都不会宕掉,本课题不做讨论。
Keepalived:为了保证接受请求的网关长期在线,必须用keepalived服务提供支持,让网关上的lvs服务保证在其中一个宕掉之后,能迅速启用备用服务器。
Zabbix:由zabbix server与 zabbix agent可选组件两个部分构成。zabbix server组织Zabbix服务的配置,通过zabbix agent、ping、端口监视等方法提供对服务器的硬盘、内存、cpu、网络状况、服务运行状况进行监视,收集数据等,是可视化监控软件。
Tomcat:与nginx整合一起使用,为了扩展更多功能的服务,所以搭建tomcat环境。
图1:主体架构图
2.2 基础环境
LINUX系统选择图形界面较为友好的centos7.0。基础环境中要考虑 nat、host、bridge三种网络环境的配置。其中nat相当于在局域网,bridge是桥接模式,相当于直接连到互联网,host模式是仅主机模式,相当于断网。另外,还要考虑服务器之间的安全协议、安全模式和需要安装的组件。
2.3 高可用、高并发
高可用是保证服务长期在线,高并发是保证在并发量很大的时候服务稳定运行。高可用软件有Keepalived,RHCS,Pacemaker,rose(windows),PowerHA(AIX)。高可用软件就是以一种心跳机制监控服务是否在线,若不在线则启用备用服务器,并且这个转换间隔很短,让人感觉服务器没有宕机过一样。高并发软件有Lvs,Nginx/Tengine,Haproxy等等,其本质是做一个代理,将请求转发到真实服务器,而其本身不提供服务,其中Lvs和nginx配置比较简单。
3 总体设计
服务器集群采用linux+nginx+mysql+php架构,具有高并发能力。同时,使用lvs/nginx+keepalived做高可用,整合tomcat容器,采用辅助软件确保多个数据库之间的数据同步和多个Web服务器之间的网页同步,最后用监控软件zabbix监控整体服务器的运行情况。如图1所示。
4 结果与分析
4.1 性能测试
本文使用lvs/nginx+keepalived组合软件实现服务器的高并发。测试时,同时打开三台虚拟机,编辑三个不同的网页,然后使用同一个虚拟IP访问服务器IP,测试结果是每次访问得到的页面均不一样;关闭其中一个虚拟机,再次访问虚拟IP,可以看到除了关闭的那台服务器,其他两台服务器的页面显示正常;再次打开将刚刚关闭的服务器,共享文件夹启动测试程序,分别访问三台服务器和虚拟IP,结果看到是相同页面;最后关闭1-2台服务器,再访问虚拟IP,同样可以得到测试程序。
4.2 分析
分析一:每台服务器基础环境配置应相同,虚拟硬件配置master服务器要尽可能高一点,IP在同一个网段。
分析二:运维工具xshell性能良好,在部署环境时候可以不用进入VMware,直接进行工作。
分析三:在搭建lnmp架构时候要注意各个组件的版本兼容问题。多台nginx服务器之间用同一个共享文件夹,Web网页才有同步更新效果。若某一台mysql服务器宕机,不同步数据直接启动,会导致服务器故障,需要用其他技术确保数据库的数据长期同步。
分析四:使用keepalived+lvs服务,需要设置好优先级,多台服务器优先级相同会导致服务器全部故障。
分析五:git服务在数据备份时会产生大量数据,所以除了重要数据所有服务器均要备份外,其余数据分散式备份。
附录:
Linux系统使用的centos7.0,mysql用的5.7,jdk使用1.7.1,nginx用的1.8.1,php用5.3.30版本,keepalived+lvs使用yum自带的安装源,源包为CentOS-7-x86_64-DVD-1611,为了方便管理使用xshell运维工具,然后本课题其余的组件都是用的yum自带安装源。