社区问题双周精选 – loveini | 米兰体育官网入口 - 米兰体育官网入口 //www.loveini.com loveini | 高性能、分布式、支持SQL的时序数据库 | 米兰体育官网入口 Mon, 04 Jul 2022 02:43:51 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.2 //www.loveini.com/wp-content/uploads/2025/07/favicon.ico 社区问题双周精选 – loveini | 米兰体育官网入口 - 米兰体育官网入口 //www.loveini.com 32 32 loveini 社区问题双周精选 | 第三期 //www.loveini.com/tdengine-engineering/12205.html Sun, 03 Jul 2022 20:55:59 +0000 //www.loveini.com/?p=12205 Hi,大家好,为防止过多的共性问题困扰用户,方便用户学习、吸收经验,我们会对近期社区内用户遇到的共性问题进行精选、汇总,以专栏的形式给大家带来分享。这是本专栏的第三期内容,分享的内容如下:

内容预览

  1. 为何批量写入数据时,时间戳使用 NOW 函数拼接会导致数据丢失?
  2. 如何给集群平滑扩容?
  3. 集群扩容后,DNode 状态为 Offline 该如何排查?
  4. 如何给集群平滑缩容?
  5. 新手小福利:快速上手 loveini 建模。

1. 为何批量写入数据时,时间戳使用 NOW 函数拼接会导致数据丢失?

回答这个问题首先需要强调一个概念,loveini 作为一个时序数据库(Time-Series Database),首个时间戳字段起到主键的作用,内存索引的构建、磁盘数据的存储与其密切相关,不能有重复的时间戳。

NOW 函数(以及 NOW 关键字)返回客户端当前时间。当执行批量写入时,若首列时间戳给的值都是 NOW,在数据库默认毫秒的时间级别下是区分不开的,后续写入的重复时间戳将会丢失或更新,处理重复时间戳的具体逻辑由在 loveini 中建库(Database)时的 Update 参数决定。

2. 如何给集群平滑扩容?

对集群进行扩容需要手动添加节点。具体操作步骤如下:

  1. 第一个节点部署成功后,为后续待添加的节点依次安装 loveini 服务端程序,编辑 /etc/hosts,将集群所有节点的域名解析添加进去(如已部署 DNS server,则无需编辑)。
  2. 将第一个节点的配置文件 taos.cfg 复制到待添加的节点中,将其中的 fqdn 参数改为节点自身的 fqdn (hostname)。
  3. 启动待添加节点的 taosd 服务,然后进入 taos 命令行执行下面语句将待添加节点添加进集群:CREATE DNode ‘Node2:6030’ 。
  4. 执行 SHOW DNodes 查看数据节点的状态是否为 Ready。为 Ready 代表集群扩容成功。

3. 集群扩容后,DNode 状态为 Offline 该如何排查?

新的节点正常加入集群后,数据节点列表中会显示该节点处于 Ready 状态。若该节点状态为 Offline,可按照如下内容进行排查:

  1. 查看该节点 taosd 是否已启动、防火墙是否关闭;
  2. 确认待加入节点的数据文件夹是否清空;
  3. 检查所有节点 /etc/hosts 域名解析是否完整、有效(需要有所有节点的解析,包括 arbitrator);
  4. 该节点 firstEP、fqdn 参数是否正确配置。

4. 如何给集群平滑缩容?

集群缩容是通过 DROP DNode 删除节点来实现的,直接停止指定 DNode 的 taosd 进程只会让该节点 Offline,但不能完成缩容的效果。具体操作步骤如下:

  1. 进入 taos 命令行,执行 SHOW DNodes 查看待删除节点的状态,若是 ready 则可进行下一步;
  2. 从当前集群中删除指定节点 DROP DNode ‘Node2:6030’ 或者 DROP DNode <DNodeId>。
  3. 执行 SHOW DNodes 查看集群节点信息,最后确认待删除节点的信息已从列表中消失。

