安装TiKV组件之后,status-addr的默认端口20180没有启动,导致从v2.1.13升级到v3.0.3失败

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本:CentOS Linux release 7.6.1810 (Core)
  • TiDB 版本:v2.1.13
  • 磁盘型号:阿里云SSD
  • 集群节点分布:tidb01,tidb02 pd01,pd02,pd03,tikv01,tikv02,tikv03,tikv04,tikv05,tikv06,tikv07,tikv08,monitor
  • 数据量 & region 数量 & 副本数:数据量9.2T Region数量376744 副本数3
  • 集群 QPS、.999-Duration、读写比例:
  • 问题描述(我做了什么): 今天计划把TiDB集群做升级,从v2.1.13升级到v3.0.3,升级过程中报错: [tikv01]: Ansible FAILED! => playbook: excessive_rolling_update.yml; TASK: wait until the TiKV status page is available; message: {“attempts”: 12, “changed”: false, “content”: “”, “msg”: “Status code was -1 and not [200]: Request failed: <urlopen error [Errno 111] Connection refused>”, “redirected”: false, “status”: -1, “url”: “http://tikv01:20180/status”} 意思是tikv01的端口20180没有启动。然后我手动检查了tikv01~tikv08的20180端口,发现都没有启动。查看run_tikv.sh,发现,并没有–status-addr "tikv01:20180"这个启动参数。 请问我现在应该如何解决升级的问题,不知道升级中还有没有什么坑,从官方文档上并没有获取到相关的解决问题的文档ansible.log (128.4 KB)

请提供下 run_tikv.sh 脚本的全部内容,您那里在配置使用都是 tidb 的默认端口吗?比如上报 tikv 状态的通信端口是默认的还是自定义的?

hosts.ini (173 字节) inventory.ini (1.9 KB) run_tikv.sh (653 字节)

1、run_tikv.sh 中这个端口是在 3.0 新增的,建议在升级时,将旧版本的 tidb-ansible 的 ini 文件对照新版本的 tidb-ansible 的 ini 文件进行修改,不要直接替换。

2、在 ini 文件中,建议使用 IP 地址,不建议使用域名。这个新增参数具体格式为:–status-addr “${tikv_ip}:20180”

3、如果一定要使用域名 ,那么建议修改 tidb-ansible 相关配置, 将新版 tidb-ansible/roles/tikv/templates/run_tikv_binary.sh.j2 内容进行如下修改,并且在测试环境,测试通过后,再在生产环境执行

    --addr "0.0.0.0:{{ tikv_port }}" 
    ..............
    --status-addr "{{ my_ip }}:{{ tikv_status_port }}"    ------>  改成  "0.0.0.0:{{ tikv_status_port }}"
    ..............
    --log-file "{{ tikv_log_dir }}/{{ tikv_log_filename }}" 2>> "{{ tikv_log_dir }}/{{ tikv_stderr_filename }}"

4、升级进行到 tikv,表示之前的 pd 已经升级成功,所以可以使用 ansible-playbook xxxx.yml --skip-tags= pd 避免 pd 二次升级

你好,我把域名改成IP之后,升级遇到了 fatal: [172.19.166.249]: FAILED! => {“changed”: false, “msg”: “The tikv node of 172.19.166.249:20160 is not registered in this cluster.”} 这个问题,172.19.166.249 这个IP就是 tikv01 ,第一台KV 请问该如何解决?

建议使用 pd-ctl store -u http://${PD_IP}:${PD_PORT} 看下注册到 pd 中的 store 使用的是域名还是IP,如果是域名,那么建议通过修改 tidb-ansible/roles/tikv/templates/run_tikv_binary.sh.j2 方式进行升级

多谢,已经升级完成,没有任何问题,解释的比较专业了

1赞

如果觉得别人的问答有帮助,可以将其标记为解决方案:white_check_mark:这样其他有同样问题的人也可以快速找到答案~