基于MyCat的数据库读写分离技术的研究与应用

2021-11-03 13:08张清涛
现代信息科技 2021年8期
关键词:中间件

DOI:10.19850/j.cnki.2096-4706.2021.08.035

摘  要:为了解决大型应用系统中后台数据库读写性能瓶颈的问题,在MariaDB数据库构建的主从复制集群中引入MyCat中间件服务器,安装必要的软件包、修改MyCat配置文件,搭建可读写分离的数据库服务器集群,从而解决了对一个数据库同时进行写、读操作时性能会严重下降的问题,并提高了在高并发环境下数据库集群的整体处理性能。

关键词:MyCat;读写分离;中间件;MariaDB

中图分类号:TP311.1      文献标识码:A    文章编号:2096-4706(2021)08-0125-03

Research and Application of Database Read-Write Separation Technology Based on MyCat

ZHANG Qingtao

(Hebei Petroleum University of Technology,Chengde  067000,China)

Abstract:In order to solve the problem of the bottleneck of read and write performance of background database in large application system,MyCat middleware server is introduced into the master-slave replication cluster which is built in MariaDB database. The necessary software package is installed,the configuration file of MyCat is modified,and the database server cluster with read-write separation is built. Thus,the problem that the performance will be seriously degraded when carrying out writing and reading operation to a database at the same time is solved,and the overall processing performance of database cluster in high concurrent environment is improved.

Keywords:MyCat;read-write separation;middleware;MariaDB

0  引  言

每學期末,笔者单位都会出现大量学生集中在教务系统进行成绩查询、课程查询、选课等操作,致使后台数据库服务器不堪重负、出现性能下降甚至崩溃的情况。这一方面是因为大量的数据库并发操作超出了单台数据库服务器的最大处理能力;另一方面是因为在对数据库进行写操作时,读性能会严重下降。

单位系统前台和应用系统业务逻辑本身采用反向代理技术实现Web服务器负载均衡,可以解决高并发访问问题;但唯独系统的后台基石——数据库服务器在解决高并发访问难题上可用手段一直较少。在存储层面直接采用水平分割、垂直分割等分布式技术来增强数据库系统吞吐性能,可谓困难重重,后台数据库的性能瓶颈亟需解决。

MyCat中间件的使用就是解决上述问题的方法之一。

1  原理

MyCat是一个开源的数据库中间件产品,在高并发的企业应用中可以用于搭建大型数据库集群,和开源的MariaDB配合可以作为Oracle集群的一种免费替代方案。在集群中部分节点负责数据写入,部分节点负责数据读出,可以分担高并发环境对数据库服务器的访问压力。

MyCat中间件引入逻辑库(Schema)的概念。在系统构架中,一个逻辑库和数据库集群中多个数据节点(DataNode)中的物理数据库相对应。在这种映射关系中,可以对数据库进行水平分割或垂直分割。在比较简单的读写分离模型下,MyCat读写分离模型架构如图1所示。

该简单模型包括一个主数据节点和一个从数据节点。配置数据库读写分离,需要以数据库主从复制为基础。因为读写分离的操作,必然引起集群中数据节点中数据的不一致,需要借助后台主从复制机制实现数据节点间数据的自动同步。在集群中主数据库作为写数据库,从数据库作为读数据库。

2  部署MyCat服务器

2.1  基本环境准备

在读写分离的基本服务器拓扑中,部署了可以实现主从复制的主数据节点和从数据节点——db_m和db_s。

db_m和db_sIP地址分别为192.168.10.1/24和192.168.10.2/ 24,这两个数据节点均需要安装mariadb和mariadb-server两个rpm软件包,并启动mariadb服务。建立员工示例数据库staff,然后授权mariadb的root管理员账户可以本地和远程访问staff数据库:

MariaDB [(none)]> grant all privileges on staff.* to root@localhost identified by "000000";

MariaDB [(none)]> grant all privileges on staff.* to root@'%' identified by "000000";

Grant为MariaDB的用户创建和授权语句。和MySQL数据库一样,MariaDB的用户是区分本地访问和远程访问的,授权需要分开设置。“all privileges”表示所有访问权限,“root@'%'”中的“%”用于匹配所有客户端主机。

为了简便,这里设置密码为“000000”,在生产环境下不能使用这种简单密码,会带来很高的安全风险,尤其是在root用户可以远程登录的情况下。

然后配置MariaDB,配置db_m为主数据库,db_s为从数据库。为了实现读写分离继续增加第三个节点——MyCat服务器。配置其IP地址为192.168.10.3/24,服务器名为db_mycat。

2.2  安装MyCat软件包

目前MyCat软件包的最新版本是2.0,这里使用的是较为成熟的1.6版本,使用的MyCat软件包格式为一个“.tar.gz”压缩包,可以直接使用下面命令进行解压缩:

tar –zxvf Mycat-server-*.tar.gz –C /opt/mycat

这里使用-C选项指定解压缩后文件存储路径为/opt/mycat,Linux命令、选项和文件名都区分大小写。

修改文件的权限,开放其对所有用户的读、写、执行权限:

chmod -R a=rwx /opt/mycat/