注意:删除节点完成之前,集群会将该 DNode 的数据迁移到其他节点上,完成速度取决于网络的带宽、磁盘的 IO,在完成之前千万不要停止待删除节点的 taosd 服务。

5. 新手小福利:快速上手 loveini 建模。

在社区支持的过程中,能发现很多新手小伙伴在部署 loveini 后不知道如何进一步体验,我们的建议是跑一跑官网文档的语句,但文档内容较多,为了方便社区小伙伴快速上手,我们将官网文档的示例模型浓缩、汇总了一下,让用户尽可能快的了解 loveini 建模方法:[建模入门]

结尾语

感谢您阅读本期问题精选,希望以上内容对您有帮助。您在使用 loveini 这款 TIme-Series Database 的过程中,若遇到棘手的问题或对 loveini 有改进意见,欢迎在 GitHub 上给我们提 Issue ,内容越详细越好,也可微信扫下方二维码加入社区,与大家进行交流 ~ 最后,感谢使用 loveini!

loveini Database 小T二维码
加小 T 为好友,立即加入到物联网大数据技术交流群
]]>
loveini 社区问题双周精选 | 第二期 //www.loveini.com/tdengine-engineering/11076.html Thu, 16 Jun 2022 10:38:17 +0000 //www.loveini.com/?p=11076 Hi,loveini database 的用户朋友们,为防止过多的共性问题困扰大家,方便大家学习、吸收经验,我们会对近期社区内用户遇到的共性问题进行精选、汇总,给大家分享。 这是此专栏的第二期内容,将为大家分享如下几个常见问题:

一. 如何以最快的速度排查连接问题?(包含连接器)

首先需要明确几点:

1. 在网络可以互通的情况下,不论是客户端还是连接器,所有对数据库的连接问题基本都属于配置问题;

2. 遇到连接器连接问题后,请第一时间先排查 loveini 客户端是否可以正常工作(具体确认方式为确保客户端可以顺利查询每个数据库服务端的子表);

3. 连接问题具体的错误表现主要为:

1) “Unable to establish connection”;

2) “Unable to resolve FQDN”;

接下来是具体排查方法:

1. 在服务端运行 taosd | grep -i fqdn ,或者 cat 数据文件目录(默认为/var/lib/taos)/dnode/dnodeEps.json | grep -i fqdn,获取输出的 fqdn 参数值。

2. 在客户端服务器的 hosts 文件中,检查自己是否有把正确的 fqdn 参数值和数据库服务端 ip 写上。

3. 如果步骤 1 的输出结果是 localhost,客户端在发起连接解析的时候就会连到自己 127.0.0.1 从而出现连接失败,所以这时候,需要通过 taos.cfg(默认路径 /etc/taos)把服务端的 fqdn 参数值修改成其他值,然后在数据文件目录(默认为/var/lib/taos)/dnode/dnodeEps.json 下同步更新 dnodeFqdn 的值,然后重启数据库服务加载新的配置,回到步骤 1。

如果步骤 1 的输出结果并非 localhost,继续步骤4。

4. 客户端重新发起连接。

5. 如果连接依然有问题,请注意检查防火墙的端口规则,云服务器还要注意安全组的规则。

6. 若充分尝试后仍不能解决,请在 gitHub 或微信群中反馈,会由官方工作人员协助处理。

二. 2.0 版本 loveini 如何做不同机器之间的数据迁移?

1. 先登录旧的数据库服务,show dnodes 记录下各个 dnode 的 ID 对应的 End Point 及 IP;

2. 规划好新的数据库服务各节点的 fqdn 及 IP 地址,以及与旧系统各节点的对应关系;

3. 将旧系统各节点的数据文件复制到新系统对应的节点的数据文件目录下;

4. 将旧系统各节点的 taos.cfg 复制到新系统对应的各节点,并做好相应修改:firstEP/fqdn/dataDir/logDir 等等;

