你还在代码里做读写分离么?要不试试这个中间件吧?-

你还在代码里做读写分离么?要不试试这个中间件吧?- 01 摘要传统的MySQL读写分离方案是通过

你还在代码里做读写分离么?要不试试这个中间件吧?-

01 摘要

传统的MySQL读写分离方案是通过在代码中根据SQL语句的类型动态切换数据源来实现的,那么有没有什么中间件可以自动实现读写分离呢?小米开源的数据库中间件Gaea就可以实现,接下来我们将详细讲解如何使用Gaea来实现MySql的读写分离。

02 Gaea简介

Gaea是小米中国区电商研发部研发的基于MySql协议的数据库中间件,目前在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务。Gaea支持分库分表、SQL路由、读写分离等基本特性,其中分库分表方案兼容了mycat和kingshard两个项目的路由方式。

03 MySql主从复制

使用Gaea需要依赖MySql的主从复制环境,关于MySql的主从复制可以参考:MySql主从复制,从原理到实践!

04 直接在linux下安装

目前官方提供的是在Linux下直接安装的方式,我们先按此方法来安装Gaea。

4.1 安装Go语言环境

由于Gaea是使用Go语言编写的,所以我们需要先安装Go语言的环境。

  • 安装Go语言环境,下载地址:golang.org/dl/
  • 下载完成后解压到/mydata目录下;

tar -zxvf go1.13.5.linux-amd64.tar.gz -C /mydata/

  • 添加/mydata/go/bin目录到PATH变量中:

# 编辑环境变量配置文件
vim /etc/profile
# 在最后一行添加
export GOROOT=mydata/go
export PATH=$PATH:$GOROOT/bin
# 刷新配置文件
source /etc/profile

  • 查看版本号,测试是否安装成功:

go version

  • 返回以下信息表示Go语言环境已经安装成功了:

go version go1.13.5 linux/amd64

4.2 安装Gaea

由于Gaea并没有提供安装包,所以我们需要自行编译源码获取可执行文件。

  • 下载Gaea的源码,直接下载zip包即可,下载地址:github.com/XiaoMi/Gaea
  • 将下载好的压缩包进行解压操作,这里我们解压到/mydata/gaea/目录下:

unzip Gaea-master.zip

  • 进入/mydata/gaea/目录下,使用make命令对源码编译:

make build

  • 注意:由于网络问题,某些Go的依赖会下载不下来导致编译失败,多尝试几次即可成功;
  • 编译完成后在/mydata/gaea/bin目录下会生成Gaea的执行文件gaea:
  • 由于我们没有搭建etcd配置中心,所以需要修改本地配置文件/mydata/gaea/etc/gaea.ini,将配置类型改为file:

; 配置类型,目前支持file/etcd两种方式,file方式不支持热加载
config_type=file

  • 添加namespace配置文件,用于配置我们的主从数据库信息,配置文件地址:/mydata/gaea/etc/file/namespace/mall_namespace_1.json
  • 配置文件内容如下:

{
"name": "mall_namespace_1",
"online": true,
"read_only": false,
"allowed_dbs": {
"mall": true
},
"slow_sql_time": "1000",
"black_sql": [
""
],
"allowed_ip": null,
"slices": [
{
"name": "slice-0",
"user_name": "root",
"password": "root",
"master": "192.168.6.132:3307",
"slaves": ["192.168.6.132:3308"],
"statistic_slaves": null,
"capacity": 12,
"max_capacity": 24,
"idle_timeout": 60
}
],
"shard_rules": null,
"users": [
{
"user_name": "macro",
"password": "123456",
"namespace": "mall_namespace_1",
"rw_flag": 2,
"rw_split": 1,
"other_property": 0
}
],
"default_slice": "slice-0",
"global_sequences": null
}

作者: liuzhihao

为您推荐

返回顶部