文档章节

erlang节点的启动

光风霁月
 光风霁月
发布于 2014/05/27 14:18
字数 919
阅读 192
收藏 0

    Erlang VM实例又叫做节点。一旦两个或两个以上的Erlang节点能够互相感知,我们就说它们形成了一个集群。默认情况下,Erlang集群是一个全联通网络。


    只要给erl加上命令行参数-name(长名称)或-sname(短名称)就可以以分布式模式启动Erlang节点。

    长名称方式会以你起的名字加上本机的主机名形成一个完全限定域名(fully qualified domain names)形式的节点名。例如,本机主机名为'john.example.com',-name后的参数为'node1',则该节点的名称为'node1@john.example.com'。

     以长名称或短名称启动,shell左边的提示字符串里包含了节点名,也可以在shell上输入'node()'查看。没有使用长名称或短名称启动,节点名为'nonode@nohost'。

    短名称方式,就不会形成完全限定域名形式的节点名。还是以上述为例,-sname后的参数为'node2',则该节点的名称为'node2@john '。

    采用短节点名和长节点名的节点所处的通信模式是不同的,它们之间无法形成集群。无论采用长名称或短名称,单台主机上的'@'前的名称不能相同,否则会崩溃。


    一个节点不会主动检测其他节点。必须由应用告知本节点去连接某个其他节点。然而一旦探测到了别的节点,本节点便会跟踪它们并与之交换已经和自己建立了连接的其他节点的信息,从而促成全联通网络的形成。例如,假设节点A和B组成了一个集群,C和D组成了一个集群,如果A和D相遇,它们就会互相交换B和C的信息,最终4个节点会共同形成一个更大的网络。内置函数nodes()告诉你本节点连接上的其他节点。

  

    EPMD代表Erlang端口映射守护进程(Erlang Port Mapper Daemon)。你每启动一个节点,它都会检查本地机器上是否运行着EPMD(开机是不会启动的),如果没有,节点就会自动启动EPMD。EPMD会追踪在本地机器上运行的每个节点,并记录分配给它们的端口。当一台机器上的Erlang节点试图与某远程节点通信时,本地的EMPD就会联络远程机器上的EMPD(默认使用TCP/IP,端口为4369),询问在远程机器上有没有叫相应名字的节点。如果有,远程的EMPD就会回复一个端口号,通过该端口便可以与远程节点通信。


    本地节点如何知道远程节点所在的主机地址的?个人猜想和节点名称'@'后面的域名部分有关。可能通过系统API,gethostbyname(域名),获得远程节点的主机的IP地址。


     分布式Erlang实现了一个简单的安全机制,防止未授权的远程机器上的节点访问本机节点。这个安全机制要求集群里的所有Erlang节点必须有相同的magic cookie。最简单的做法是在你的home目录(Windows下,被环境变量$HOME所指示,Unix下,cd命令所指示)下生成一个.erlang.cookie文件。该.erlang.cookie需要包含相同的一行atom。例如:

$ cd
$ cat > .erlang.cookiethis_is_very_secret
$ chmod 400 .erlang.cookie

    Unix环境下,.erlang.cookie文件只能够被所有者读,这是强制要求的。

© 著作权归作者所有

下一篇: gen_event
光风霁月
粉丝 8
博文 12
码字总数 7051
作品 0
闵行
程序员
私信 提问
RabbitMQ集群Erlang知识扩展

Erlang是 一种通用的面向并发的编程语言 Erlang的推出则是为了打造一款高并发高扩展性的实时系统。例如应用于电信,银行,商业,即时通讯等场合。Erlang的运行时系统内置了对并发,分布式,容...

OpenStack2015
2017/03/01
0
0
[Erlang 0033] 接入Erlang控制台的几种方法

在window中调试的时候我们可以通过启动多个cmd窗口运行Erlang节点,在生产环境中我们需要Erlang服务在Centos服务器上后台运行;这就需要在启动的时候添加启动参数detached来脱离终端: -detach...

唐玄奘
2017/12/03
0
0
新文章 联系 订阅 管理 [Erlang 0123] Erlang EPMD

epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相当多的内容讲epmd,epmd是什么呢? epmd 是Erlang Port Mapper Daemon的缩写,全称足够明确表达...

唐玄奘
2018/01/03
0
0
Erlang 通过 TLS 的分布式

什么是Erlang分布式? “分布式协议”的意思是由多个Erlang节点组成的一个集群。当Erlang的节点被组成集群后,任何的进程都可以发送信息去任意节点去执行,并且可以在任意的节点上产生新的进程...

leeyi
2016/07/19
3.6K
3
erlang 利用 ssh 远程执行 shell 命令

erlang 实现了 对 ssh 的支持,本文只讲述我自己对所理解的ssh 模块的部分理解,如果错误,烦请指出,万分感谢。 使用 ssh 模块,先要启动 ssh 功能: ssh:start()。erlang 的 ssh 分为 clie...

问天小凯
2016/09/04
136
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
16
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部