基于极数云舟Arkgate跨云数据库异地双活实战

编程入门 行业动态 更新时间:2024-10-08 13:30:48

基于极数云舟Arkgate跨云数据库<a href=https://www.elefans.com/category/jswz/34/1748988.html style=异地双活实战"/>

基于极数云舟Arkgate跨云数据库异地双活实战

1

业务背景

 

随着O2O消费深入人心,我们公司的业务也迅速发展,目前已经服务了全国大部分城市里面的近2000万个家庭,家庭服务已经成为解决社会劳动力的一个重要渠道,也是方便千家万户的一项利国利民的大好事。在不断发展的过程中,公司对业务服务质量,以及数据安全,数据库可用都非常重视,这是我们的核心资产。

 

我们大量使用了公有云服务,这也包括公有云上的数据库服务,最近由于公司全国性发展的需要,同时也考虑到数据库在公有云的安全性,我们开始探索云时代下的数据库跨云备份,异地跨云备份和跨云多活等等数据库创新性的解决方案。

 

经过我们多方沟通并积极测试,在否决了很多供应商提供的方案之后,最终测试通过了极数云舟这家极具互联网技术基因的公司所提供的基于其自主研发的Arkgate的跨云数据库异地双活方案,此方案可以完全匹配我们的需求,实现了我们跨云双活的目标。

 

下面是异构同步的架构图和基于Arkgate的多活方案:

(图:异构数据同步架构)

(图: 基于Arkgate多活方案的架构图)

 

从极数云舟的官网和他们公司提供的产品白皮书了解到,Arkgate是通过实时监控源端数据库的数据变化,把增量数据库以准实时的方式并发同步到目的端的,他们用多线程多通道的方式解决了同步效率,同时也在内部解决了数据的完整性和一致性问题,以及双活领域最难处理的数据回环问题,是我们所能看到的业务最好的异地双活方案了。

 

除此以外,核心组件Arkgate会把复制过程中的相关状态存储在information schema的表里面,可以查看相关表获得相应信息,实现状态监控和报警,方便统计和运维管理,这也是我们非常关注的内容。

 

2

测试环境说明

测试环境

 

 

软件环境

MySQL数据库RDS

server version: 5.6.16-log source distribution

Arkgate

arkgate_plugin_version -18.06.28

自建MySQL

server version: 5.6.16-log source distribution

sysbench

sysbench-version-0.5

软件环境

服务器

分类

实例

规格

CPU

内存

磁盘

地域

独享型

RDS

  rds.mysql.c1.xlarge

8核

32G

500G

华北二c(北京)

本地SSD

     ecs.i1.2xlarge

8核

32G

400G

华北二e(北京)

本地

SSD

     ecs.i1.2xlarge

8核

32G

400G

华北二e(北京)

本地

SSD

     ecs.i1.2xlarge

8核

32G

400G

华东2 可用区b

本地

SSD

     ecs.i1.2xlarge

8核

32G

400G

华东2 可用区b

本地

SSD

     ecs.i1.2xlarge

8核

32G

400G

华东2 可用区b

本地SSD

     ecs.i1.2xlarge

8核

32G

400G

华东2 可用区b

 

测试内容

  • 相关的数据库操作双向同步功能测试

  • 在数据库性能测试工具sysbench的 insert.lua模块下,分别使用4、8、16、32线程并发下,对数据库插入100万行数据,测试 gate 获取源库binlog 是否有延迟

  • 在数据库性能测试工具sysbench的 oltp.lua模块下,分别使用4、8、16、32线程并发下,对数据库事物性操作,测试 gate 获取源库binlog的是否有延迟

  • adapter使用4、8、16、32线程并发下写入目标端数据库效率

  • 在数据库性能测试工具sysbench的 insert.lua模块下测试,数据从北京rds 同步到上海的自建 mysql 是否有延迟,数据源使用4、8、16、32线程对数据库插入100万行数据,比较源库插入、gate获取binlog、目标数据库写入是否有延迟以及各个模块的QPS大小

  • 选择合适线上数据库进行数据同步测试,查看目标端和源库数据是否有延迟

 