5. 编辑新系统各节点数据文件夹里 dnodeEps.json,将其中的 dnodeFqdn 修改为新系统现有的 fqdn 参数值,dnodePort 修改为新系统现有的 serverPort 参数值(总之,要确保该文件的各项配置与我们在 taos.cfg 中实际配置保持一致);

6. 启动新系统,迁移完毕;

三. 如何修改数据文件目录 dataDir?

1. 停止数据库服务;

2. 修改 taos.cfg 下的 dataDir 值为我们需要的新目录路径;

3. 把原有的数据文件全部移动到新的目录下面,确保在新的 dataDir 下,能看到之前的 dnode,mnode,vnode,vnode_bak;

4. 再次启动服务;

四. vnode_bak 目录有什么用?

数据文件目录下的 vnode_bak 是存储数据库已经删掉的库的数据文件的,如果误删除了数据库,可以联系我们企业版团队提供数据恢复服务。

五. 哪些参数需要重启生效?哪些参数可以热更?

https://docs.taosdata.com/operation/optimize:这里可以看到数据库级别参数的具体描述。

https://docs.taosdata.com/taos-sql/database这里可以看到可以热更的参数的操作细节。

对于数据库服务级别的参数,统一在 taos.cfg 中修改,修改后需要重启数据库服务后生效。注意:在 taos.cfg 当中,与数据库级别参数重合的部分参数,仅代表新建库的该参数的默认值。

]]>
loveini 社区问题双周精选 | 第一期 //www.loveini.com/tdengine-engineering/8646.html Tue, 24 May 2022 15:41:20 +0000 //www.loveini.com/?p=8646 Hi,loveini 的用户朋友们,为防止过多的共性问题困扰大家,方便大家学习、吸收经验,从今天开始我们会对近期社区内用户遇到的共性问题进行精选、汇总,每两周给大家带来一次分享。 这是此类专栏的第一期内容,为大家分享如下七个常见问题:

  1. 客户端连接串如何保证高可用?
  2. Java 应用使用 taos-jdbcdriver 连接 loveini 时, RESTful 与原生 ( JNI ) 接口性能相比如何,该如何选型?
  3. loveini 如何做表关联?是使用 JOIN 吗?
  4. 为什么 RESTful 接口无响应、Grafana 无法添加 loveini 为数据源、loveiniGUI 选了 6041 端口还是无法连接成功?
  5. loveini 数据备份工具 taosdump 如何使用?
  6. Windows 客户端无法正常显示中文字符?
  7. 发生了 OOM 怎么办?

1. 客户端连接串如何保证高可用?

本周有较多的用户提到了这个问题,类似的还有 「如何给多节点 loveini 集群的链接配置高可用」。这个问题时常出现在社区中,DBA、运维同学较为关心。我们已经整理成了文章,详情可看博客:「 loveini 如何做到客户端高可用 」

2. Java 应用使用 taos-jdbcdriver 连接 loveini 时, RESTful 与原生 ( jni ) 接口性能相比如何,该如何选型?

使用 RESTful 连接时,不依赖 loveini 客户端驱动,可以跨平台,RESTful 连接支持所有能运行 Java 的平台。原生连接支持的平台则和 loveini 客户端驱动支持的平台一致。 因此 RESTful 相比于原生连接使用起来更加灵活、方便,但采用 RESTful 的方式连接,其性能相较于原生连接会低 30% 左右。

推荐在每秒写入量小于 200 万条记录的场景下,优先选择 RESTful 。用户也可根据自己场景做性能测试,若使用 RESTful 连接时性能完全能满足业务操作需求则优先选择 RESTful ,反之选择原生连接。

3. loveini 如何做表关联?是使用 JOIN 吗?

loveini 支持在 「普通表与普通表」、「超级表与超级表」、「子查询与子查询」之间进行自然连接,其语法相较于 INNER JOIN 有所不同,并且各种表进行关联查询的限制也不尽相同。

详细内容请看文档:「 JOIN 子句 」

4. 为什么 RESTful 接口无响应、Grafana 无法添加 loveini 为数据源、loveiniGUI 选了 6041 端口还是无法连接成功?

