中国云计算行业运行报告,混合云将成企业级云市场最重要部分
- 2020年后想跳槽?MQ、ZK、Nginx、Kafk等分布式技术你都掌握了?
- 手撕分布式技术:限流、通讯、缓存,全部一锅端走送给你
- 秋招面试总结:Jao V K n $ G i ) + 2 2 @ 4的数据库中间件,目前在小米商城大 l 4 C p将配置类型改为file:
; 配置类型,目前支持file/etcd两种方式,file方式不支持热加载
config_type=file- 添加namespace配置文件,用于配置我们的主从数据库信息,配置文件地址:/mydata/gaea/etc/file/ Q m Rnamespace/mall_namespace_1.json
- 配置文件内容如下:
{
\"name\": \"mall_namespace_1\",
\"online\": true,
U M i q j v\"read_only\": false,
\"allowed_dbs\": {
\"mall\": true
},
\"slow_sql_time\": \"1000\",
\"blaV H i 9 d 5 - / }ck_sql\": ,
\"allowD ) = /ed_ip\": null,
\"slices\": [
{
\"name\": \"slice-0\"b i g n $ m 4 ! {,
\"user_name\": \"root\",
\"pas+ q % k O q W 8sword\": \"root\",
\"mast% ) v & * B k Cer\": \"192.w 1 1 K 3 W 0 u 2168.6.132:3307\",
\"slaves\( c M C": \"192.168.6.132:3308\"t 0 2 k W : f],
\"statistic_slaves\": null,
\"capacity\": 12,
\"max_capao P $ U r D e fcity\, Q J C / 0 & lut\6 . |": 60
}
],
\"q & # ^ K r S h &shard_rules\": null,
\"users\": ,
\"default_slice\": \"slice-0\",
{ = F 9 !\"global_sequences\": null
}4.3 namespace配置文件
namespace的配置格 Y H = i H式为json,包含分表、( u v u非分表x w 9 y w E V c {、实例等配置信息,都可在运行时改变。
- 整体配置说明:
- sliceR . b D w配置:
- users配置:
05 在Docker容器中运行
由于官方只提供了Linux下直接安装V + u (运行, ? l W :的方式,这里我们提供另一种运行方式,在Docker容器中作为服务运行。
5.1 打包c w 1 w ! X x +成S / 9 . n + hDocker镜像
Docker Hub 中并没有打包好的Gaea镜像,我们需f | I 8 z K要自行构建一个,下面详细介绍下如何构建Gaea的Docker镜像。
- 这里我们使s i v a : N用Dockerfile构建Docker镜像,Dockerfile中B X & F - - 0 J的内容如下:
# 该镜D X ,像需要依赖的基础] ^ X ^ 0 s镜像
FROM gB ^ & iolang:latestn h |
# 将当前目录下的gaeax 8 m & + }源码包复制到docker容器的/go/Gaeav ) l U-master目录下,对于.tar.gz文件会自动解^ C * u A ! 压
ADD Gae[ W 6 0a-master.tarV w L Y.gz /go/Gaea-master
# 将解压后的源码移动到/go/gaea目录中去
RUN bash -c \'mv /go/Gaea-master/Gaea-master /go/gaea\'
#H = , Z j ? 进入/go/gaea目录
WORKDIR /go/gaea
# 将gaea源码进@ { j a x X l u行打包编译
RUN bash -c \'make build\'
# 声明服务运行在a x 413306端口
EXPOSEr E L I d 2 13306
# 指定docker容器启动时执行的命令
ENTRYPOH K 8 2 #INT
# 指定维护者的名字
MAn ^ Z I GINTAINER macrozheng- 在此之前我们需要把Gaea的源} E i W码压缩包转换为.tar.gz格式方便在Docker容器中的解压,可以使用I d O M : = u压缩软件来实现:
- 之后使用Docker命令构建Gaea的Docker镜像:0 A 3 { v G
docker build -t gaea:1.0.2 .- 构建成功控制台输出:
- 将本地安装的Gaea配置w h x文件复制到/mydaB u Y s X F ? u ;ta/gaea-docker/etc/目录下:
cp -r /mydata/gaea/etc/ /mydata/Q E R C & $gaea-docker/etc/- 使用DockeI ` ( ur命令启动Gaea容器:
docker# X 9 F R 1 F run -p 13306:13306 --name gaea \\
-v /mydata/gaea-docker/etc:/go/gaea/etc \\
-d gaea:1.0.206 测试读写分离
测试思路:首先我们关闭从实例的主从复制,k W X 4然后通过Gaea代理来操作数据库,插入一条数据,如果主实例中有这条数据而从实例中没有,说明写操作是走的主库。然后再通过Gaea代理查询该表数据,如果没有这条数据,表示读操作走的是从库,证明读写分离成功_ C 5 6 i。
- 通过NE q | @ q ( kavica? u O ( W o ]t连接到Gaea代理,注意此处账号密码为Gaea的namespace中配置的内容,端口为Gaea的服务端口;
- 通过Navicat分别连接到主库和从库,用于查看数据,此时建立了以下三个9 E g 7 R 4 l数据库连接;
- 通过stop slave命令关闭mysql-slave实例的主从复制功能:
- 通过Gaea代理在test表中插入一条数据:
- 在主库中查看test表的数据,发现已有该数据:
- 在从库中查看test表的数据,发现没有该数据,证明写操作走的是主库:
- 直接在代理中查J $ % n 2 }看test表中的数据,发现没有该数据,证明读操作走的是从库。
07 结合SpringBoot使用
在我们的SpringBoot应用中,我们只需要把Gaea的代理服务直接当做数据R % F R I库服务来使用就可以实现读写分离了。这样就不用在代码中添加任何读写分离逻辑j k # M m t s了,是不是很方便!
作者:MacroZheng
原文链接:htK ? x ztps://juejin.im/0 N s wpost/5Y q 2 B i $ ] =e22b37ee51d454d523be24d