首页 > 数据库架构, 架构设计 > 数据库中间件试用

数据库中间件试用

2020年5月3日 发表评论 阅读评论 1,165 次浏览

在做高性能集群架构设计时,通常对数据库进行读写分离是常规操作,因此这里梳理下充当数据库(以MySQL为例)访问的中间件有哪些开源软件,当然相关资料和初步结论来自于网络,需要自行验证&判断。

一,MySQL Proxy
Mysql-proxy是MySQL官方提供的Mysql中间件,可以实现读写分离、负载平衡、Failover等,但其不支持大数据量的分库分表且性能较差。

官方地址:https://downloads.mysql.com/archives/proxy/

状态:玩具,不能在生产环境使用

二,MySQL Router
MySQL Router是MySQL官方提供的另外一个轻量级中间件,可以说是MySQL Proxy的替代品。

官方地址:https://dev.mysql.com/downloads/router/
参考地址:https://www.cnblogs.com/williamzheng/p/11347362.html

https://dev.mysql.com/doc/mysql-router/8.0/en/

特点:
1,与直连MySQL相比,性能损耗大概1%。
2,应用程序连接MySQL出现错误时,需要应用程序发起重试。
3,最大支持500连接数。

三,Atlas
Atlas是由Qihoo 360 Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。基于Mysql-proxy 0.8.2版本,对其进行了优化,并增加了一些新的功能特性。360内部使用Atlas运行的Mysql业务,每天承载的读写请求数达几十亿条。

官方地址:https://github.com/Qihoo360/Atlas

状态:更加没更新了

四,DBProxy
DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它是在奇虎360公司开源的Atlas基础上修改了部分bug,并且添加了很多特性。
目前DBProxy在美团点评广泛应用,包括美团支付、酒店旅游、外卖、团购等产品线,公司内部对DBProxy的开发全面转到github上,开源和内部使用保持一致。目前只支持MySQL(Percona)5.5和5.6。

官方地址:https://github.com/Meituan-Dianping/DBProxy

状态:最后一次更新在2017年,也有很久没更新了

还有一些其他的数据库中间件:https://blog.csdn.net/w892824196/article/details/82660415
但绕了一圈,才发现大多都没有更新维护了

当前看到的具备较大实用价值的估计是如下几个:

1,ProxySQL

https://proxysql.com

https://github.com/sysown/proxysql

2,MariaDB MaxScale

https://github.com/mariadb-corporation/MaxScale

3,MySQL Router

https://dev.mysql.com/downloads/router/

https://github.com/mysql/mysql-router

对上面三个开源软件,有一些对比,比如:

https://proxysql.com/blog/proxy-wars/

https://anothermysqldba.blogspot.com/2018/05/proxy-mysql-haproxy-proxysql-keepalived.html

看了一下上面三个软件在GitHub上的Star数,当前ProxySQL最多,先试试它。

一,测试环境
$ cat /etc/issue
Ubuntu 18.04.3 LTS \n \l
$ uname -a
Linux lenky-virtual-machine 5.0.0-27-generic #28~18.04.1-Ubuntu SMP Thu Aug 22 03:00:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

二,安装ProxySQL
参考:https://proxysql.com/documentation/installing-proxysql/

https://github.com/sysown/proxysql/releases

1,下载对应Ubuntu 18.04的最新安装包并进行安装
$ mkdir ~/proxysql
$ cd ~/proxysql/
$ wget https://github.com/sysown/proxysql/releases/download/v2.0.10/proxysql_2.0.10-ubuntu18_amd64.deb
$ sudo dpkg -i proxysql_2.0.10-ubuntu18_amd64.deb

三,启动ProxySQL
$ sudo service proxysql start
$ sudo netstat -natp | grep proxysql
$ proxysql –version
ProxySQL version 2.0.10-27-g5b319972, codename Truls

看到proxysql的监听端口6032(管理端口号)和6033(对外服务的端口号)就对了。

四,安装Mysql客户端和服务端
$ sudo apt install mariadb-client-core-10.1
$ sudo apt install mariadb-server-core-10.1 mariadb-server

1,先关闭密码验证
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
在[mysqld]下添加
skip-grant-tables=1

2,再启动mariadb
$ sudo service mysql start

3,无密码登录
$ mysql -u root

4,修改密码为root
use mysql;

update user set authentication_string=password(‘root’),plugin=’mysql_native_password’ where user=’root';

flush privileges;
exit

5,修改配置文件,去掉第2步中加的skip-grant-tables,再重启mariadb,再登录。
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
$ sudo service mysql stop
$ sudo service mysql start
$ mysql -u root -p

6,创建测试数据库
create database testdb;
use testdb;
create table user (id int not null auto_increment, name varchar(64), pwd varchar(32), primary key(id));
insert into user (name, pwd) values (“tom”, “123456”);

7,创建测试账号并将testdb授权于他
create user ‘testuser’@’%’ identified by ‘testuser’
grant all privileges on testdb.* to ‘testuser’@’%’
flush privileges;

8,测试
$ mysql -u testuser -p
登录后,show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| testdb |
+——————–+
2 rows in set (0.00 sec)

没问题。

五,管理ProxySQL
参考:https://github.com/sysown/proxysql/wiki

https://www.cnblogs.com/keme/p/12290977.html

1,登录,ProxySQL的默认账号和密码都是admin
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 –prompt=’Admin> ‘

2,把本机的MySQL Server添加进去,并且新增用户testuser
参考:https://github.com/sysown/proxysql/wiki/ProxySQL-Configuration

https://github.com/sysown/proxysql/wiki/MySQL-Server-Configuration

Admin> show databases;
Admin> use main;
Admin> show tables;
Admin> insert into mysql_servers(hostname) values (‘127.0.0.1′);
Admin> select * from mysql_servers;
Admin> load mysql servers to runtime;
Admin> save mysql servers to disk;
Admin> select * from runtime_mysql_servers;

新增用户,并且立即生效
Admin> insert into mysql_users(username, password) VALUES (‘testuser’, ‘testuser’);
Admin> load mysql users to runtime;
Admin> save mysql users to disk;

3,新开一个终端,用testuser/testuser进行登录
$ mysql -u testuser -ptestuser -h 127.0.0.1 -P6033 –prompt=’ProxySQLClient> ‘
ProxySQLClient> select * from testdb.user;
+—-+——+——–+
| id | name | pwd |
+—-+——+——–+
| 1 | tom | 123456 |
+—-+——+——–+
1 row in set (0.00 sec)

Over~

参考:
1,https://www.digitalocean.com/community/tutorials/how-to-use-proxysql-as-a-load-balancer-for-mysql-on-ubuntu-16-04
2,https://www.sohu.com/a/342575830_760387
3,https://www.jianshu.com/p/45887468b9a9
4,https://www.cnblogs.com/widgetbox/p/12617554.html

转载请保留地址:http://www.lenky.info/archives/2020/05/2883http://lenky.info/?p=2883


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.