APP下载

基于农业物联网的数据库集群系统优化设计

2022-01-20尹向东杨梦瑶

湖南科技学院学报 2021年5期
关键词:集群服务器联网

尹向东 王 娜 杨梦瑶

基于农业物联网的数据库集群系统优化设计

尹向东a王 娜b杨梦瑶a

(湖南科技学院 a.信息工程学院;b.传媒学院,湖南 永州 425199)

设计一个适用于农业物联网管理系统的数据库集群系统优化方法,通过对实际农业生产环境中高访问量、高峰值的应用特征分析,负载均衡模块通过采用LVS算法来实现流量分发,代理模块采用MyCat中间件实现写读分离以及Keepalived实现高可用保障服务安全稳定运行,最后数据库服务器集群通过使用GTID数据复制形式来保障数据的一致性。通过测试表明,系统优化后性能与稳定性都得到了提高。

农业物联网;数据库集群;负载均衡

随着物联网技术的发展,数据采集量呈现指数级增长,这些数据不断将数据库存储容量逼至上限,传统的数据库解决方案扩展性不够高、弹性伸缩不足、硬件成本颇高的问题逐渐凸显出来[1]。在实际农业物联网环境中数据读写请求比例相差较大,为解决数据流量分发的问题,数据库集群技术顺势而生。

现在国内许多行业都开发了有自身行业背景的数据库集群技术,比较知名的有奇虎360的Atlas数据库集群技术、华为的DDM数据库集群技术等。因为其特殊的行业特色,其应用范围受到很多限制。而国外的Oracle开发的MySQL集群中间件虽然应用很广,但是价格比较昂贵[1],在这种背景下,MyCat应运而生,国内很多用户使用MyCat,受到广大开源数据库集群用户青睐。但是因为MyCat的开发时间不长,存在许多需要改进和优化的地方。总的来说国内数据库集群技术的研究正处于发展阶段,在农业物联网领域可供研究和探索的空间还很大。

在数据库集群中选用合理的负载均衡算法非常重要,Polepally等[2]通过选择各项任务的关键参数,使用约束度量的方法实现集群负载均衡。王关政[3]使用采集集群中后台服务器负载评价标准的方法,实现了服务器自定义动态权值负载均衡。朱莉[4]提出一种多模式融合服务器集群架构动态调整下负载均衡的同步方法。申泽星等[5]建立了一类基于动态调节的闭环负载分配策略。这些算法各有各的优势与不足,与特定业务场景结合的程度不是很好。

依据农业物联网管理系统的业务场景,分散在广大区域的传感器采集到海量数据,经过汇总集中后由代理节点统一发送到对应服务器,这时候就经常会出现大规模写入数据库集群的场景,对写性能要求较高,而从服务器读取数据的场景比写入操作就要少很多。用MyCat中间件技术实现数据写读分离,选择合理的负载均衡算法,将数据压力分散存储到各节点,设计实现一种优化的、高可用性数据库集群系统是很有研究价值的。

1 关键技术分析

1.1 LVS负载均衡

负载均衡方案要根据具体的使用场景、业务环境来选取,该方案能够支持3种算法:服务器集群加权轮询算法;集群最少服务器连接数算法;缓存集群中局部最少链接算法。

1)服务器集群加权轮询算法

加权轮询给每台服务器附加一定程度上的权重算法,可以依据服务器节点处理能力高低来选择合适的权重值。

2)集群最少服务器连接数算法

根据服务器当前活跃连接数,动态选取当前状况下连接数最少的服务器来响应客户端请求并合理分发到服务器上,调度服务器可以依据真实服务器负载情况动态调整其权值。

3)缓存集群中局部最少链接算法

该算法是针对请求报文的目标地址的调度请求,由于在缓存集群中,客户请求报文的目标IP地址是变化的,所以目前主要用于缓存集群。

现在市场上使用最为广泛的负载均衡方案包括HAproxy、Nginx和LVS,其中LVS(linux virtual server)是一种开源的负载均衡方案,除了能支持上述三种算法外,另外还支持近十种负载均衡算法,采用Keepalived+LVS技术使得自身具有热备方案,具有良好的可靠性、可扩展性和可操作性[6]。

通过对农业物联网实际开发环境、实际业务使用对象规模以及软件会话并发能力等方面的需求分析,本文决定采用LVS来实现负载均衡。

1.2 Keepalived技术