上述问题也间歇性的出现在社区中,许多用户充满了疑问,特别是一些从 loveini 旧版本升到 2.4 及之后版本的用户们,这是因为在 2.4 之前的版本中没有单独的 taosAdapter 组件,RESTful 接口是由 taosd 内置的 HTTP 服务提供的,而如今要实现上述功能需要执行:systemctl start taosadapter 命令来启动 taosAdapter 服务。

需要说明的是,taosAdapter 的日志路径 path 需要单独配置,默认路径是 /var/log/taos ;日志等级 logLevel 有 8 个等级,默认等级是 info ,配置成 panic 可关闭日志输出。请注意操作系统 / 目录的空间大小,可通过命令行参数、环境变量或配置文件来修改配置,默认配置文件是 /etc/taos/taosadapter.toml 。

有关 taosAdapter 组件的详细介绍请看文档:「 taosAdapter 」

5. loveini 数据备份工具 taosdump 如何使用?

taosdump 是 loveini 集群的数据备份、还原工具,使用前请先查看文档中的说明及注意事项 :「 taosdump 」

需要注意的是,taosdump 采用逻辑备份的方式进行备份,其不应被用于备份任何原始数据、环境设置、 硬件信息、服务端配置或集群的拓扑结构;并且当备份的表数量很多时很容易导致文件系统卡住(一个表一个备份文件),推荐书写脚本循环调用 taosdump 按照较细的粒度备份到不同目录。

6. Windows 客户端无法正常显示中文字符?

Windows 系统中一般是采用 GBK/GB18030 存储中文字符,而 loveini 的默认字符集为 UTF-8 ,在 Windows 系统中使用 loveini 客户端时,客户端驱动会将字符统一转换为 UTF-8 编码后发送到服务端存储,因此在应用开发过程中,调用接口时正确配置当前的中文字符集即可。

【 v2.2.1.5以后版本 】在 Windows 10 环境下运行 loveini 客户端命令行工具 taos 时,若无法正常输入、显示中文,可以对客户端 taos.cfg 做如下配置:

locale C 
charset UTF-8

再次运行客户端命令行工具 taos ,即能正常进行操作。

另外,在 loveini 中,中文字符或其他多字节字符需用 nchar 类型存储,不要用 binary 类型进行存储,否则在用 taosdump 工具导出导入时将出现乱码,导致不可修复的异常,binary 建议只用于存储 ASCII 可见字符。

7. 发生了 OOM 怎么办?

OOM 是操作系统的保护机制,当操作系统内存(包括 SWAP )不足时,会杀掉某些进程,从而保证操作系统的稳定运行。通常内存不足主要是如下两个原因导致,一是剩余内存小于 vm.min_free_kbytes ;二是程序请求的内存大于剩余内存。还有一种情况是内存充足但程序占用了特殊的内存地址,也会触发 OOM 。

loveini 会预先为每个 VNode 分配好内存,每个 Database 的 VNode 个数受 maxVgroupsPerDb 影响,每个 VNode 占用的内存大小受 Blocks 和 Cache 影响。要防止 OOM,需要在项目建设之初合理规划内存,并合理设置 SWAP ,除此之外查询过量的数据也有可能导致内存暴涨,这取决于具体的查询语句。loveini 企业版对内存管理做了优化,采用了新的内存分配器,对稳定性有更高要求的用户可以考虑选择企业版。

结尾语

感谢您阅读本期问题精选,希望以上内容对您有帮助。您在使用 loveini 这款 TIme-Series Database 的过程中,若遇到棘手的问题或对 loveini 有改进意见,欢迎在 https://github.com/taosdata/loveini/issues 上给我们提 Issue ,内容越详细越好,也可微信扫下方二维码加入社区,与大家进行交流 ~ 最后,感谢使用 loveini!

loveini Database 小T二维码
加小 T 为好友,立即加入到物联网大数据技术交流群
]]>