Erlang节点连接
2014-07-30 19:55
176 查看
原文地址:http://blog.csdn.net/historyasamirror/article/details/4132160
副标题:《Programming Erlang》第十章 分布式编程 读书笔记
题外话:很久没更新blog了,前阵子又是工作忙,又是要考试,实在没精力写blog。倒是攒了不少材料,以后慢慢添吧。
这章最重要的内容就是erlang中两个节点之间的连接规则。
同一台机器上的两个节点之间的连接很简单,直接照着书上做就行了,比较麻烦的是不同机器之间节点的连接。
书中的部分代码我测试的结果是错的,猜测可能和erlang的版本有关,也有可能和环境有配置关。
首先,需要解释一下long name和short name之间的区别。
举例来说,
erl -name li@Server1.com
erl -name li@10.68.8.50
这是long name,用'-name'标识。
erl -sname li@Server1
erl -sname li
这是short name,用'-sname'标识。
从格式上来说,short name后面跟的域名不能是IP,也不能够带有‘.’,比如不能是'Server1.com'而只能是'Server1'。
从用法上来说,
如果两个节点运行在一个机器上,就用 sname,
比如'erl -sname li','erl -sname liu'
如果两个节点运行在不同的机器上,且两个机器运行在不同的网段,那么必须用long name,
比如'erl -name li@Server1.com',erlang会通过DNS解析出名字中的域名,找到对应的机器
如果两个节点运行在不同的机器上,但两个机器在同一个子网中,那么可以和上面一样用long name方式,
比如 'erl -name li@Server1.com','erl -name li@10.68.8.50'
也可以用sname,但是必须保证sname的名字在/etc/hosts中能找到对应的IP,
比如 'erl -name li@Server1',这时候/etc/hosts中需要添加 'Server1 10.68.8.51'
总而言之,如果需要用到DNS,那么必须使用long name,如果不需要用到DNS,可以使用sname,但需要设置/etc/hosts。
了解了long name和short name的区别,下面的部分就容易了。
以书中的代码为例,假设现在有两台机器A和B,静态IP分别为10.68.8.50和10.68.8.51,机器名分别为Server1.aaa.com和Server2.aaa.com,且在同一个子网中,那么可以实验如下操作:
方案1:
A,B: erl -sname gandalf@10.68.8.50/51
结果:错误,如果域名是IP,必须是-name
方案2:
A: 设置/etc/hosts,添加 'Server2 10.68.8.51'
erl -sname gandalf@Server1 -setcookie abc
......
kvs:start().
B: 设置/etc/hosts,添加 'Server1 10.68.8.50'
erl -sname bilbo@Server2 -setcookie abc
> rpc:call(gandalf@Server1, kvs, store, [weather, fine]).
结果: 正确输出。
方案3:
A: erl -name gandalf@10.68.8.50 -setcookie abc
......
kvs:start().
B: erl -name bilbo@10.68.8.51 -setcookie abc
> rpc:call(’gandalf@10.68.8.50‘, kvs, store, [weather, fine]).
结果: 正确输出。
注意:在rpc:call中,gandalf@10.68.8.50必须加上单引号,否则识别不了正确的IP
方案4:
A: erl -name gandalf@Server1.aaa.com -setcookie abc
......
kvs:start().
B: erl -name bilbo@Server2.aaa.com -setcookie abc
> rpc:call(gandalf@Server1.aaa.com, kvs, store, [weather, fine]).
结果: 如果DNS能够解析Server1.aaa.com,那么结果正确。否则找不到对应的节点。
副标题:《Programming Erlang》第十章 分布式编程 读书笔记
题外话:很久没更新blog了,前阵子又是工作忙,又是要考试,实在没精力写blog。倒是攒了不少材料,以后慢慢添吧。
这章最重要的内容就是erlang中两个节点之间的连接规则。
同一台机器上的两个节点之间的连接很简单,直接照着书上做就行了,比较麻烦的是不同机器之间节点的连接。
书中的部分代码我测试的结果是错的,猜测可能和erlang的版本有关,也有可能和环境有配置关。
首先,需要解释一下long name和short name之间的区别。
举例来说,
erl -name li@Server1.com
erl -name li@10.68.8.50
这是long name,用'-name'标识。
erl -sname li@Server1
erl -sname li
这是short name,用'-sname'标识。
从格式上来说,short name后面跟的域名不能是IP,也不能够带有‘.’,比如不能是'Server1.com'而只能是'Server1'。
从用法上来说,
如果两个节点运行在一个机器上,就用 sname,
比如'erl -sname li','erl -sname liu'
如果两个节点运行在不同的机器上,且两个机器运行在不同的网段,那么必须用long name,
比如'erl -name li@Server1.com',erlang会通过DNS解析出名字中的域名,找到对应的机器
如果两个节点运行在不同的机器上,但两个机器在同一个子网中,那么可以和上面一样用long name方式,
比如 'erl -name li@Server1.com','erl -name li@10.68.8.50'
也可以用sname,但是必须保证sname的名字在/etc/hosts中能找到对应的IP,
比如 'erl -name li@Server1',这时候/etc/hosts中需要添加 'Server1 10.68.8.51'
总而言之,如果需要用到DNS,那么必须使用long name,如果不需要用到DNS,可以使用sname,但需要设置/etc/hosts。
了解了long name和short name的区别,下面的部分就容易了。
以书中的代码为例,假设现在有两台机器A和B,静态IP分别为10.68.8.50和10.68.8.51,机器名分别为Server1.aaa.com和Server2.aaa.com,且在同一个子网中,那么可以实验如下操作:
方案1:
A,B: erl -sname gandalf@10.68.8.50/51
结果:错误,如果域名是IP,必须是-name
方案2:
A: 设置/etc/hosts,添加 'Server2 10.68.8.51'
erl -sname gandalf@Server1 -setcookie abc
......
kvs:start().
B: 设置/etc/hosts,添加 'Server1 10.68.8.50'
erl -sname bilbo@Server2 -setcookie abc
> rpc:call(gandalf@Server1, kvs, store, [weather, fine]).
结果: 正确输出。
方案3:
A: erl -name gandalf@10.68.8.50 -setcookie abc
......
kvs:start().
B: erl -name bilbo@10.68.8.51 -setcookie abc
> rpc:call(’gandalf@10.68.8.50‘, kvs, store, [weather, fine]).
结果: 正确输出。
注意:在rpc:call中,gandalf@10.68.8.50必须加上单引号,否则识别不了正确的IP
方案4:
A: erl -name gandalf@Server1.aaa.com -setcookie abc
......
kvs:start().
B: erl -name bilbo@Server2.aaa.com -setcookie abc
> rpc:call(gandalf@Server1.aaa.com, kvs, store, [weather, fine]).
结果: 如果DNS能够解析Server1.aaa.com,那么结果正确。否则找不到对应的节点。
相关文章推荐
- erlang分布式之节点自动连接相关问题
- Erlang节点的连接
- erl0007 - erlang 远程节点连接的两种方式
- erlang分布式之节点自动连接相关问题
- [Erlang危机](4.0)连接远程节点
- ERLANG 节点(node)
- 学习banana的博文--无线网络,两节点(TCP连接,FTP应用)
- 如何使用erlang 的shell 访问远程节点
- Weblogic在Linux上节点服务器启动正常,计算机连接不上
- erlang节点通信小测试
- 1个物理机同时搭建2个erlang虚拟节点,不能启用 +A600选项
- 用自己创建的镜像run一个节点,连接有问题
- 10G RAC节点2宕机通过修改listener.ora实现客户端通过节点2VIP连接到数据库
- hyperledger多物理节点连接
- [Latax] PGF and Tikz连接节点(node)的方式示例
- 数据库组件 Hxj.Data (二十五)(数据库连接配置 - connectionStrings节点)
- Erlang的hidden节点
- jenkins中连接slave节点遇到Password change required but no TTY available问题
- erlang多节点name conflict
- [Erlang_Question27]如何监控指定目录下的*.beam文件,如果有改动就更新到指定的节点?