为了保障数据的可靠稳定,就要运用到高可用技术。其中业务切换是高可用软件能够保障系统安全稳定运行的核心技术,即如果集群中节点发生故障,其备用节点将在几秒内接管它的职责,对外提供透明服务,从而降低由节点性能故障等所导致的损失。

Keepalived使用VRRP协议方式,与LVS完美兼容,是用于实现LVS服务高可用方案。除了可以对服务器进行健康状况检测和故障隔离功能之外,还具有高可用集群的功能。其中健康检测是Keepalived的核心功能之一,就是利用TCP三次握手、HTTP请求、ICMP请求等方式对后端真实服务器进行检测,而故障节点自动切换主要应用于2个高可用节点之上,且配置了主备模式的负载均衡服务器。通过VRRP协议,当master出现问题时,master心跳检测不到,此时就会把流量分发到Slave节点继续提供相应业务,保障服务的安全稳定运行。

1.3 GTID复制协议

数据库集群比较常用的两种体系结构为共享存储结构、无共享存储结构。共享存储结构就是让集群中所有节点共同使用同一数据资源,从根源上避免数据不一致引起的问题。而对于没有使用共享存储的集群来说,确保数据的一致性就成了整个集群的关键要素。从这一关键要素就引出了数据复制技术,通过各种数据复制技术来确保集群中各节点之间数据一致性。

GTID是MySQL5.6后出现的新的复制协议,分为UUID、TID两个部分。即以事务为基础,通过在主服务器上提交事务或者slave上接收master二进制日志,就可精准定位到某个事务。当复制开始执行时,GTID和事务都会一同保存到二进制日志中,有效保证数据的一致性。

2 数据库集群系统架构优化设计

2.1 集群优化设计关键要素

为了对数据库集群进行优化设计,首要分析影响集群性能的几个关键要素。

第一,集群的可用性,它要求集群稳定可靠、及时响应,即使集群中某个节点出现故障,集群仍可对外提供服务。

第二,集群需要提供统一的系统镜像。因为用户并不关心系统是集群系统还是单机系统,为了有效避免单节点故障,就需要用到集群。

第三,负载均衡。负载均衡是根据一定的调度策略,将不同强度的客户请求分配到性能不等的节点上。节点负载力度会与其本身的性能水平成正相关的关系。

第四,数据的复制。集群系统中为了保证数据冗余性,不同节点之间需要进行数据复制。只有当集群中多个节点之间数据一致时,才能为负载分发提供基础条件,进而为用户提供服务。

2.2 数据库集群优化

一般传统数据库架构分为三层,最上层是客户层,第二层是代理层,最底层是数据库集群。代理层是起到对外提供单一的集群镜像入口的作用,对外接受来自客户的请求,之后再将这些请求分发给数据库集群,数据库集群层通过数据同步技术实现集群节点间数据一致。本文在这个基础架构之上对其进行优化,使其更加适应实际复杂的农业物联网生产环境。优化后的MySQL数据库集群系统架构如图1所示。

图1 优化后的MySQL数据库集群系统架构

首先,将集群中数据库节点分为只读节点和只写节点,再利用数据库中间件实现数据库的写读分离功能。在大多数业务情况统计下,数据库读写的比例大概是1:9,也就是说写的比例远远大于读,在写读都同时进行的情况下,数据库面临着很大的压力,甚至会出现宕机问题,导致数据丢失。所以为了减轻写服务器压力,在整个数据库集群中加入写读分离是很有必要的。

其次,在传统的数据库集群架构中,代理是客户端与数据库集群连接的直接桥梁。如果代理服务器宕机将会直接导致客户访问不到集群,这是最不能接受的缺陷。Keepalived工作时,一台为主服务器,另一台为备服务器,但是对外表现为一个Virtual IP。主节点会不间断向备节点发送心跳监测消息让备节点认为主节点还处于运行状态。当备节点检测不到来自主节点的心跳监测消息时,就会调用自身的接管程序,接管主节点的IP资源和服务,保障系统对外提供稳定的服务。

再次,在MySQL数据库层上对系统进行优化,采用基于GTID的复制方法与主从复制的结构来实现数据一致性。

3 MySQL数据库集群的实现

3.1 服务器规划

对优化后的MySQL数据库集群的服务器关键参数进行规划,具体数值列于表1。

表1 优化后的MySQL数据库集群服务器规划表

3.2 LVS负载实现过程

目前市场上使用占比较多的是Keepalived和Heartbeat。两者的主要区别在于Keepalived的目的是模拟路由器的双机,而Heartbeat的目的是用户服务的双机。针对农业物联网的业务环境,采用Keepalived的解决方案,可以与LVS配合协同工作,使用LVS的默认工作模式即DR模式来实现[6]。具体实现过程主要配置如下:

