从dtle 2.x升级到dtle 3.x
dtle 2.x 和 3.x 的数据文件不兼容,直接升级无法保留进行中的job。(若无需保留的job,则可直接升级。)
升级步骤
- 确保dtle 2.x运行中。
- 使用导出脚本( 点此下载 )将现有job导出
- 如
./dtle-job-2to3.py 127.0.0.1:8190
- 将在当前目录得到一系列job json文件。需手动填写文件里的密码。
- 导出脚本主要意义在于保存复制进度。
- 如
- 卸载dtle 2.x并删除数据目录。
- 安装dtle 3.x。配置/etc/dtle/nomad.hcl, 开启兼容层(设定
api_addr
、nomad_addr
) - 运行 dtle 3.x。将导出的job配置提交到 dtle 兼容层端口
- 如
curl -XPOST -d @job1.json 127.0.0.1:8190
- 不要提交到nomad原生端口
- 如
dtle 3.x 和 2.x的显著差异
- 作为nomad插件运行
- 需要另外启动consul
- job.json格式差异
- 默认端口不同
- 可使用hcl格式job配置文件
- 查询任务进度
- "暂停/恢复job"被"删除/添加job"代替
- 恢复需要根据之前的job.json(或hcl)添加job
- 会自动从consul中储存的Gtid继续复制
- 如果要重建同名job(并放弃进度),除了在nomad上删除,还需要在consul上删除
allocation/<alloc_id>/stats
接口变更
由于nomad没有提供合适的API #5863 ,我们暂且借用nomad alloc signal接口返回的错误信息来传递stats。
$ nomad alloc signal -s stats b0a227c1 # 或使用curl访问HTTP API
$ curl -XPOST -d '{"Signal": "stats" }' 127.0.0.1:4646/v1/client/allocation/b0a227c1-b910-0eb1-2bb9-b8bfe7607adc/signal
Error signalling allocation: Unexpected response code: 500 (1 error occurred:
* Failed to signal task: Dest, err: rpc error: code = Unknown desc = {
"CurrentCoordinates":{"File":"bin.000075","Position":18716,
"GtidSet":"acd7d195-06cd-11e9-928f-02000aba3e28:1-143962",
"RelayMasterLogFile":"","ReadMasterLogPos":0,"RetrievedGtidSet":""},
"TableStats":null,"DelayCount":null,"ProgressPct":"0.0","ExecMasterRowCount":0,
"ExecMasterTxCount":0,"ReadMasterRowCount":0,"ReadMasterTxCount":0,"ETA":"N/A",
"Backlog":"","ThroughputStat":null,"MsgStat":{"InMsgs":2,"OutMsgs":2,"InBytes":299,
"OutBytes":0,"Reconnects":0},"BufferStat":{"ExtractorTxQueueSize":0,
"ApplierTxQueueSize":0,"ApplierGroupTxQueueSize":0,"SendByTimeout":0,
"SendBySizeFull":0},"Stage":"Waiting for slave workers to process their queues",
"Timestamp":1599130915717858000}