为什么推荐将 IoTDB 服务地址配置为 HostName 而非 IP?

148421cb4267f84273de39f7abf3ef8c.jpeg

设置主机名启动 IoTDB 可在不修改配置情况下,在不同环境运行 IoTDB 并实现多次部署。

01

前言

IoTDB 在配置启动时有两种方式:

1. 通过设置 HostName(主机名)的方式来启动 IoTDB(推荐方式);

2. 通过设置 IP 的方式来启动 IoTDB。

因为设置主机名要修改 hosts 文件多一步操作,所以可能有的用户更习惯于设置 IP 的方式来启动 IoTDB。本文将结合一个典型场景:集群迁移,来解答这些用户可能会产生的困惑:

  • 什么是 HostName(主机名)?和 IP 的关系是怎样的?

  • IoTDB 启动为什么推荐使用主机名?使用主机名相较于 IP 会带来什么样的好处?

02

集群迁移背景

集群迁移:在部署 IoTDB 后,可能会遇到某些情况导致需要将部分/全部的 IoTDB 节点从旧机器迁移到新机器上。

IoTDB 迁移影响最大的是网络,因为几乎所有的集群在启动时都会更改:

  • cn/dn_internal_address 参数(IoTDB 内部通信需要使用的网络地址);

  • cn/dn_seed_config_node 参数(seed_config_node 的网络地址。初次启动时使用,所有的节点都必须向其发送注册信息,以此来表示自己要加入该集群);

  • dn_rpc_address参数(Session 和 Cli 连接 DataNode 使用的网络地址)。

而这三个参数都是启动后不可修改的参数

如果你尝试去关闭一个 ConfigNode/DataNode,修改 cn/dn_internal_address 并重新启动,是会报出如下错误的:

2c2528c6abdfa940626edda4a5164a38.png

这主要是因为对于一个 IoTDB 集群来说,集群间的节点 RPC 通信需要通过网络,因此在 IoTDB 内部维护了一张节点编号->网络地址的表。节点重启并不会改变该节点的编号,但是如果更改了网络地址,那么会和已经存在的表冲突,进而导致启动的失败。

03

主机名与 IP

(1)IoTDB 用 IP 来做什么? 

如图所示,IoTDB 节点间通信是通过 thrift RPC 来实现的,在 thrift 的传输层(Transport)时使用 Socket,Socket 的建立需要 IP 与 port。

04fff8cdb195a5a492309ca7aab80180.png

(2)IP 、域名、主机名、DNS

IP:一个 32 位的二进制数(IPv4)用于在一个在网络通信中用于确定一台主机。但是其可读性却比较差,并且无实际含义,不利于记忆。因此设计出了主机名、域名以及域名解析系统(DNS)来解决这一问题。

主机名:识别网络上的主机。

域名:识别网站。主机名是域名的最前部分(例如 www.timecho.com 是域名,其中 www 是主机名)。

无论是主机名还是域名,都是为了方便人去访问网络上的其他设备,都可以理解为 IP 地址的别名。

DNS:是将域名和主机名解析成对应 IP 地址的服务器。

举个例子:如果没有 DNS,你要访问天谋科技的主页需要通过在导航栏输入 123.56.10.29(IP),而通过 DNS 只需要输入 www.timecho.com (域名)即可访问。域名将通过 DNS 解析成对应的 IP。如果有一天可能由于某些原因更换了官网的 IP 地址,你仍然可以通过域名访问天谋科技的主页,因为 DNS 会将其解析成新的 IP 地址。

一个 DNS 的解析过程如下图所示,先尝试进行本地的解析工作,之后再由本地 DNS 服务器去迭代的解析。本地解析优先级会高于 DNS 解析,这样会加快整体的解析过程,在本地解析的过程中,会去查看 hosts 文件

650b6a377c8e816a903dddff0fdb53e6.png