1)LVS安装

//调度器上直接yum安装

#yum install -y ipvsadm

2)配置过程

//调度器上配置脚本

# vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash

echo 1> /proc/sys/net/ipv4/ip_forward

ipv=/sbin/ipvsadm

vip=192.168.209.127

//服务器上配置脚本

# vim /usr/local/sbin/lvs_dr_rs.sh

#! /bin/bash

vip=192.168.209.127

3.3 MySQL的安装过程

由于MyCat是由Java语言编写,所以在安装MyCat前需要安装jdk的依赖环境且需确保Java环境为jdk1.7以上,本文采用自定义安装的方式:

#cd /usr/local/mysql5.6

#cmake -DMYSQL_USER=mysql

#make&&make install

3.4 数据复制模块

基于 GTID 的复制方式是MySQL5.6版本之后出现的功能,通过 GTID可以确保每个在主库上提交的事务在集群中拥有唯一可以识别的id。在原有复制手段中,从库需告知主库偏移量的位置,而且需要人为进行确认,若偏移量指定错误会造成数据遗漏。而借助GTID,MySQL的从库可以在无需

人为指定偏移量的情况下,主动找到主库上的正确复制位置,这就极大程度上减少了人为设置复制位置发生误操作的风险也可以忽略已经执行过的事务。本文采用Linux搭建一主一从的服务器架构模型[7],具体实现过程的关键代码如下:

//配置主从服务器my.cnf文件

log-bin=/data/mysqlLog/logs/mysql-bin binlog_format = row

//在主数据库上创建复制用户

mysql> max_binlog_size= 128M

binlog_cache_size= 2M

expire-logs-days=5

log-slave-updates=true

//启动从数据库上的复制线程

mysql>start slave

本文采用了sysbench来进行性能测试,测试结果可知:通过直接连接与优化连接相比较,优化后的Tps、Qps和平均耗时都减少了6%左右,表明服务器集群通过优化连接时,系统更稳定、性能更好。

4 结 语

本文详细介绍了适用于农业物联网的数据库集群系统的设计与优化,主要分为三个部分来进行,分别是代理层、负载均衡模块、数据层。代理层使用写读分离和双机热备技术;负载均衡模块采用LVS算法进行调度,将请求依据调度算法分发给服务器,并结合Keepalived方法实现高可用性;通过GTID的复制方法实现数据的一致性。通过系统实现和测试,发现优化系统有更好的性能,稳定性也更高。

[1]宣振国.基于Mysql的数据库集群设计与实现[D].北京:北京邮电大学,2013.

[2]POLEPALLY V, CHATRAPATI K S. Dragonfly Optimization and Constraint Measure-based Load Balancing in Cloud Computing[J]. Cluster Computing, 2019, 22(1):1099-1111.

[3]王关政.基于Tengine的服务器集群动态均衡算法的研究与实现[D].广州:华南理工大学,2018.

[4]朱莉.云计算服务器集群的时间同步方法[J].指挥信息系统与技术,2018,9(4):63-67.

[5]申泽星,彭云建,岳喜顺.集群服务器在混合请求下的负载均衡优化算法[J].计算机工程与应用,2018,54(18): 99-104,241.

[6]李伟,卢捷,马军.基于linux的高可用负载均衡集群系统的应用[J].河北联合大学学报(自然科学版),2013,35(2): 73-77.

[7]高俊峰.高性能Linux服务器构建实战:运维监控、性能调优与集群应用[M].北京:机械工业出版社,2012:442-445.

TP392

A

1673-2219(2021)05-0059-03

2021-05-18

2020年度湖南科技学院科学研究项目(20XKY057);永州市2019年指导性科技计划项目(2019-yzkj-10);湖南省2019年大学生创新创业大学生能力培养项目(湘科人〔2019〕9号);2017年湖南省科技厅重点研发项目(2017NK2391)。

尹向东(1976-),男,湖南永州人,教授,研究方向为物联网及大数据技术。

(责任编校:宫彦军)

猜你喜欢

集群服务器联网
“身联网”等五则
《物联网技术》简介
《物联网技术》简介
功能性新材料产业集群加速形成
简述传感器在物联网中的应用
培育世界级汽车产业集群
2018年全球服务器市场将保持温和增长
勤快又呆萌的集群机器人
用独立服务器的站长注意了
定位中高端 惠普8路服务器重装上阵