3

测试要点

三重高可用

 

第一重:MySQL集群高可用(略)

 

第二重:gate HA测试

 

数据源:北京RDS 数据库

目标库:上海自建MySQL

zk管理的哨兵模式下 Arkgate链路:

(1)10-00-225-186(主)

(2)10-00-225-187(备)

   

操作步骤:

 

1、#225-186 

set arkgate_replication_stop='arkgate_test';

2、#数据源 insert into t1 values(1);

select   *  from t1;

+----+

|   id |

+----+

|  1 |

+----+

rm-*.mysql.rds.aliyuncs:3306:root:data_test>create   table t3(id int primary key auto_increment,name varchar(20));

query   ok, 0 rows affected (0.00 sec)

 

rm-*.mysql.rds.aliyuncs:3306:root:data_test>alter   table t3 add address varchar(30) not null default '' comment '地址';

query   ok, 0 rows affected (0.00 sec)

records:   0  duplicates: 0  warnings: 0

 

3、目标库

mysql>   select *  from t1;

+----+

|   id |

+----+

|   1  |

+----+

 

mysql>   show tables;

+---------------------+

|   tables_in_data_test |

+---------------------+

|   employees           |

|   t1                  |

|   t2                  |

|   t3                  |

+---------------------+

 

 

结论: 

哨兵会切换到10-00-225-187   Arkgate 上继续同步

   

第三重:adapter HA测试

 

数据源:北京RDS 数据库

目标库:上海自建MySQL

zk 管理的哨兵模式下 adapter链路:

(1)10-00-225-186(主)

(2)10-00-225-187(从)

   

操作步骤:

   

kill 10-00-225-186 adapter 进程

   

结论:

哨兵会按照zk中的adapter 资源池的中的先后顺序拉起对应的adapter 进程,同步继续

 

pt-online-osc测试

 

加字段、加索引

   

命令:pt-online-schema-change  --no-version-check -uroot -pxxxx -h   rm-*.mysql.rds.aliyuncs --alter="add key   idx_name(name),add tele int not null default '110'"  --execute d=data_test,t=t3   --max-load=threads_connected:850 --critical-load=threads_running=550   --charset=utf8    --nocheck-replication-filters --set-vars   innodb_lock_wait_timeout=30000    --recursion-method=none --nodrop-old-table

 

#目标库

 

结论:功能正常

 

变更字段

   

命令:pt-online-schema-change  --no-version-check -uroot -pxxx123   -h rm-*.mysql.rds.aliyuncs --alter="modify tele bigint  not null default '110'"  --execute d=data_test,t=t3 --max-load=threads_connected:850 \

--critical-load=threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars   innodb_lock_wait_timeout=30000    --recursion-method=none --nodrop-old-table

 

   

结论:功能正常

   

清理数据

   

命令:

pt-archiver   --source h=rm*.mysql.rds.aliyuncs,d=data_test,p=3306,t=t1   --user=root --password=xxxxx --dest   h=rm-*.mysql.rds.aliyuncs,p=3306,d=data_test,t=t1_tmp   --where "id < 10"   -a   utf8mb4 --limit 10000 --txn-size 10000    --no-version-check --statistics --progress=500000 --run-time 1h  --nosafe-auto-increment

 

#目标库

 

结论: 功能正常

 

性能压测

 

 

数据准备

 

命令:/opt/sysbench/sysbench/sysbench --mysql-host=rm-*.mysql.rds.aliyuncs --mysql-port=3306 --mysql-user=root --mysql-password=xxxx --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=50000 --num-threads=10 --max-requests=500000 --report-interval=60 \

--test=/opt/sysbench/sysbench/tests/db/oltp.lua prepare

 

单测 gate 从数据源获取binlog 

是否有延迟

 

模型:insert.lua