(3hosts 文件

hosts 文件:保存主机名IP 的映射关系。

  • Windows 系统,hosts 文件位置:

C:\Windows\System32\drivers\etc\hosts
  • Linux 系统,hosts 文件位置:

/etc/hosts

04

主机名启动 IoTDB 

与 IP 启动 IoTDB 的区别

我们可以很容易理解设置 IP 地址可以让 Socket 建立,进而使得 IoTDB 节点间能够通信,进而启动 IoTDB。

(1)主机名为什么能启动 IoTDB 呢?

前文已经说过,IoTDB 启动后会维护节点编号->网络地址的表。之所以用主机名也能表示网络地址,主要是 java.net 中 InetAddress 类支持解析主机名。如下所示,调用 NameService 就会通过 DNS 解析(用到 hosts 文件)的方式得到其 IP 地址。  

/etc/hostsprivate static InetAddress[] getAddressesFromNameService(String host, InetAddress reqAddr) throws UnknownHostException {... ...if ((addresses = checkLookupTable(host)) == null) { // 是否正在解析该host ?等待try {for (NameService nameService : nameServices) {try {addresses = nameService.lookupAllHostAddr(host); // 向该域名服务请求域名解析success = true;break; // 只要有一个域名服务成功解析host则退出循环} catch (UnknownHostException uhe) {// 1. 若host = localhost,则addresses = [loopbackAdress] & 退出循环// 2. 否则准备抛异常(addresses = unknown_array & success = false & 记录uhe) & 继续循环                    ... ...}}// 若reqAddr不为空 && addresses中存在与reqAddr相等的InetAddress,则将该InetAddress挪到第一个位置            ... ...cacheAddresses(host, addresses, success); // 缓存记录// 域名解析失败则抛异常uhe            ... ...} finally {updateLookupTable(host); // 唤醒所有等待解析该host的线程        }}return addresses;
}

这样对于 IoTDB 来说,表保留 IP 地址或者主机名都能够成功的建立网络连接

(2)两种启动方式的区别

假设我们启动了一个 1C1D 的 IoTDB。

IP 启动

0 号节点是 ConfigNode,1 号节点是 DataNode。各自有一张表记录节点编号->网络地址。通过 IP 来使 Socket 连接,达成通信。

64a36899230c512db198e986ed2ff259.png

主机名启动

同样 0 号节点是 ConfigNode,1 号节点是 DataNode。各自有一张表记录节点编号->网络地址。Socket 通过主机名访问 hosts 文件解析出真实的 IP 地址后建立 Socket 连接。

437368d9a8b1129bfef42a26debc5dc6.png

小结

正所谓遇到不好解决的问题的时候,多加一层就可以解决。多加的这层就是主机名的解析,通过这层解析,做到在不修改 IoTDB 内部网络通信表的情况下,访问不同的 IP 地址(就像前文中访问 www.timecho.com 的例子一样)。

05

集群迁移步骤

接下来通过一个实际的集群迁移步骤来说明两种启动方式在集群迁移过程中的区别。

(1)集群迁移(通过 HostName 启动 IoTDB)

如果通过 HostName 启动 IoTDB,只需要在新的机器上修改 hosts 文件中 域名 对应的 IP 地址,启动 IoTDB 即可,详细步骤如下:

1. 假设已经通过 1.3.x 集群版 IoTDB 安装部署了一个 3C3D 的 IoTDB 集群,其 hosts 文件内容如下:

28a37c5a907d063bc66b2a833412dfd0.png

(部署教程可见:

https://timecho.com/docs/zh/UserGuide/latest/QuickStart/ClusterQuickStart.html)

2. 启动 3C3D 集群,这里通过 IP 地址连接(也可以通过 -h iotdb 2),验证我们所连接集群的 IP 地址。

ff596bd7ae0400ba34dff5d685de3e61.png

3. 向三个节点分别插入数据,并验证此时的数据是可以查询的。

79ea79ce6cf44b957ce251d7b47a69f5.png

4. 关闭 3C3D 集群,并将他们上传至新的机器上,新机器的 hosts 文件内容如下:

ec529710f48ff15b06023eff3ed805d5.png

5. 在新机器上启动 3C3D 集群,这里通过 IP 地址连接(也可以通过 -h iotdb 2),验证我们所连接集群的 IP 地址。

c29211fe5e70dd3714263931f6b90a8b.png

6. 查询 region 和数据,均可查,说明集群迁移成功

9cbc1258ed651f1a4bc8e0c461230d88.png

(2)集群迁移(通过 IP 启动 IoTDB)

如果通过 IP 地址启动了 IoTDB 集群,由于网络参数项不可更改,想迁移某个节点只能通过:

1. 在旧机器上 remove 该节点(如果该节点含有大量的数据,所有的数据都需要迁移进别的节点);

2. 在新机器上启动一个全新的节点(此时所有的负载均衡均需要重新计算)。

如果是迁移整个集群,就得在所有的节点上执行上述的操作,整个操作非常的繁琐并且浪费了大量的资源进行节点间的数据迁移。并且在上述迁移 3C3D 集群的例子中,你甚至无法通过该方式迁移,因为迁移前后的两个集群网络上不通。此时只能将 3C3D 的所有数据信息(tsfile)分别 load 进新的集群。做一个数据迁移,而非集群迁移

06

总结

希望读者能通过这篇文章能理解网络连接在 IoTDB 启动过程中的作用,能清楚设置主机名启动和设置 IP 启动两种方式在 IoTDB 建立网络连接时的联系和区别。

通过设置主机名启动实现了不修改 IoTDB 的配置,能在不同环境上运行相同的 IoTDB,不但可以直接将整个 IoTDB 打包多次部署,也可以在遇到问题时将打包发给开发人员调试问题。

强力推荐所有的 IoTDB 用户都通过设置主机名的方式来启动 IoTDB!

强力推荐所有的 IoTDB 用户都通过设置主机名的方式来启动 IoTDB!

强力推荐所有的 IoTDB 用户都通过设置主机名的方式来启动 IoTDB!

重要的事情说三遍。

2d9bd0a0bb298e315b9a61e25f7db0ac.gif

a87b947c85c3bbc64ea658da8a57d62a.jpeg

d6ffed08cc808508da78c3c7347991d4.jpeg

814a9e68d36cd4823fb3f38c008b7b36.jpeg

9f1d1f56605d3c067709b716fc71f39e.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421192.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

物联网设计竞赛_2_Ubuntu联网配置

采用nat配置 随便定义一个VMnet虚拟网络接口,定义成nat模式 如果主机用的校园网,那么虚拟机发送消息将通过nat转换,转换成用户校园网ip进行发送,发送到校园网路由器再经过nat转换成公网ip访问互联网 点击NAT设置和DHCP设置记录好…

【Mac】Perfectly Clear Workbench(智能图像清晰修复软件)安装教程

软件介绍 Perfectly Clear Workbench是由Athentech Imaging开发的一款图像处理软件,旨在帮助用户快速、轻松地优化和改善数字照片的质量。以下是Perfectly Clear Workbench的一些主要特点和功能: 1.自动图像优化 该软件采用先进的图像处理算法&#xf…

2024年如何选什么版本FL Studio才适合自己编曲?

fl studio是什么软件 水果编曲软件 FL Studio,全称为Fruity Loops Studio,是一款全能音乐制作环境或数字音频工作站(DAW),集编曲、录音、剪辑、混音等多种功能于一身。 FL Studio最初名为Fruity Loops,因…

APP 脱壳处理

前言 一,加壳的原理 二,壳的分类 三,脱壳实践 3.1 一代壳:frida-dexdump 安装: pip install frida-dexdump运行: frida-dexdump -U -f com.jiuxianapk.ui这里的 com.jiuxianapk.ui 就是app的包名&#xf…

[Algorithm][回溯][全排列][子集] + 回溯原理 详细讲解

目录 0.原理讲解1.全排列1.题目链接2.算法原理详解3.代码实现 2.子集1.题目链接2.算法原理详解3.代码实现 0.原理讲解 回溯算法通常⽤于解决组合问题、排列问题和搜索问题等回溯算法的基本思想: 从⼀个初始状态开始,按照⼀定的规则向前搜索,…

14.CAS原理

文章目录 CAS原理1.什么是CAS2.Unsafe类中的CAS方法2.1.获取UnSafe实例2.2.调用UnSafe提供的CAS方法2.3.调用Unsafe提供的偏移量相关2.4.CAS无锁编程2.4.1.使用cas进行无锁安全自增案例 CAS原理 由于JVM的synchronized重量级锁设计操作系统内核态下的互斥锁的使用,其…

【CSP CCF记录】202112-1 序列查询

题目 过程 第一次提交 暴力求解&#xff0c;运行超时&#xff0c;50分 #include<bits/stdc.h> using namespace std; int n,N; int main() {cin>>n>>N;int A[n1];A[0]0;for(int i1;i<n;i){cin>>A[i];}int f[N];int sum0;for(int i0;i<N;i){fo…

HCIP-Datacom-ARST自选题库_07_割接【35道题】

一、单选题 1.在割接的测试阶段&#xff0c;符合以下哪一种情况的可以判断为割接成功? 网络承载的上层应用业务测试正常 网络设备的配置查看结果正常 网络流量路径正常 路由协议运行正常 2.在割接的测试阶段中&#xff0c;表明已经完成测试的标准是: IP设备的配置查看结…

Oracle 数据库

前言 今天开始学习 Oracle 数据库&#xff0c;这是实习公司要求的&#xff0c;虽然还没开始实习&#xff0c;但是事先熟练到岗之后就不需要再花费时间学习了。有了 MySQL 的基础&#xff0c;学习 Oracle 应该问题不大&#xff0c;不过 MySQL 一些进阶的内容依然需要再精进一下。…

【原创】nnUnet V1在win11下的安装与配置

安装之前可以先了解一下论文的主要内容&#xff0c;便于之后网络训练与推理&#xff0c;调试程序。 论文地址&#xff1a;nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation | Nature Methods 也可以从其他博客快速浏览&#xff1a…

google test 使用指南

目录 测试项目 calculator.h calculator.cpp test01.cpp 创建新项目 选择Google Test 选择要测试的项目 pch.cpp 加入依赖 设为启动项目 ​编辑 运行 ​编辑 关键点 测试项目 calculator.h #ifndef __CALCULATOR_H__ #define __CALCULATOR_H__#include <i…

创新案例|为何农夫山泉创新战略升级为一家零售科技公司

农夫山泉上市的消息被公之于众后&#xff0c;几乎所有人都将目光投向了这家国内家喻户晓的饮料公司&#xff0c;谁都想第一时间内窥探它的庐山真面目。 当然&#xff0c;在此之前已经有多路消息通过旁敲侧击&#xff0c;从管窥中获取了一些农夫山泉的真实数据。 去年6月&…

【2024新版】龙年新版ui周易测算网站H5源码/在线起名网站源码/运势测算网站系统源码

>>>功能说明&#xff1a; 1、系统配置&#xff1a;系统基本配置、测算价格配置、在线预约配置、系统信息配置、代理分成配置、推广积分配置、VIP价格配置、账号管理 2、推广管理&#xff1a;我的信息、推广链接、订单管理、体现管理 3、付费应用&#xff0c;订单管…

【C语言项目】贪吃蛇(下)

个人主页~ 源码在Gitee仓库~ 上一篇贪吃蛇&#xff08;上&#xff09;~ 贪吃蛇 四、核心的实现游戏测试1、GameStart&#xff08;1&#xff09;控制台窗口大小和名字设置&#xff08;2&#xff09;光标隐藏&#xff08;3&#xff09;打印欢迎界面&#xff08;4&#xff09;创建…

富阳区石弹村全景图-没拍到景点内容

- - - 石梯山庄旁停车场拍摄 建议雨后去 整个山到处都是消息 整座山都在渗水

云原生技术解析

云原生的概念 云原生是一种软件架构和部署方法&#xff0c;旨在利用云计算的优势&#xff0c;以更灵活、可扩展和可靠的方式构建和部署应用程序。它主要关注在容器、微服务、自动化和持续交付等方面。 云原生技术是指以云计算作为基础&#xff0c;以平台和工具为依托&#xff0…

鸿蒙HarmonyOS开发:List列表组件的使用详解及案例演示(二)

文章目录 一、List组件简介1、List组件2、ListItem组件3、ListItemGroup组件 二、使用ForEach渲染列表三、设置列表分割线四、设置List排列方向五、索引值计算规则六、示例演示1、AlphabetIndexer组件2、代码3、效果 一、List组件简介 在我们常用的手机应用中&#xff0c;经常…

Redis继续(黑马)

Redis持久化 RDB与AOF RDB记录是二进制数据&#xff0c;Redis停机时会触发保存&#xff0c;名称&#xff1a; dump.rdb 缺点&#xff1a;间歇式复制可能存在宕机数据更新丢失 AOF 记录的写操作命令&#xff0c;每秒记录一下&#xff0c;也存在数据更新丢失的可能&#xff0c;相…

7. path路径绘制:使用path绘制曲线

曲线在SVG中通常是通过贝塞尔曲线命令来绘制的&#xff0c;包括二次贝塞尔曲线&#xff08;Q&#xff09;和三次贝塞尔曲线&#xff08;C&#xff09;。这些命令允许我们创建平滑的曲线路径。 贝塞尔曲线的原理 贝塞尔曲线的基本原理是通过控制点和锚点来定义一条曲线的形状。…

Shell循环语句之while

一.while语句 重复测试某个条件&#xff0c;只要条件成立则反复执行 whlie 条件测试操作 do 命令序列 done 示例&#xff1a; 1.计算1到100所有整数的和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和、奇数和…