在线学习网站数据库集群技术设计与实现
2019-10-21王权
摘 要:如今信息技术高速发展,信息数据呈爆炸式增长,传统的单点数据库架构已无法满足业务需要,数据库集群技术应运而生。集群模型设计的重难点在于系统的负载均衡、数据一致性和可靠性。“江苏学习在线”网站建设根据实际需求及数据量测算采用了一种高可用的数据库集群模型。
关键词:集群;负载均衡;可靠性;一致性
中图分类号:TP311.13 文献标识码:A 文章编号:2096-4706(2019)20-0100-03
Abstract:In the era of rapid development of information technology and explosive growth of data,traditional database management system has been unable to meet business needs,and database cluster technology emerged as the times require. The key and difficult points of cluster model design are load balancing,data consistency and reliability. According to the actual demand and data measurement,a highly available database cluster model is adopted in the construction of “Jiangsu Learning Online Website”.
Keywords:cluster;load balancing;reliability;consistency
0 引 言
随着各地政府对社区教育工作的投入加大,对社区教育的关注度越来越高,省级社区教育数字化学习平台的建设和各级社区教育在线学习平台互联互通互动也成为一项重要工作。
在建设省级社区教育在线学习平台的过程中,作为终身教育综合服务平台,要考虑到将省域内基础数据不同的异构网站系统进行整合,构建一个具有统一数据标准的数据中心,实现高效的数据交换和共享,为全省居民服务。以“江苏学习在线”网站第三次改版建设为例,在线学习平台既要实现省级门户网站的功能,又要对接全省同类网站数据,为了节约硬件资源,便于数据的集中存储和管理,从提升用户体验和系统性能出发,基于数据的高可用性、安全性和完整性方面考虑,一个高效的数据库集群方案显得尤为重要。
在信息技术高速发展的时代,数据爆炸式增长,数据存储作为中型网站的核心任务之一,单点数据库或单点服务器的运行压力越来越大,在中后期难以正常运行,一旦数据库出现故障,不仅系统服务无法运行,而且海量数据丢失的风险加大,后果严重,于是数据库集群技术应运而生。数据库集群的具体优势在于:使系统性能显著提升、安全性提高、使用灵活性、系统可用性增强和维护更加便捷。
1 数据库集群的工作原理和关键技术
1.1 工作原理
数据库集群是将数据库系统部署在若干个工作节点上,其数据是共享存储的,每个节点对数据都有相同的访问权利,若其中某个单点数据库压力过大或发生故障,其他服务器将正常提供服务,集群控制系统会自动将服务切换至正常节点,以保障整个系统持续正常运转。
1.2 关键技术
1.2.1 负载均衡技术
负载均衡是目前主要的一种计算机网络的部署方法,它的任务是把各种压力负载均衡分配到多个计算资源上,这样使得压力分散到各个节点上,提高了资源利用率,提升了资源吞吐量,减少了系统响应时间,避免负载过大造成系统崩溃等现象。负载均衡主要有以下几类:重定向负载均衡、域名解析负载均衡、反向代理负载均衡、网络层负载均衡、数据链路层负载均衡。
1.2.2 数据同步性技术
数据库集群的架构分类很多,比较常用的是共享存储结构和无共享存储结构。共享存储结构是把共享存储器划分为多个模块,模块分布于各个节点,数据库分散至各个节点,始终读写使用一份数据,使用成本较高,提升了数据的同步性,是目前较受欢迎的一种架构方式;使用无共享存储结构虽然也能保证数据的同步性,但会存在数据读写频率过高的问题,导致系统性能降低,但使用成本相对较低,在适合的业务系统中可以使用。
1.2.3 数据可靠性技术
数据库集群是整个系统部署高效运行的重要保证,集群能够有效地提升系统访问性能,如果集群中某个服务或节点出现故障,集群系统将及时地把出现故障的节点准确高效地切换至其他正常节点,保证系统的正常运行,这就要依靠集群系统的数据可靠性技术。
2 MySQL数据库集群设计
2.1 系统总体架构
本文中数据库集群系统将以“江苏学习在线”网站建设为例,网站基于MySQL数据库技术构建的高可用数据库集群,根据过去两版网站的应用情况和新版网站的实际需求,数据库服务更多针对的是密集读请求,比如用户学习数据的查询读取功能。本例中集群系统在部署负载均衡节点时,忽略各单点数据库的分布和异构,设计一个类似的中间件平台,向各个应用提供相同的数据接口,同时集群系统随时监听集群内各节点的运行状况,并且具有无限扩展功能。该集群系统下的各个节点的数据库是相对独立部署的,虽然有主从之分,但各节点数据可互为副本,保证数据的安全性和冗余性,使系统的性能和可靠性大大提高。
在本例实践中,负载均衡将部署在主节点上,把来自各方的压力进行均衡分配,其他各节点都部署MySQL数据库。各节点的数据相互之间是平等的,部署一个节点为主库,其他部署为从库,这样的关系就需要考虑数据库的读写分离部署,数据的更新操作在主库完成,读写操作由从库负责,大大降低了网络通信压力,提高系统访问性能。根据网站系统的设计和部署,集群系统可分为以下几个模块:应用服务请求模块、负载均衡模块、节点處理模块、数据一致性模块。
2.2 应用服务请求模块
该模块模拟用户对数据库的读写操作请求,对于应用端来说,服务端的内容是明确且固定的,应用服务将SQL语句通过socket请求发送给服务器端上负载均衡模块,再由负载均衡模块把任务请求分配到集群内的各个数据库节点。各模块和各节点之间都是通过网络通信服务来实现的,一般采用应用服务接口通信。
整个过程即是用户端向负载均衡模块发送查询请求,并把查询结果返回给服务端,同时把返回内容设计成标准格式,返回时不再经过中间节点,减少网络通信压力。
发送请求模块:首先采用指数补偿的算法进行连接,如果尝试连接失败,系统进程提示暂停尝试,暂停结束再尝试连接,每尝试一次将增加一次延时,延时时间根据系统具体情况设定。接着使用MySQL的connect()函数连接负载均衡模块,并使用send()函数向数据库节点发送对应的查询请求。
接收返回模块:首先系统使用MySQL的内置函数获得相关主机信息,再通过相关函数取得主机地址的结构列表,进行网络监听服务的初始化。当网络监听服务初始化完成,即可接收到来自节点的查询返回结果。
2.3 负载均衡模块
负载均衡模块的作用是均衡分配来自用户端的压力和请求,先接受用户应用端发送的请求并进行计算,按照负载均衡策略和负载均衡算法将该请求发送至集群内各对应的数据库节点;同时对各节点的运行状态进行实时监控,并及时处理或修复节点故障,将请求切换至正常运行节点;在增加了新节点后,智能分配新加入节点的负载。
负载均衡模块是整个数据库集群系统正常运行的核心,因为需要计算和处理负载均衡算法,具有承上启下和任务分配的作用,对机器性能的要求也非常高。
2.4 节点处理模块
节点处理模块是直接操作与数据库之间的任务,作为服务端的节点处理模块与负载均衡模块通信时,负责接收并提取处理负载均衡模块转发的请求,从socket的数据包里释放出SQL语句和请求端IP地址,然后连接数据库,同时执行SQL语句,最后将SQL语句执行的结果发送给目的请求端。由于这个处理过程要随时打开和关闭数据库的连接,并且系统有不断的请求处理过程,就需要频繁地开关数据库连接,不仅增加系统压力,而且对系统资源也会造成极大的浪费,所以需要利用系统进程池的技术,保持与数据库通信连接。在本系统部署的案例中先调用系统函数initserver()来初始化监听,通过accept()函数接收请求,然后使用info_handle()函数来处理请求,调用MySQL的API程序接口,执行数据查询。
2.5 数据一致性模块
数据一致性模块就是在整个系统集群中承担主数据库角色的节点,该集群中设置分配主/从数据库节点,形成一主多从的数据库架构。主数据库节点主要是接收数据更新请求并执行语句,通过数据一致性模块将更新后的数据同步到从数据库节点,保证数据的一致性。
根据系统的规模、用途和需求的不同,MySQL数据库也需要使用相应的版本,不同的版本在某些用法和语句上略有差别,所以建议主从数据库的MySQL版本一致,或者从库的版本高些。
以“江苏学习在线”网站的数据库配置为例,数据库安装过程省略,配置步骤如下:
(1)登录主数据库服务器,创建从数据库用户。
MySQL>grant replication slave,reload,super on *.* to slave@192.168.5.60 identified by 'slave'; #对应从数据库的ip和名称
(2)修改主數据的MySQL配置文件my.ini或my.cnf。
server-id=10 #设置主数据库的server-id号,各库需区别
log-bin=MySQL-binlog #设置MySQL的日志,最好放在其他硬盘上,保证数据完整性
expire_logs_day=30 #设置MySQL运行日志保存日期,根据具体需求设置
max_binlog_size=2048M #设置MySQL日志文件大小,根据需求设定
(3)重启主数据库的MySQL服务,使设置生效。
#service MySQL restart
(4)查看主数据库状态,获取相关的数据库信息,以便从库连接时使用。
MySQL> show master status:
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB|
| MySQL-bin.000036 | 183 | | |
| row in set(0.00sec)
(5)登录从数据库主机,修改从库的配置文件my.ini或my.cnf。
server-id=60 #根据从库的数量依次配置,设置不同的ID号
slave-skip-errors=all #由于多方面原因导致某些语句在主库正常运行,从库无法运行,因此在配置文件my.cnf里加一句slave-skip-errors=all来忽略所有的SQL语句错误
relay-log=MySQL-relay-bin #配置该文件的作用是存放从库线程从主库端读取的文件信息
关闭从库的binlog,因为在主库已经使用了binlog进行增量备份,从库就不需要了,减少系统消耗。
(6)重启MySQL数据库服务后,在从库服务器登录MySQL,并对从库服务器进行授权(可以先通过MySQL的MySQLdump命令将主数据库备份后恢复到从数据库,保证数据一致)。
MySQL> change master to master_host= '192.168.5.128',master_user='123',master_password= '123',master_log_file='MySQL-bin.000036',master_pos=238;
(7)启动从数据库,进行数据同步。
MySQL> start slave;
(8)检查主从数据同步状态。
MySQL〉 show slave status;
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
如果看到Slave_IO_Running和Slave_SQL_Running的值均为Yes,则主从数据同步正常。
(9)通过Heartbeat搭建双机热备环境,Heartbeat有两种模式,默认只支持两个节点,在本系统集群的部署中采用cib模式,则需要修改以下配置文件:
1)把所有从库节点都加入到配置文件ha.cf中,并在ha.cf最后加上:”crm 1”。
2)然后按以下步骤使用cib.xml文件。
/usr/local/lib64/heartbeat/haresources2cib.py把/usr/local/etc/ha.d/haresources转换为/usr/local/var/lib/ heartbeat/crm/cib.xml
3)最后清空haresources文件。
這样一个主从MySQL数据库集群系统就搭建完毕。
3 结 论
在“江苏学习在线”网站第三次改版建设中,设计MySql数据库集群方案,采用一主三从的分布式数据库结构,增强了横向扩展性,实现了数据的高吞吐量和低延迟性,提升了数据的高可用性,提高了网站访问的效率。
参考文献:
[1] 黄旭.分布式MySQL数据库集群在线监测系统设计与实现 [D].哈尔滨:哈尔滨工业大学,2012.
[2] 陈君芳.高可用集群系统在播出数据库中的实现 [J].视听界(广播电视技术),2013(6):18-20.
[3] 庞辽军,王力,李慧贤.基于集群技术的Linux虚拟服务器 [J].计算机工程与应用,2003,39(14):161-163.
[4] 谢怡,燕彩蓉,彭勤科,等.数据库集群服务器的设计和管理 [J].微电子学与计算机,2003,20(1):1-4.
作者简介:王权(1982-),男,汉族,江苏金坛人,工程师,学士学位,研究方向:教育信息化。