- 1 -
中国科技论文在线
分布式数据库中负载均衡技术的实现
张红旗,任维政**
作者简介:张红旗(1988-),男,研究生,计算机软件研究与应用
通信联系人:任维政(1974-),男,副教授,长期致力于智能交通、车联网、节能减排物联网等领域的关键
技术研究和新产品的开发工作。发表高水平学术论文 30 余篇,申请专利 2 项,发表著作 4 部,获省部级以
上奖项 6 项
(北京邮电大学电子工程学院)
5 摘要:随着互联网的快速发展,用户对于信息获取的正确性、及时性要求越来越高。数据库
系统是数据存储、信息检索的主要手段,是制约 Web 系统性能的瓶颈。随着用户数据的不
断增加,传统的集中式数据库无法满足需求,逐渐向分布式发展。本文介绍了分布式数据库
的研究现状,分析了分布式数据库的结构,数据节点之间数据同步的过程。研究分布式数据
库中常用的事务分配算法,实现负载均衡的原理。最后,在 CentOS 虚拟机上安装多个 MySQL10
数据库,部署 MySQL 分布式系统,验证分布式数据库的功能。
关键词:分布式数据库;并发性;容错性;负载均衡
中图分类号:TP392
The Implement of Load Balancing Technology In 15
Distributed Database
ZHANG Hongqi
1
, REN Weizheng
2
(1. School of Electronic Engineer,Beijing University of Posts and Telecommunications,Beijing
100876;
2. School of Electronic Engineering,Beijing University of Posts and Telecommunications,Beijing 20
100876)
Abstract: With the development of the Internet,users of Web system have higher request for
accuracy and real-time of system is a tool to store and query data,also is the
bottleneck of Web users' data rises,the single database can't meet its desire,so
distributed database paper introduces distribued database system,structure,transfer 25
of transcation and usual algorithm of load balancing. .Last,installs MySQL Cluster and verifying
its function.
Key words: Distributed Database; Concurrency; Fault tolerance; Load Balancing
0 引言 30
随着互联网的飞速发展,Web 系统的用户数量和访问流量不断增加,对于网络服务的
可伸缩性要求也越来越高。数据库(Database)[1,2]是存储数据、管理数据的工具,Web 系统
的数据以数据库文件的形式存储在磁盘上,用户在与 Web 系统交互的过程中会频繁进行数
据库读写、磁盘 I/O 操作,是制约 Web 系统性能的主要瓶颈,也是互联网软件开发中的热
点问题。 35
数据库是一个多用户使用的共享资源,当多个用户并发地存取相同数据时,为了保证数
据的完整性,需要对数据加锁,保证同一时间只有单个事务访操作数据。数据库在处理多事
务时,将所有事务以队列形式存储,先到先处理,同一时刻只处理一个事务,后续事务需要
等待前面所有事务完成才能处理。在 Web 系统用户大量增加时,与网站的交互非常频繁,
数据事务提交增加,响应延迟很大,影响 Web 系统的用户体验,这就是分布式数据库解决 40
的问题。分布式数据库系统(Distributed Data Base System, DDBS)[3]是物理上分布而逻辑上
- 2 -
中国科技论文在线
集中的数据库系统。物理上分布是指分布式数据库中的数据分布在由网络连接起来的、地理
位置分散的不同站点上;逻辑上集中是指个数据库站点之间在逻辑上是一个整体,并由统一
的数据库管理系统进行管理,同时每个节点有独立的数据管理能力。
1 分布式数据库原理 45
分布式数据库结构
图 1 分布式数据库系统结构
Fig. 1 The Structure of Distributed Dadabase System
分布式数据库系统是计算机网络和数据库系统有机结合的产物,物理上分布,数据存储50
在计算机网络的多个节点上;逻辑上是一个整体,有数据库管理系统统一管理;各个节点有
自己的数据处理能力;各个物理机相互协作构成一个有机整体。分布式数据库系统由两部分
组成:分布式数据库(Distributed Data Base,DDB)和分布式数据库管理系统(Distributed Data
Base Management System,DDBMS):DDB 中的数据节点是分布式数据库系统的核心,可以
存储数据、日志,提供各种数据管理服务,2 个以上节点即可实现负载均衡;DDBMS 中的55
管理节点,用于给系统中的其它节点替工配制、管理、仲裁等功能,理论上一台物理机即可
满足需求。应用节点,用于访问分布式数据库系统,为外部应用提供服务,增加应用节点可
- 3 -
中国科技论文在线
以提高 Web 系统的并发访问速度和数据吞吐量。分布式数据库使用了一个专用的基于内存
的存储引擎——NDB 引擎[4],直接从内存读取数据,没有磁盘 I/O 的瓶颈,提高了集群速度。
NDB 存储引擎是分布式的,可以实现整个数据库集群的冗余性及解决单点故障问题。 60
负载均衡
图 2 负载均衡
Fig. 2 Load Balancing
分布式数据系统的负载均衡[5]是指在集群系统的多个计算节点间合理地分配计算任务65
的行为。负载均衡上是提高分布式数据库性能的有效手段,是分布式数据库的核心问题,建
立在现有网络结构上,让多台服务器或多条链路共同承担复杂的计算或 I/O 任务,从而提供
了一种廉价有效的方法来扩展带宽和增加数据吞吐量,加强网络数据处理能力,提高网络的
灵活性和可用性。负载均衡的目标是:提供最短的平均任务响应时间,能够适应变化的负载。
影响负载均衡的主要因素有系统结构、算法和数据分布等。 70
事务处理机制
MySQL 分布式数据库节点采用主从复制[6]来保证组内节点数据的一致性,事务提交分
为两个阶段进行,过程如下:
a) Manage Server 执行事务提交语句时,事务被发送到 mysqld 节点,mysqld 节点开始
准备事务的提交。 75
b) 所有 mysqld 都会准备处理事务,向 Manage Server 发送通知消息,表示是否能够处
理该事物。
c) Manage Server 等待所有 mysqld 节点的通知消息:
如果 Manage Server 收到所有 mysqld 节点的同意消息,会向所有节点发送同意消息,
完成事务提交; 80
如果 Manage Server 收到某一个 mysqld 节点的取消事物提交消息,会所有的节点发
送终止事务的消息。
d) 每个 mysqld 节点等待 Manage Server 的通知消息:
如果节点收到Manage Server提交事务的通知,节点就会完成事务提交,并向Manage
Server 发送事务提交的消息通知; 85
如果节点收到中止事务的通知,会撤销事务并释放占有的资源,并向 Manage Server
发送终止事务的确认通知。
e) 当 Manage Server 收到来自所有 mysqld 节点的确认消息后,会报告事务提交或中止,
- 4 -
中国科技论文在线
然后处理其它事务。
MySQL 集群将所有的索引列都保存在主存中,其他非索引列可以存储在内存中或者通90
过建立表空间存储到磁盘上。如果数据发生改变(insert,update,delete 等),mysql 集群将发生
改变的记录写入重做日志,然后通过检查点定期将数据定入磁盘。为了减少事务丢失,mysql
集群实现延迟写入,在故障发生时完成检查点写入,而不会丢失最后一个检查点。一般单个
数据节点故障不会导致任何数据丢失,因为集群内部采用同步数据复制。
负载分配算法 95
发送者分配算法:首先,发送引入一个阈值 M 将系统中的事务处理节点划分为轻负载节
点和重负载节点,所有当前剩余负载 t>M 的节点称为重负载节点,t<M 的节点称为轻负载
节点。在事务处理一段时间之后,每个节点检查自身是否是重负载节点,如果是重负载节点,
就试图向系统中的轻负载节点发送事务。设该节点的负载为 Lp,系统中还有 K 个节点,其
负载分别为 L1,…,Lk,则系统的平均负载 Lavg 为: 100
为了达到负载均衡,应求得重负载节点应该传递其它节点的负载量 mk,为了避免负载被
迁移到系统中重负载节点上,引入 hk,如果 Lavg<Li,则 hk=0,那么 mk 为:
最后,该节点就可以按照 mk 向系统中的其它节点发送事务,保证负载均衡。 105
权重轮询分配算法:根据分布式系统中每台服务器的事务处理能力,为其分配不同的权
重值,a1,a2,…,an 分别表示系统中各个节点的负载能力;k1,k2,…,kn 表示系统中各
个节点的负载能力权重值;L 表示分布式数据库系统的平均负载值,则 L 为:
分布式数据库系统中的事务分配算法不局限于某一个算法,而是根据系统的不同部署情110
况对算法进行选择或组合,根据系统负载分配情况进行实时调整,这样可以提高系统中每个
数据库的性能和可用性。
2 MySQL 分布式数据库测试
节点部署
本文将在虚拟操作系统 CentOS 上搭建一个简单的 MySQL 分布式数据库[7],验证分布115
式数据库的相关功能,集群内各节点信息如下:
表 1 集群节点信息
Tab. 1 Information of Cluster Nodes
名称 Name IP
管理节点 Manage Server
数据节点 1 Ndbd1
数据节点 2 Ndbd2
- 5 -
中国科技论文在线
SQL 节点 1 Mysqld1
SQL 节点 2 Mysqld2
在各个节点服务器 CentOS 上安装 MySQL Cluster,并关闭 iptables 防火墙(或者开放数
据库使用的 3306 端口),Shell 命令如下: 120
tar –xvzf ;
service iptables stop;
配置管理节点(),在安转目录下创建配置文件 并加入各个节
点的信息:
[ndb_mgmd] 125
NodeId=1
hostname=
datadir=/var/lib/mysql-cluster
开放 MySQL Cluster 服务端程序(ndb_mgmd)和监听客户端程序(ndb_mgm),在 Shell
中运行以下命令: 130
chmod +x ndb_mgm*
配置数据节点(、)和 SQL 节点(、
),添加 mysql 用户和组,在 Shell 中运行以下命令:
groupadd mysql
useradd –g mysql mysql 135
在 mysql 的安装目录下创建配置文件 ,数据节点配置文件内容如下:
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/ 140
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/var/log/
pid-file=/var/run/mysqld/ 145
[mysql_cluster]
ndb-connectstring=
SQL 节点配置文件内容如下:
[client]
socket=/usr/local/mysql/sock/ 150
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/
[mysql_cluster] 155
ndb-connectstring=
功能测试
数据同步测试
在 SQL 节点 1()上创建数据库,在 Shell 中运行以下命令创建数据库并
- 6 -
中国科技论文在线
插入测试数据: 160
/usr/local/mysql/bin/mysql -u root –p;
create database test;
use test;
CREATE TABLE test1 (id INT) ENGINE=NDB;
INSERT INTO test1 (id) VALUES (1); 165
在 SQL 节点 2()上登陆数据库,查看数据是否自动同步,在 Shell 中执
行以下命令:
/usr/local/mysql/bin/mysql -u root –p;
use test;
SELECT * FROM test1; 170
可以看到,SQL 节点 2 中存在 id 为 1 的记录,证明数据已自动同步到 SQL 节点 2 上。
单点故障测试
关闭 SQL 节点 1 的 MySQL 服务,在管理节点上登陆查看数据,在 Shell 中执行以下命
令:
/usr/local/mysql/bin/mysql -u root –p; 175
use test;
SELECT * FROM test1;
可以在管理节点上依然可以查询到 id 为 1 的记录,表明集群中某个数据点发生故障时,
并不影响系统的数据访问。
3 结论 180
本文研究了分布式数据库系统的结构,事务处理过程,事务分配的算法,分布式数据库
实现负载均衡的原理。在此基础上,搭建了简单的 MySQL 分布式数据库,并测试了分布式
数据库的相关功能,表明:分布式数据库系统中一个数据节点的数据发生变化时,会自动同
步到其他数据节点上;分布式数据库系统中一个数据节点发生故障,不影响整个系统的数据
访问,具有很高的容错能力。 185
[参考文献] (References)
[1] 王珊. 数据库系统原理教程[M]. 清华大学出版社, 1998.
[2] 闪四清. 数据库系统原理与应用教程(第三版)[M]. 清华大学出版社, 2008.
[3] 肖凌, 刘继红, 姚建初. 分布式数据库系统的研究与应用[J]. 计算机工程, 2001, 27(1):33-35. 190
[4] 李红艳. 基于 NDB 引擎的 MySQL Cluster 的部署规则及测试[D]. 山东大学, 2015.
[5] 王学瑞. mysql 集群及负载均衡技术及应用[J]. 信息与电脑:理论版, 2013(2).
[6] 邵志远, 金海, 唐晓辉. 基于主动 TCP 连接复制的高性能高可用 MySQL 数据库集群[J]. 计算机研究与
发展, 2005, 42(6):1006-1012.
[7] 朱红. 基于 MySQL 集群实现的高性能数据库架构设 计[D]. 上海交通大学, 2014. 195