【操作流程】
选取一台服务器创建/data/tiup-mirror目录,计划通过httpd服务暴露。chown tidb.apache /data/tiup-mirror
chmod 755 /data/tiup-mirror
配置并启动httpd服务,监听端口3999,/data/tiup-mirror为server跟目录
切换tidb用户执行tiup mirror clone /data/tiup-mirror --full
全量镜像克隆完毕后到其他TiDB执行机进行镜像设置:tiup mirror set http://<镜像服务器地址>:3999
【问题】
执行tiup cluster相关指令遇到如下报错:
tiup is checking updates for component cluster ...timeout(2s)!
Error: unknown component
最初clone镜像时我是在后台夜间跑的不确定是否成功,早上来了重复执行了一遍clone发现只更新了新的4个tiup tar包,于是认为成功了。
首次在其他机器设置镜像后,最开始的报错是:
tiup is checking updates for component cluster ...timeout(2s)!
Error: read manifest from mirror(http://xxxx:3999) failed: invalid signature for file timestamp.json: not enough signatures (0) for threshold 1 in timestamp.json
于是再次clone了几次。
之后尝试把root.json先wget到本地,然后tiup mirror set http://xxxx:3999 -r /绝对路径/root.json
才出现了以上报错,之后reset几次不指定root.json报错依旧。
有猫万事足
2023 年8 月 3 日 03:04
3
感谢各位回复,经过多次尝试发现了问题所在,目前的解决方式为:
1.在镜像机添加脚本进行快速clone全量更新:
#!/bin/sh
# 更新tiup镜像仓库,使本地镜像与官方镜像仓库保持一致
# 镜像服务器更新必须使用官方镜像,因此这里需要先进行reset,最后reset为本地镜像方便平时验证
tiup=/home/tidb/.tiup/bin/tiup
su - tidb -c "${tiup} mirror set --reset"
su - tidb -c "${tiup} mirror clone /data/tiup-mirror --os linux --arch amd64,arm64 --jobs 32 --full"
su - tidb -c "${tiup} mirror set /data/tiup-mirror"
2.在镜像机本地验证:
tiup list tidb
可以确认所有版本的tidb已列出。
3.其他机器使用私有镜像时必须:
3.1)wget http://xxx:3999/root.json -O /home/tidb/.tiup/root.json
3.2)tiup mirror set http://xxx:3999 -r /home/tidb/.tiup/root.json
上述root.json位置随意,我这里放在.tiup目录下。
4.镜像机定期使用步骤1的脚本来更新镜像
5.镜像机每更新一次镜像,使用者都需要跟进执行第3步中的两个命令(缺一不可)
目前看来全量clone会更新镜像服务器的root.json,导致使用者验证失败,但是不使用clone又更新不了镜像库(不加–full会导致产品信息被清空,即tiup list显示为空)。
我想通过共享root.json可以避免3.1的步骤,但是3.2不可避免,勉强的解决办法是镜像库保持低频更新,客户端保持略高频的mirror set…
希望未来版本有所优化。
2 个赞
system
(system)
关闭
2023 年10 月 2 日 09:40
7
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。