一、CCR介绍
CCR(Cross Cluster Replication) 是跨级群数据同步,能够在库/表级别将源集群的数据变更同步到目标集群,可用于在线服务的数据可用性、隔离在离线负载、建设两地三中心。CCR 通常被用于容灾备份、读写分离、集团与公司间数据传输和隔离升级等场景。

CCR 工具主要依赖一个轻量级进程:Syncers。Syncers 会从源集群获取 binlog,直接将元数据应用于目标集群,通知目标集群从源集群拉取数据。从而实现全量和增量迁移。
1.1使用约束
- 网络约束:需要 Syncer 与上下游的 FE 和 BE 都是通的;下游 BE 与上游 BE 是通的。
- ThriftPool 限制:开大 thrift thread pool 大小,最好是超过一次 commit 的 bucket 数目大小
- 版本最低要求:v2.0.3
二、实现跨集群数据同步
2.1 部署源、目标doris集
2.2 打开集群binlog
# 在源集群和目标集群的 fe.conf 和 be.conf 中配置如下信息:
enable_feature_binlog=true
2.3 部署 syncers
#构建 CCR syncer
git clone https://github.com/selectdb/ccr-syncer
cd ccr-syncer
bash build.sh <-j NUM_OF_THREAD> <--output SYNCER_OUTPUT_DIR>
cd SYNCER_OUTPUT_DIR# 联系相关同学免费获取 ccr 二进制包
#启动和停止 syncer
# 启动
cd bin && sh start_syncer.sh --daemon
# 停止
sh stop_syncer.sh
2.4 打开源集群中同步库/表的 Binlog
-- 如果是整库同步,可以执行如下脚本,使得该库下面所有的表都要打开 binlog.enable
vim shell/enable_db_binlog.sh
修改源集群的 host、port、user、password、db
或者 ./enable_db_binlog.sh --host $host --port $port --user $user --password $password --db $db-- 如果是单表同步,则只需要打开 table 的 binlog.enable,在源集群上执行:
ALTER TABLE enable_binlog SET ("binlog.enable" = "true");
2.5 向 syncer 发起同步任务
curl -X POST -H "Content-Type: application/json" -d '{
"name": "ccr_test",
"src": {
"host": "localhost",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "demo",
"table": "example_tbl"
},
"dest": {
"host": "localhost",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "ccrt",
"table": "copy"
}
}' http://127.0.0.1:9190/create_ccr
三、Syncers 其他操作
3.1 元数据管理
Syncer 目前能够使用两种数据库来保存自身的元数据,分别为sqlite3(对应本地存储)和mysql(本地或远端存储),默认值为 sqlite3。在使用 mysql 存储元数据时,Syncer 会使用CREATE IF NOT EXISTS来创建一个名为ccr的库,ccr 相关的元数据表都会保存在其中。
# 指定元数据存储类型
bash bin/start_syncer.sh --db_type mysql
# 指定 sqlite3 生成的 db 文件名及路径
bash bin/start_syncer.sh --db_dir /path/to/ccr.db
#指定mysql连接信息
bash bin/start_syncer.sh --db_host 127.0.0.1 --db_port 3306 --db_user root --db_password "qwe123456"
3.2 使用约束
- 需要 Syncer 与上下游的 FE 和 BE 都是通的
- 下游 BE 与上游 BE 是通的
- 对外 IP 和 Doris 内部 IP 是一样的,也就是说show frontends/backends看到的,和能直接连的 IP 是一致的,要是直连,不能是 IP 转发或者 nat
- Doris 版本最低要求:v2.0.3
3.3 Syncer 高可用
Syncer 高可用依赖 mysql,如果使用 mysql 作为后端存储,Syncer 可以发现其它 syncer,如果一个 crash 了,其他会分担他的任务。
1127

被折叠的 条评论
为什么被折叠?