华北2:insert 4线程、gate 16线程

 

命令:/opt/sysbench/sysbench/sysbench \

--mysql-host=rm-*.mysql.rds.aliyuncs --mysql-port=3306 --mysql-user=root --mysql-password=xxxx --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=100000 --num-threads=4 --max-requests=1000000 --report-interval=60 \

 --test=/opt/sysbench/sysbench/tests/db/insert.lua run

 

注:横轴1/2/3/4 分别代表数据源4/8/16/32线程写入数据

 

结论:基本没有延迟

 

测试gate从数据源获取binlog

是否有延迟

 

模型:oltp.lua

华北2:oltp 4/8/16/32线程、gate 16线程

 

命令:/opt/sysbench/sysbench/sysbench --mysql-host=rm-*.mysql.rds.aliyuncs --mysql-port=3306 --mysql-user=root --mysql-password=xxxx --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=100000 --num-threads=4/8/16/32 --max-requests=1000000 --report-interval=60 --test=/opt/sysbench/sysbench/tests/db/oltp.lua run

 

结论:无延迟

 

单测 adapter将datacenter 中的数据发

送到目标端的qps

 

注:横轴1/2/3/4分别代表adapter 的线程数4/8/16/32

 

insert.lua 模块下,数据从源端4线程并发请求合计

1000000次请求,gate 16  线程获取binlog;

adapter 8线程分发到目标端传输是否有延迟

 

 

测试结果

 

  • 可以看出 数据传输在oltp.insert/oltp.lua 模型下,数据传输效率瓶颈在adapter 模块和网络传输上(北京到上海)

  • 在oltp 下,gate 的在正常业务(并发32 线程以下)获取binlog 无延迟,但是在 短时表copy 类型的ddl 操作肯定会造成延迟,是否过滤ddl 可以配置

  • 对于源端数据变更小的数据库实例可以进行合并部署同步链路到同一台Arkgate 主机

线上业务测试

数据库归属业务

速运

数据库实例

 rm-2ze0evpaj530h2

数据库配置

 8c/32g/1000g

选择理由

此实例每天max qps  和avg qps 都位列到家所有数据库的前1/3,并且数据变更频率(写压力)在所有实例中排名前3,白天写峰值达到每秒2k+,此实例数据同步测试结果对其他数据库实例的数据同步有较好的参考价值

数据同步方向

北京 --> 上海

网络环境

50mb 延迟 25ms左右

 

配置同步链路

 

登录源实例给获取binlog 用户授权

grant select,replication client,replication slave on *.* to 'arkgate'@'%' identified by 'arkgate_test' ;

 

配资gate 信息

set global arkgate_create_datacenter="arkgate_52";

set global arkgate_replication_source ="arkgate_52:2";

set global arkgate_json_full_image="arkgate_52:1";

set arkgate_parallel_workers="arkgate_52:1";

set arkgate_binlog_expire_hours="arkgate_52:24";

set arkgate_replication_table_filter="arkgate_52:add:ignore:mysql:ha_health_check";

set global arkgate_replication_member = "arkgate_52:master:suyun_52:rm-*.mysql.rds.aliyuncs:3306";

 

启动gate

set global arkgate_replication_start = "arkgate_52:arkgate:arkgate_test";

 

停止gate

set arkgate_replication_stop='arkgate_52';

 

配置adapter 信息

insert into task_info values (2,'arkgate_52','10.00.225.187',3307,'arkgate_52','test_adapter','test_adapter','10.00.23.3',3307,'test_adapter','

'test_adapter',1,8,4000,8000,3,3,'mysql_adapter.log',1,0,'',1,1,1,,);

 

启动adapter

/data/ark/to_tidb2/bin/to_mysql -dc_ip 10.00.225.187 -dc_port 3307 -task_name arkgate_52 -dc_pass test_adapter -dc_user test_adapter

 

同步测试

 

gate、 datacenter、adapter 都部署在北京

