为什么推荐将 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.mzph.cn/diannao/11208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS - 选择器

目录 一、CSS的基本语法格式: 二、常见的CSS选择器 ​编辑1.标签选择器 2.类选择器 3.id选择器 4.复合选择器 5.通用选择器 三、常见的CSS样式 1.color 2.font-size 3.border 4.width/height 5.padding 6.margin 四、CSS的引入方式 1.行内引入 …

Tableau-BI仪表盘搭建

目录 经营数据总览 经营数据详情 每日营收数据 每日流量数据 新老客占比 平台占比 门店占比 投放情况 订单分布 配送分布 汇总搭建仪表板 构思仪表盘布局 经营数据总览 数据总览表,显示的是数据,就拖入文本中,其他同样加入到已经…

开源免费的定时任务管理系统:Gocron

Gocron:精准调度未来,你的全能定时任务管理工具!- 精选真开源,释放新价值。 概览 Gocron是github上一个开源免费的定时任务管理系统。它使用Go语言开发,是一个轻量级定时任务集中调度和管理系统,用于替代L…

JavaEE初阶-多线程5

文章目录 一、线程池1.1 线程池相关概念1.2 线程池标准类1.3 线程池工厂类1.4 实现自己的线程池 二、定时器2.1 java标准库中的定时器使用2.2 实现一个自己的定时器2.2.1 定义任务类2.2.2 定义定时器 一、线程池 1.1 线程池相关概念 池这个概念在计算机中比较常见&#xff0c…

[笔试训练](十九)

目录 055:小易的升级之路 056:礼物的最大价值 057:对称之美 055:小易的升级之路 小易的升级之路_牛客题霸_牛客网 (nowcoder.com) 题目: 题解: 根据题意简单模拟即可,可单独写gcd函数求最大公因数。 int gcd(int a, int b) { if (…

数字水印 | 基于小波变换的数字水印技术

🍍原文: 基于小波变换的数字水印技术 🍍写在前面: 本文属搬运博客,自己留存学习。 正文 小波变换 把一个信号分解成由基本小波经过移位和缩放后的一系列小波,它是一种 “时间——尺度” 信号的多分辨率分…

Linux进程间通信——匿名管道和命名管道

文章目录 一、引言二、管道的基本原理1、管道的定义与结构2、管道的工作原理 三、匿名管道(Anonymous Pipe)1、匿名管道的概念2、匿名管道的创建与使用3、匿名管道的读写规则4、匿名管道的特点5、使用匿名管道实现进程池 四、命名管道(Named …

计算机视觉——基于改进UNet图像增强算法实现

1. 引言 在低光照条件下进行成像非常具有挑战性,因为光子计数低且存在噪声。高ISO可以用来增加亮度,但它也会放大噪声。后处理,如缩放或直方图拉伸可以应用,但这并不能解决由于光子计数低导致的低信噪比(SNR&#xff…

【Spring】@ServerEndpoint 与 Spring 是如何集成的

文章目录 前言表象理解后记更多文章 前言 最近工作需要用到 Websocket 协议。好奇来自 Jdk 包的 ServerEndpoint 是如何与 Spring Boot 集成的,特此记录一下结论。 表象 如果要暴露形如 ws://${ip}:${port}/ws 的服务地址,用于websocket 通信&#xf…

STC8增强型单片机开发——串口调试UART

一、什么是串口 串口是一种在数据通讯中广泛使用的通讯接口,通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter),其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中,串口常用于与外部设备…

关于Speech processing Universal PERformance Benchmark (SUPERB)基准测试及衍生版本

Speech processing Universal PERformance Benchmark (SUPERB)是由台湾大学、麻省理工大学,卡耐基梅隆大学和 Meta 公司联合提出的评测数据集,其中包含了13项语音理解任务,旨在全面评估模型在语音处理领域的表现。这些…

基于深度学习神经网络的AI图像PSD去雾系统源码

第一步:PSD介绍 以往的研究主要集中在具有合成模糊图像的训练模型上,当模型用于真实世界的模糊图像时,会导致性能下降。 为了解决上述问题,提高去雾的泛化性能,作者提出了一种Principled Synthetic-to-real Dehazing (…

Windows 跨服务器进行 MYSQL备份脚本

Windows 服务器进行 MYSQL备份的脚本,使用该脚本前,请先测试一下 1、新建一个文本文档 2、将下面代码放入文本文档中,保存退出 echo off :: 命令窗口名 title mysql-bak:: 参数定义 set "Y%date:~,4%" set "m%date:~5,2%&qu…

【计算机网络篇】数据链路层(9)使用集线器的共享式以太网

文章目录 🛸使用同轴电缆的共享总线以太网 🎆使用集线器的共享式以太网🥚集线器的特点 🍔10BASE-T星型以太网 🛸使用同轴电缆的共享总线以太网 若总线上的某个机械连接点接触不良或断开,则整个网络通信就不…

Nginx part3 创建一个https的网站

目录 HTTPS 公钥和密钥 加密解密方式: https搭建步骤 强调一下 1、准备环境 2、配置文件 3、制作证书 4、进行设置 HTTPS 啥是https,根据百度:HTTPS (全称:Hypertext Transfer Protocol Secure)&a…

HCIE学习笔记----OSPF详解

OSPF邻居建立的条件 OSPF建立邻居“41”条件总结 4个一致 一个不一致 1.保证接口的前缀 网络信息一致 2.保证ospf区域号和区域类型一致 3.hello包间隔时间和死亡时间一致 4.认证类型和认证认证信息一致 5.路由器的ID不一致 保证唯一性 一-----OSPF 邻接关系建立过程与状…

耦合协调分析模型

耦合协调分析模型(Coupling Coordination Analysis Model)是一种用于评估两个或多个系统之间相互作用和协调性的数学模型。广泛应用于多个领域,包括但不限于社会科学、经济学、环境科学和工程学。耦合协调分析模型的核心在于量化系统间的耦合…

本地项目上传到gitee

1. 新建仓库,不要勾选 2. git init git add . git commit -m "test" git remote add origin 【url】 git push --set-upstream origin master

MySQL·索引

目录 索引的意义 索引的理解 为何IO交互要是 Page 理解Page 其他数据结构为何不行? 聚簇索引 VS 非聚簇索引 索引操作 主键索引操作 唯一键索引操作 普通索引的创建 总结 全文索引 索引的意义 索引:提高数据库的性能,索引是物美…

css backdrop-filter 实现背景滤镜

官方给出的定义是:backdrop-filter属性允许您将图形效果(如模糊或颜色偏移)应用于元素后面的区域。因为它适用于元素后面的所有内容,所以要查看元素或其背景的效果,需要透明或部分透明。 大致分为以下10种&#xff1a…