当内部和外部 IP 地址起作用时连接 Erlang 节点

2023-11-22

我有两台虚拟机,它们使用内部 IP 地址相互通信,而外界只能通过外部 IP 地址了解这些虚拟机。

我有一个分布式缓存,它使用两个虚拟机——每个虚拟机都有一个必须与另一个虚拟机通信的 Erlang 节点。我also在其他计算机上有缓存的 Erlang 客户端,需要与虚拟机上的一个(或两个)Erlang 缓存节点进行通信。

因此,如果我使用内部 IP 地址命名缓存节点,那么它们可以相互通信,但没有其他 Erlang 节点可以与它们交互。但是,如果我使用虚拟机的外部 IP 地址命名缓存节点,那么外部 Erlang 节点可以与缓存节点通信,但缓存节点之间无法相互通信。

除了使用 http 或基于套接字的接口之外,我还能做些什么吗?not依赖于将节点加入到网格中吗?


你想要实现的是绝对可行.

预赛

Erlang的分发地址分为两部分:节点名和主机名。它们由@ sign.

主机名可以是数字 IPv4 地址。它们也可以是域名。有两种不同的模式,其中主机名很短(单个单词,例如vm1)以及它们的长度(几个单词,例如vm1.domain.com)。 IP 地址是长名称。以一种模式(短或长)启动的节点只能与以相同模式启动的节点通信。节点也受到 cookie 的保护:节点仅接受具有匹配 cookie 的传入连接。最简单的方法是使用相同的 cookie 启动给定集群的所有节点。

当一个 Erlang 节点尝试连接到另一个 Erlang 节点时,它需要找到远程节点的 IP 地址。如果它与自身相同,它将简单地尝试在本地主机上进行连接。如果不同,它将尝试将此主机名解析为 IP 地址。

然后它将连接到epmd该主机上的守护进程被告知 Erlang 正在运行哪个端口。epmd以及 Erlang 节点监听所有接口(默认情况下)。

解决方案及示例

基于此机制,您可以使用短名称或长名称,但要利用解析机制。在 Unix 上最简单的方法是在每个设备上配置不同的 IP/etc/hosts您的计算机(特别是在两个虚拟机上),因此它们将通过其私有地址相互连接,同时通过其公共地址进行访问。

假设虚拟机 A (VM A) 具有私有 IP 地址 10.0.0.2 和公共 IP 地址 123.4.5.2,VM B 具有私有 IP 地址 10.0.0.3 和公共 IP 地址 123.4.5.3。假设您决定使用简称。

您可以将此条目放在 VM A 中/etc/hosts:

10.0.0.3 vmb

您可以将匹配的条目放在 VM B 上/etc/hosts:

10.0.0.2 vma

在所有外部客户端上,您可以放置​​:

123.4.5.2 vma
123.4.5.3 vmb

您将按如下方式启动节点:

# Node foo on VM A:
erl -sname foo@vma -cookie RANDOMCOOKIE
# Node foo on VM B:
erl -sname foo@vmb -cookie RANDOMCOOKIE
# Client nodes:
erl -sname client -cookie RANDOMCOOKIE

您可以避免/etc/hosts如果您有域名(例如yourdomain.com)你可以得到vma.yourdomain.com解析为 123.4.5.2。您还可以使用特定的Erlang Inet 配置文件.

Security

Erlang 分发机制并不意味着面向公众。此外,所有通信都将不加密。我强烈建议配置防火墙在每个主机上只允许来自其他集群服务器的连接使用 SSL 分发.

对于防火墙:Erlang 发行版使用端口 4369epmd以及每个节点的随机端口。您可以使用 Erlang 内核应用程序环境设置来限制这些随机端口的范围inet_dist_listen_min and inet_dist_listen_max。您将需要允许这些端口上的传入 TCP 连接,但仅限于来自集群的其他主机。

