关于以前一个帖子tikv组件全部挂掉后的疑问补充

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v4.0.10
【问题描述】
将集群的tikv的数据目录都删除后,tikv组件都down掉了,还可以插入数据,



最近测试部测试,关于这个问题有点新的疑问:
tikv数据目录删了,tikv组件也挂掉了,但是集群还能正常连接上去,建库建表,数据插入,
1、这个是因为tikv组件的进程还存在着是吧,那么tikv组件down掉和tikv进程之间的区别是什么?
2、按道理来说所有tikv数据目录没了,region也就没有了吧,怎么还能进行数据的查询与插入的呢?
3、没有存储目录的话,我们依旧建库建表,数据插入,数据存哪边了,内存嘛?
4、tikv的数据目录的作用只是用来存储数据的是嘛?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 各个状态可以参考这个 FAQ: [FAQ] TiKV 各状态 Up/Offline/Down/Tombstone/Disconnect 的关系
  2. 如果进程存在,但是删除了数据目录,那可能是 Linux 文件句柄还没有释放,所以还可以继续写入
  3. tikv 的数据目录还包括 raft 协议的一些数据信息,具体可以看下数据目录下存放的文件

嗯,好的,谢谢,那么也就是说,数据目录都删除后,进程还存在的情况下,这个时候,
一、
1、我们进行数据的查询时,是从Linux文件句柄中查询的
2、我们进行数据插入和更新时,也是插入和更新到Linux的文件句柄中
3、那么我们是不是可以这么理解:TiDB集群启动后,会将PD、tikv等组件中的region信息、元信息等信息其实都加载在Linux文件句柄中,以供我们使用,因此进程存在,这些信息也就一直存在Linux之中,所以,数据目录删除后,tikv进程依旧存在,因此可以登陆数据库,查询信息,以及插入信息
是嘛?
二、
这个tikv进程理论上来说,我们不手动kill -9 掉,应该会一直存在吧?

  1. 问题一是 Linux 操作系统的内容,可以了解下 Linux 系统句柄相关的知识
  2. tikv 进程挂掉不仅仅是 kill -9 ,如果进程自己 panic 或者 OOM 了,都有可能挂掉的

哦,好的。
问题一:
我一直都认为是因为pd、tikv、tidb的一些元数据、region信息都加载在内存中,因此,才会还可以继续访问的,这个Linux文件句柄的释放会是什么情况?
问题二:
那么也就是说,仅仅删掉tikv数据目录,然后什么也不操作的话,tikv进程是不会挂掉的,是吧,但是如果我们继续连接数据库进行操作的话,就有可能造成进程自己 panic 或者 OOM 了,进程自己也会挂掉,是吧

一: 一般系统重启了就会彻底释放文件句柄:https://shunlqing.github.io/2018/05/18/linux文件IO/
二:是的

嗯,好的,先谢谢啦

对了,我再问一下,对应的节点的tikv进程还存再,但是为什么tikv组件都是down的?我有可能陷入了一个胡同:joy:

进程存在,与 tikv 节点心跳没有上报,这两个没有联系。如果 tikv 心跳没有上报了,那超过 max-store-down-time 的时间,tikv 节点的 状态就会变为 down

好的,先谢谢啦

对了,关于这个进程自己 panic 或者 OOM,大概要到什么情况才会发生,我们这里昨天删除了tikv数据目录,也进行了一些增删改查,但是现在还是可以正常工作的,比如我文件句柄设置位1000000,这个要到什么程度,进程自己 panic 或者 OOM。:sweat_smile:

panic 是程序代码本身有 BUG 导致的
OOM:http://senlinzhan.github.io/2017/07/03/oom-killer/

好的,谢谢,辛苦啦,我再看看

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