Gravity 是一款數據復制組件,提供全量、增量數據同步,以及向消息隊列發布數據更新。
DRC 的設計目標是:
支持多種數據源和目標的,可靈活定制的數據復制組件
支持基于 Kubernetes 的 PaaS 平臺,簡化運維任務
使用場景
大數據總線:發送 MySQL Binlog,Mongo Oplog 的數據變更到 kafka 供下游消費
單向數據同步:MySQL --> MySQL 的全量、增量同步
雙向數據同步:MySQL <--> MySQL 的雙向增量同步,同步過程中可以防止循環復制
分庫分表到合庫的同步:MySQL 分庫分表 --> 合庫的同步,可以指定源表和目標表的對應關系
在線數據變換:同步過程中,可支持對進行數據變換
Gravity是摩拜單車數據庫團隊自研的一套數據復制組件,目前已經穩定支撐了摩拜單車公司數百條同步通道,TPS 50000/s,
80線延遲小于50ms。使用go語言編寫,具有如下特點:
1.多數據源(MySQL, MongoDB, TiDB, PostgreSQL)
2.支持異構(不同的庫、表、字段之間同步),支持分庫分表到合表的同步。
3.支持雙活&多活,復制過程將流量打標,避免循環復制。
4.管理節點高可用,故障恢復不會丟失數據
5.支持filter plugin (語句過濾,類型過濾,column過濾等多維度的過濾)。
6.支持傳輸過程進行數據轉換。
- 一鍵全量+增量遷移數據。
- 輕量級,穩定高效,容易部署。
9.支持基于Kubernetes 的PaaS 平臺,簡化運維任務。
使用場景:
1.大數據總線:發送MySQL Binlog,Mongo Oplog,TiDB Binlog 的增量數據到 Kafka供下游消費。
2.單向數據同步:MySQL → MySQL&TiDB 的全量、增量同步。
3.雙向數據同步:MySQL ? MySQL 的雙向增量同步,同步過程中可以防止循環復制。
4.分庫分表到合庫的同步:MySQL 分庫分表--> 合庫的同步,可以指定源表和目標表的對應關系。
5.數據清洗: 同步過程中,可通過filter plugin 將數據自定義轉換。
6.數據歸檔: MySQL→ 歸檔庫 ,同步鏈路中過濾掉delete 語句。
Gravity 的設計初衷是要將多種數據源聯合到一起,互相打通,讓業務設計上更靈活,數據復制、數據轉換變的更容易,
能夠幫助大家更容易的將業務平滑遷移到TiDB 上面。
一、安裝配置golang
golang 針對中國用戶有專門的網站:
https://golang.google.cn/dl/
下載文件:
# wget https://dl.google.com/go/go1.17.linux-amd64.tar.gz
解壓文件:
# tar -xzvf go1.17.linux-amd64.tar.gz -C /usr/local/
設置環境變量:
# vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
# source /etc/profile
版本驗證:
# go version
go version go1.12 linux/amd64
2 命令
2.1 指定module的根目錄并生成go.mod文件
go mod init example.com/hello
2.2 下載并添加依賴到go.mod文件中
go build, go test
2.3 查看module下的所有依賴
go list -m all
2.4 更新穩定版依賴
go get rsc.io/sampler
2.5 更新為指定版本依賴
go list -m -versions rsc.io/sampler
rsc.io/sampler v1.0.0 v1.2.0 v1.2.1 v1.3.0 v1.3.1 v1.99.99
go get rsc.io/sampler@v1.3.1
2.6 清理無用的依賴
go mod tidy
2.7 將依賴復制到項目路徑的vendor文件夾中
go mod vendor
2.8 忽略cache里的包,只使用vendor目錄里的依賴進行編譯
go build -mod=vendor
2.9 校驗依賴并查看是否有修改
go mod verify
二、安裝配置gravity
1.前提條件:安裝部署好golang的環境變量:
2.下載gravity的代碼:
下載地址:https://github.com/moiot/gravity/releases
選擇需要的版本
# wget https://github.com/moiot/gravity/archive/v0.9.61.tar.gz
注釋:
由于還是老的模式組織目錄結構,需要把項目放在 ${GOPATH}/src/github.com/moiot/
3.由于目前的版本不支持go module功能需要解壓到 指定的目錄 go/src目錄:
# mkdir -p /usr/local/go/src/github.com/moiot/
# tar -xzvf v0.9.25.tar.gz -C /usr/local/go/src/github.com/moiot/
# mv gravity-0.9.25/ gravity
或者直接clone 源代碼:
# git clone https://github.com/moiot/gravity.git
#export GOPROXY=https://goproxy.io
# make
#export GOPROXY=
注:解決方法:
換一個國內能訪問的代理地址:https://goproxy.cn
執行命令:go env -w GOPROXY=https://goproxy.cn
重新執行命令,完美通過
##查看幫助信息:
# ./bin/gravity --help -L warn
Usage of gravity:
-L string
log level: debug, info, warn, error, fatal (default 'info') (default "info")
-V print version and exit
-config string
path to config file
-http-addr string
http-addr (default ":8080")
-log-file string
log file path
-log-format string
log format (default "json")
##版本查詢:
# ./bin/gravity -V
Release Version (gravity): 0.0.1+git.
Git Commit Hash:
Git Branch:
UTC Build Time: 2019-07-26 02:58:06
三、問題解決
#執行make命令時,由于一些依賴包需要翻墻才能下載到,所以go在這里自動下載相應的包或依賴包時,會出現timeout問題,無法下載或加載依賴包。。最終導致make失敗
go: golang.org/x/net@v0.0.0-20190311183353-d8887717615a: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: google.golang.org/grpc@v1.19.0: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: golang.org/x/sys@v0.0.0-20180905080454-ebe1bf3edb33: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: finding github.com/pingcap/parser v0.0.0-20190118120648-5958b6fcdb2d
go: golang.org/x/crypto@v0.0.0-20180904163835-0709b304e793: unrecognized import path "golang.org/x/crypto" (https fetch: Get https://golang.org/x/crypto?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
解決方法:
設置以下環境變量:
export GOPROXY=https://goproxy.io
然后在執行make命令。
原因:
設置了GOPROXY環境變量,下載源代碼時將會通過這個環境變量設置的代理地址,而不再是以前的直接從代碼庫下載。 https://goproxy.io是官方提供公用的代理服務。
通過設置該環境變量:export GOPROXY=https://goproxy.io 后即可正常下載墻外的源碼包了:
也可以通過置空這個環境變量來關閉,export GOPROXY=
需要Go version >= 1.11。
原文鏈接:https://blog.csdn.net/eagle89/article/details/128605003
-
數據
+關注
關注
8文章
7006瀏覽量
88947 -
數據同步
+關注
關注
0文章
17瀏覽量
8165
發布評論請先 登錄
相關推薦
評論