5.3之前版本升级至5.3之后版本,tiflash为何不能一起滚动升级

5.3之前版本升级至5.3之后版本,tiflash为何不能一起滚动升级,有哪些影响?后续是否可以做到滚动升级?

【 TiDB 使用环境】生产\测试环境\ POC
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

大佬,在那里看的:smile:,我去问问去

参考这个帖子,是 5.3 之后,查询的接口不兼容,升级过程中查询结果会不一致。所以不能滚动升级。

1 个赞

知道了原因。那么怎么正确升级tiflash实例呢。文档那个说的不清不楚。先关掉TIFLASH实例,怎么又离线升级整个集群,此处是不是有笔误? 有没有具体步骤?

我们增加了对应的步骤,可以参考这个文档:
https://docs.pingcap.com/zh/tidb/stable/upgrade-tidb-using-tiup#不停机升级

若想将 TiFlash 从 5.3 之前的版本升级到 5.3 及之后的版本,必须进行 TiFlash 的停机升级。参考如下步骤,可以在确保其他组件正常运行的情况下升级 TiFlash:

  1. 关闭 TiFlash 实例: tiup cluster stop <cluster-name> -R tiflash
  2. 使用 --offline 参数在不重启(只更新文件)的情况下升级集群: tiup cluster upgrade <cluster-name> <version> --offline
  3. reload 整个集群: tiup cluster reload <cluster-name> 。此时,TiFlash 也会正常启动,无需额外操作。
1 个赞

是这样的,在 5.4 里面我们对 MPP 的数据传输接口进行了一下改动。这导致 5.3 及以前的版本遇到 5.4 及以后的版本发送的 MPP 数据时,会读不到数据,从而导致 query 结果不对。为了在升级的时候避免这个问题,有两个方法:

  1. 官方推荐的方法:
    第一步:关闭 TiFlash 实例:tiup cluster stop -R tiflash
    第二步:使用 --offline 参数在不重启的情况下升级集群:tiup cluster upgrade --offline,注意这一步虽然是用了 --offline,但其实就是直接替换各个组件的 binary,不会影响除 TiFlash 以外组件的正常服务
    第三步:reload 整个集群:tiup cluster reload ,reload 完成后 TiFlash 也会自动 start。
  2. 如果实在是不能停 TiFlash 服务,可以尝试把 TiDB 的 MPP 功能关闭后正常升级集群,之后在把 TiDB MPP 功能打开:
    第一步:关闭 TiDB MPP 功能:在 TiDB 中运行 set @@global.tidb_allow_mpp=0;滚动重启所有 TiDB 节点(因为 global 变量的设置需要在新的 session 中生效,如果不滚动重启 TiDB 的话,现有的 session 仍然会生成 MPP 计划)
    第二步:正常升级集群 tiup cluster upgrade
    第三步:重新开启 TiDB MPP 功能:在 TiDB 中运行 set @@global.tidb_allow_mpp=1; 并滚动重启所有 TiDB 节点
2 个赞

V5.0.3升级至V5.4.2 照此步骤升级,TIFLASH 节点启动失败:有错误日志在刷,但是不知道该如何处理:/data/tidb/deploy/tiflash-9000/log/tiflash_error.log:


/data/tidb/deploy/tiflash-9000/log/tiflash_tikv.log:

升级日志:/home/tidb/.tiup/logs/tiup-cluster-debug-2022-07-11-06-17-26.log

看 tiflash_error.log 里的错误日志,应该是业务上创建了一个 int/tinyint/smallint/mediumint/bigint 类型的列,但是默认值指定了 “0.00”,导致 tiflash 启动时报错了。可以从业务上确认下最近是否有创建的表里面的默认值设置吗?

在 6.1.0 版本上提高了对这样默认值的兼容性处理(https://github.com/pingcap/tiflash/issues/3157,https://github.com/pingcap/tidb/issues/34881),如果升级到 6.1.0 版本可以不做更改的情况下启动。但是之前的版本需要 drop 掉导致问题的表后,以 “0” 为默认值重新建表,tiflash 才能顺利启动。

浏览了下你之前的帖子,应该这个问题出现很久但是一直没有解决?看报错信息,跟这个升级过程无关。

看到过文章里写,5.3版本之后不支持在线升级。

是表缺省值的原因。表都是从业务库同步过来的表,上游若不规范,这种情况可太常见了,这也是一大运维痛点。TIFLASH 缺少运维命令,删了重建再写数据,太重。应该是和升级步骤无关。有个疑问,TIFLASH 副本都是0,为何也在同步元数据,此处是否可以优化,只同步有副本的表元数据不是更好?

不是 “5.3 版本之后不支持在线升级”,而是"从小于 5.3 的版本升级到 5.3 之后的版本,不支持在线升级"。

如果想从 小于 5.3 的版本升级到 5.3 之后的版本,又希望减少对业务的影响,可以参考这里建议的步骤。后续也会更新到官网文档上的哈

哦,对,就是这个:从小于 5.3 的版本升级到 5.3 之后的版本,不支持在线升级

看来还是要升级6.1才行,本来想升一下次稳定版本,试用一段时间再升6.1的:joy:

嗯,目前官方主推的还是5.4版本啊

如果再次遇到新问题,记得发新帖咨询哟~

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。