从dtle 2.x升级到dtle 3.x

dtle 2.x 和 3.x 的数据文件不兼容,直接升级无法保留进行中的job。(若无需保留的job,则可直接升级。)

升级步骤

  1. 确保dtle 2.x运行中。
  2. 使用导出脚本( 点此下载 )将现有job导出
    • ./dtle-job-2to3.py 127.0.0.1:8190
    • 将在当前目录得到一系列job json文件。需手动填写文件里的密码
    • 导出脚本主要意义在于保存复制进度。
  3. 卸载dtle 2.x并删除数据目录。
  4. 安装dtle 3.x。配置/etc/dtle/nomad.hcl, 开启兼容层(设定api_addrnomad_addr)
  5. 运行 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}

results matching ""

    No results matching ""