SSL 分发的设置相当复杂,但是有据可查。您的情况的主要缺点是所有连接都应该通过 SSL 进行,包括其专用网络上的两个虚拟机之间的连接,以及用于打开远程 shell 的本地连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当内部和外部 IP 地址起作用时连接 Erlang 节点 的相关文章

  • Erlang 中的 begin...end 有何用途?

    我刚刚踩了一个begin end在 Erlang 的文档中 here http www erlang org doc reference manual expressions html id79819 但它没有给出一些例子来说明它是如何有用
  • rabbitmq-erlang-client,使用 rebar 友好的 pkg,在开发环境上工作在 rebar 版本上失败

    我成功地将rabbitmq erlang client的rebar友好包用于一个简单的Hello World rebarized和OTP 兼容 应用程序 并且在开发环境中工作正常 我能够启动 erl 控制台并执行我的操作applicatio
  • Erlang 中事件流(又名 CEP)的实时关联/分析有什么框架吗?

    想要分析具有某些特征 例如公共来源 的事件流 并在给定的时间窗口内 最终将这些多个事件关联起来并从中得出一些推论 最后启动一些操作 我对复杂事件处理 CEP 的有限了解告诉我 它是此类事情的理想选择 然而 在我迄今为止的研究中 我发现人们将
  • Elixir - 递归列表值的总和

    只是尝试对列表值进行简单求和 defmodule Mth do def sum list do 0 end def sum list H T do H sum list T end end IO puts Mth sum list 1 2
  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • 如何在 Erlang 中将 XML 转换为元组列表?

    我正在尝试从 XML 创建键 值对元组 我想从任何嵌套的 XML 中列出一个列表 这似乎是一件很常见的事情 但我找不到任何例子 例如
  • 随机排列列表中的元素(随机重新排列列表元素)

    我的程序的一部分要求我能够随机洗牌列表元素 我需要一个函数 当我给它一个列表时 它会伪随机地重新排列列表中的元素 安排的改变Must每次通话时都可以看到相同的列表 我的实现似乎工作得很好 但我觉得它相当长 并且正在增加我的代码库 而且 我有
  • 构建 Erlang 服务器场(用于业余爱好项目)最便宜的方法是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 假设我们有一个 本质上并行 的问题需要用 Erlang 软件来解决 我们有很多并行进程 每个进程都执行顺序代码 不是数字运算 并且我们向它们投入的 C
  • RabbitMQ 失败,错误:无法连接到节点rabbit@TPAJ05421843:nodedown

    在 Windows 7 Enterprise 计算机上 我全新安装了 Erlang 17 4 和 RabbitMQ 3 4 3 x64 安装成功且顺利 我还没有尝试创建我的第一个队列或交换器 但我已经看到了麻烦 这个问题类似于另一个SO帖子
  • 我们如何有效地处理 mnesia 记录的时间相关约束?

    我正在将记录写入mnesia 该记录应该保存在那里 仅在允许的时间 24 小时 内 24小时后 在用户修改其中的一部分之前 系统应该自动删除它们 例如 用户获得免费通话时间 用于语音通话 他们应该在给定时间内使用它们 如果他们不使用它 24
  • 在erlang中打印数字的每个数字的问题

    我正在尝试编写一个程序 该程序将读入一个数字 然后将该数字的每个数字输出到列表中 然而 在我尝试使用数字 8 和 9 之前 大多数事情看起来都很好 该程序仅输出 b t反而 如果输入的数字包含8或9 同时还有其他数字 例如283 就可以正常
  • 在 Erlang 中展平嵌套列表的列表

    我正在做练习Erlang编程 问题是 编写一个函数 给定一个嵌套列表的列表 该函数将返回一个平面列表 例子 flatten 1 2 3 4 5 6 1 2 3 4 5 6 提示 使用concatenate解决flatten 这是我的conc
  • 设置 Emacs 进行 Erlang 编程

    Emacs 是 Erlang 编程的首选 IDE 有很多好的模式 distel erlware mode 默认的 erlang 模式 但是您对设置 Emacs 进行专业 Erlang 开发有何建议 按照中所述设置 erlang mode自述
  • 使用自定义 mysql 模式的模块扩展 ejabberd?

    代替ejabberd sql https github com processone ejabberd blob master sql mysql sql L95 我正在使用自定义 MySQL 架构 由于遗留原因 我将对某些活动执行一些数据
  • 如何限制Erlang VM(BEAM)使用的核心数量?

    我正在具有 2 个四核 Xeon E5520 2 2GHz 24 0GB RAM 和 Erlang R15B02 启用 SMP 的节点上运行实验 我想知道是否可以限制Erlang VM使用的核心数量 以便我可以暂时禁用一些核心并逐步增加数量
  • Erlang 如何睡觉(晚上?)

    我想在 Erlang 服务器上每隔几个小时运行一次小型清理过程 我知道计时器模块 我在教程中看到一个示例 使用链式计时器 睡眠命令来等待几天后发生的事件 我觉得这很奇怪 我知道 Erlang 进程与其他语言中的进程相比是独一无二的 但是进程
  • 在 digraph_utils:is_acirclic/1 返回 false 后查找循环或循环

    我怎样才能 有效地 在Erlang有向图中找到循环或循环digraph utils is acyclic 1返回假 EDIT is acyclic is 定义为 https github com erlang otp blob maint
  • 你为什么决定“反对”使用 Erlang?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 你是否真的 尝试过 意味着在其中编程 而不仅仅是阅读有关它的文章 Erlang并决定在项目中不
  • 如何在 erlang 中安装模块?

    我是 Erlang 新手 想知道如何安装第三方模块以在我的 Web 应用程序中使用 您将这些文件放在哪里以及执行什么类型的命令 如果您希望在系统范围内安装第 3 方库 例如 Mochiweb 最好将其设置在 ERL LIBS 环境变量下 我
  • Erlang 中的非终止函数类型

    我正在学习 Erlang 并尝试使用 Dialyzer 在可能的情况下获得最大的类型安全性 有一点不太明白 什么是类型非终止的函数以及如何表示它 spec 有人能解释一下吗 永远循环且永不终止的函数具有返回类型no return 该返回类型