gate 线程数1,adapter 线程数8,adapter 单次读取binlog量4000行

datacenter qps(gate获取binlog)

目标库 qps(adapter 分发sql)

结果:延迟10minute +

 

gate、 datacenter、adapter都部署在上海

gate 线程数1,adapter 线程数8,adapter 单次读取binlog量4000行

datacenterqps(gate获取binlog)

binlog获取结束时间

目标库 qps(adapter 分发效率)

 

adapter分发完成时间

结果:无延迟

 

gate 线程数1、 datacenter部署在北京 adapter 线程数24 部署到上海

同步延迟4minutes

datacenterqps(gate获取binlog)

binlog获取完成时间

gate配置

 

目标库 qps(adapter分发sql 24线程)

adapter分发完成时间

 

有延迟日志

 

gate和datacenter 部署在同地域并且gate 单线程获取数据源binlog 无延迟,主要延迟就发生adapter 模块部署地域和配置,因此,将gate 、datacenter 部署在北京地区,adapter 分别按下表部署和配置进行数据同步测试:

数据同步测试时间 5 分钟

序号

adapter  归属地

adapter每次读量

adapter线程数

延迟/min

1

北京

4000

8

10

2

北京

4000

24

4

3

北京

4000

64

0

4

上海

1000

24

1

5

上海

4000

24

3

6

上海

10000

24

6

 

测试结果

 

  • 将Arkgate 的gate 和datacenter 部署在同地域,adapter 部署在源数据库地区,写目标端数据库延迟被放大,但是可以通过增加adapter 工作线程解决,但是过多的线程会占用目标端数据库链接数

  • 将Arkgate 的gate 和datacenter 部署在同地域,adapter 部署在目标端数据库地区,读源端数据库操作延迟被放大(单次读1000行 耗时0.74s,单次读10000耗时12.63s),但是可以通过减少adapter单次读取的量来解决

  • 将Arkgate 的 gate、datacenter、adapter 都部署在目标端数据库地区,既可以方便管理链路各个模块,也可以顺利解决adapter分发延迟问题

 

4

测试总结

 

  • Arkgate 实时异构数据同步系统在功能和性能上可以满足公司当前的数据库北京到上海数据同步需求,为了将数据同步延迟降到最低,并且方便管理数据同步工具,建议如下部署gate、datacenter、adapter,并且将adapter 的工作线程按需调整,比如:

    • 北京 --> 上海,gate、datacenter、adapter 都布署在上海,单独部署一套哨兵进行同步链路的故障转移操作

    • 上海 --> 北京,gate、datacenter、adapter 都布署在北京,单独部署一套哨兵进行同步链路的故障转移操作

  • Arkgate 数据同步工具目前欠缺的就是web 页面的控制台;

  • datacenter的HA可以用常用的MySQL高可用解决方案解决,也可以用极数云舟提供的ArkDB一体化MySQL高可用方案。

 

 

公司简介

北京极数云舟科技有限公司(简称: 极数云舟)注册于2017年1月,创始团队是由长期工作在一线互联网公司数据库相关领域的顶尖技术专家组成,凭借在数据库方面多年的运维管理与内核源码研究经验,提供针对MySQL、Redis、HBase等开源数据库系列的全套云平台解决方案,在企业自建数据库私有云,混合公有云,跨云数据库备份,异地双活,数据库安全防护,数据库一体机等等领域提供成熟解决方案。

 

极数云舟提供的主要产品包括:ArkControl(数据库云管平台),Arkit(自动审核和执行系统)、Arkproxy(中间件)、Arkgate(实时异构同步系统)等系列产品。

 

联系我们: 

电话: 010-62984800

官网:

邮箱: marketing@cloud-ark

地址:北京市海淀区上地东路35号院 颐泉汇2号楼303

 

参考文献:

更多推荐

基于极数云舟Arkgate跨云数据库异地双活实战

本文发布于:2024-03-14 10:06:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736240.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:异地   实战   数据库   极数云舟   Arkgate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!