这里的-R选项表示递归修改目录下所有子目录和文件的权限。“a=rwx”表示设置所有用户(属主、属组和其他用户)权限为读、写、执行,该选项也可以用数字模式“777”代替。

2.3  编辑逻辑库配置文件

在配置文件/opt/mycat/conf/schema.xml中定义了用户可以访问的逻辑库,这是外层应用看到的数据库名。逻辑库对应了用于实现读写分离的主、从数据节点中的真实数据库。这里对应两个节点的物理数据库staff,建立一个逻辑数据库STAFF。下面修改逻辑库配置文件schema.xml实现数据库读写分离:

vi /opt/mycat/conf/schema.xml

select user()

<!--可以有多個writeHost-->

<!--可以有多个readHost-->

对逻辑库STAFF的写操作会被MyCat分流到db_m节点,对STAFF的读操作会被分流到db_s节点。balance="3"表示所有读操作全部分配到readHost指定的数据库进行,writeHost只负责写。这里的readHost和wiriteHost有隶属关联,其中“host”指定的数据库服务器名和实际的服务器计算机名并不是一个概念。

如果balance取值为0表示不启用读写分离机制,读写操作都在writeHost上进行。如果取值为2,表示writeHost和readHost都参与读的负载均衡,所有select语句都会被随机分配到这些主机上。

writeType参数可以取“0”或者“1”,取0表示写操作只发给第一台writeHost,取2表示随机发送给所有writeHost。

MariaDB和MySQL数据库一样,默认的服务端口号是3306。

2.4  配置逻辑库访问用户

下面配置针对逻辑库的访问方式(用户名和密码)。

/opt/mycat/conf/server.xml文件中包含MyCat的系统配置信息。为了使得特定用户可以访问特定的逻辑库,需要在配置文件最后配置访问逻辑库的用户名、密码及逻辑库名。下面通过修改server.xml文件配置访问逻辑库的用户名、密码:

<访问密码>

<逻辑库名>

这里可以配置用户名为“root”,密码为“000000”,逻辑库名为STAFF。生产环境下应该使用满足密码复杂性的密码。

2.5  指定jdk路径并启动MyCat服务

修改MyCat启动脚本/opt/mycat/bin/startup_nowrap.sh,在文件中添加如下代码指定jdk路径:

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/

这里指定的JDK路径要以本机实际环境为准。

启动mycat:

bash/opt/mycat/bin/startup_nowrap.sh

使用“bash”命令执行一个程序不需要程序文件有可执行权限。如果文件已经具备了可执行权限,也可以直接在Shell中输入程序文件的绝对路径,如“/opt/mycat/bin/startup_nowrap.sh”,进行执行。如果当前目录是“/opt/mycat/bin/”,也可以使用相对路径“./startup_nowrap.sh”。即便位于程序所在目录下,也不能仅输入文件名去执行一个自定义用户程序,除非已经把该程序文件所在路径提前加入了系统的环境变量。

3  结  论

在大型的企业级应用中,后台数据库的数据吞吐量往往成为整个系统的性能瓶颈。为了解决数据库性能瓶颈问题,这里使用了开源的MyCat数据库中间件和MariaDB数据库构建了完全免费的读写分离的数据库服务器集群,使得对数据库的写操作和读操作分别由不同的数据库服務器承担。从而成倍地提高了数据库服务器的可用性和吞吐性能。因为采用的读节点和写节点数量较少,性能提升比较有限,后续应该根据企业业务规模去扩展读节点和写节点的数量,构建规模更大的读写分离的数据库集群。

参考文献:

[1] 刘进京.MySQL主从复制读写分离 [J].网络安全和信息化,2016(8):64-69.

[2] 范新民.高并发环境下MySQL软硬件配置优化 [J].福建师范大学学报(自然科学版),2013,29(6):49-54.

[3] 施瓦茨,扎伊采夫,特卡琴科.高性能MySQL:第3版 [M].宁海元,周振兴,彭立勋,等译.北京:电子工业出版社,2013.

[4] 郭建伟.实现MySQL群集读写分离 [J].网络安全和信息化,2020(5):89-93.

[5] 刘建宏.MySQL数据库优化与集群 [J].数字通信世界,2017(7):47.

[6] 谷伟,陈莲君.基于MySQL查询优化技术研究 [J].微型电脑应用,2013,30(7):48-50.

[7] 刘建臣.处理MySQL访问异常故障 [J].网络安全和信息化,2019(12):160-161.

[8] 赵曦,李颖,徐江.利用垂直分割技术的分布式数据库设计研究 [J].控制工程,2018,25(1):154-159.

作者简介:张清涛(1980.01—),男,汉族,河北邯郸人,讲师,硕士,研究方向:计算机网络技术和云计算技术。

收稿日期:2021-03-20

猜你喜欢
中间件
我国自主可控中间件发展研究
中间件“迭代”
以实力证明 用事实说话
从边缘到主流国产中间件行了
中移动集采:东方通中间件脱颖而出
甲骨文携合作伙伴推融合中间件11g
国产中间件苦尽甘来
基于Web Services的安全中间件的优势及其设计与实现
金蝶 引领中间件2.0新时代
东方通 紧扣市场的中间件自主创新之路