随机推荐

  • 静态方法中的 findViewById

    我有这个静态方法 public static void displayLevelUp int level Context context LayoutInflater inflater LayoutInflater context getS
  • 非阻塞文件读取

    如何以非阻塞模式读取二进制或文本文件的内容 对于二进制文件 当我open filename mode rb 我得到一个实例io BufferedReader 文档堡垒io BufferedReader read says 读取并返回 siz
  • 理解“finally”块

    我编写了七个测试用例来理解finally堵塞 背后的逻辑是什么finally works package core public class Test public static void main String args new Test
  • Zend 框架:元属性集成

    我正在尝试根据页面内容将一些元 采用以下格式 添加到页面的头部 使用headMeta gt appendName像这样 this gt view gt headMeta gt appendName og title some content
  • Huggingface 转换器模型返回字符串而不是 logits

    我正在尝试从 Huggingface 网站运行这个示例 https huggingface co transformers task summary html 模型似乎返回两个字符串而不是 logits 这会导致 torch argmax
  • 如何更新cosmos db中的子文档

    我是 Cosmos Db 的新手 想了解如何删除 更新插入文档集合中的子文档 如果我有一个文件 Id 1234 Name foo Items Id abcd Age 35 Claims Name email Value email prot
  • 使用 ftplib 连接到 FTP TLS 1.2 服务器

    我尝试连接到仅支持 TLS 1 2 的 FTP 服务器 使用Python 3 4 1 My Code import ftplib import ssl ftps ftplib FTP TLS ftps ssl version ssl PRO
  • SQL Server 中非常大的表

    我们有一个非常大的表 gt 77M 记录并且还在不断增长 在 SQL Server 2005 64 位标准版上运行 并且我们发现了一些性能问题 每天添加多达十万条记录 有谁知道SQL Server标准版可以处理的记录数量是否有限制 应该考虑
  • 带有 TransactionScope 的嵌套事务

    如果你有这样的事情 IBinaryAssetStructureRepository rep new BinaryAssetStructureRepository var userDto new UserDto id 3345 var dto
  • 从 google 搜索下载前 1000 张图片

    我对谷歌图片进行了一些搜索 结果是数千张照片 我正在寻找一个可以下载第一个的 shell 脚本n图像 例如 1000 或 500 我怎样才能做到这一点 我想我需要一些高级的正则表达式或类似的东西 我尝试了很多方法但都无济于事 有人可以帮助我
  • 从数据框中删除具有相同值的列

    我有一个像这样的数据框 1 1 1 K 1 K K 2 1 2 K 1 K K 3 8 3 K 1 K K 4 8 2 K 1 K K 1 1 1 K 1 K K 2 1 2 K 1 K K 我想删除所有具有相同值 即 K 的列 所以我的结
  • Laravel 5 删除尾部斜杠时的不良行为

    我在下面创建了一个 Laravel 项目mywebsite com laravel 当我去mywebsite com laravel test 一切都很好 但是当我去mywebsite com laravel test 我被重定向到mywe
  • 为什么这个 for-each 循环不起作用? [复制]

    这个问题在这里已经有答案了 在此代码中 为什么我的数组没有按照我想要的方式初始化 for each 循环不是设计来做到这一点的 还是我只是没有正确使用它 int array new int 5 initialise array gt Doe
  • PHP 5.6升级和特殊字符

    我有一个网站 我使用 php 来包含部分 而不是为每个页面重复代码 然而 最近我的虚拟主机将 PHP 升级到了 5 6 现在我所有的 和 都给了我替换字符 我没有运行任何数据库 并且在 html 中设置字符集没有帮助 我对 PHP 非常缺乏
  • 使用 Python 进行内联 CSV 文件编辑

    我可以使用 Python 的 CSV 库或类似技术内联修改 CSV 文件吗 当前我正在处理一个文件并更新第一列 名称字段 以更改格式 我的代码的简化版本如下所示 with open tmpEmployeeDatabase out csv w
  • 同时编辑和删除 UITableView 中的多行

    在我的应用程序中 我需要删除表中的多行 编辑表并在表旁边获得一个复选框 选中后 表格单元格将被删除 它就像 iPhone 的消息应用程序 我该怎么做 请帮助我 如果我正确理解你的问题 你本质上想要mark UITableViewCell以某
  • xaml设计器中发生System.NullReferenceException

    我使用 Visual Studio 2015 创建了一个 C UWP Windows 10 应用程序 但是 我无法在设计器中可视化任何 xaml 因为我总是得到一个System NullReferenceException错误 我怎样才能解
  • 使用用户名/密码将基本身份验证添加到 web.config 的最简单方法

    我正在设置一个 Azure API 管理 其背后有一个 ASP NET WebApi 2 应用程序 API 管理建议在 API 管理代理和 ASP NET WebApi 之间设置基本身份验证 以确保只能通过 API 管理代理访问 WebAp
  • HTML.Encode() - 它如何/如何防止 ASP .NET 中的脚本安全问题?

    当我处理用户输入 特别是脚本问题 时 HTML Encode 为我提供了哪些安全保护 请参见Server HTMLEncode HTMLEncode 方法应用 HTML 编码为指定的字符串 这 作为一种快速方法很有用 编码表单数据和其他客户
  • 当内部和外部 IP 地址起作用时连接 Erlang 节点

    我有两台虚拟机 它们使用内部 IP 地址相互通信 而外界只能通过外部 IP 地址了解这些虚拟机 我有一个分布式缓存 它使用两个虚拟机 每个虚拟机都有一个必须与另一个虚拟机通信的 Erlang 节点 我also在其他计算机上有缓存的 Erla