最近被在多台机器上部署erlang节点测试,机器太多,开了N多putty窗口,切来换去都快搞疯了,这可不是长久之计,赶紧想办法。受mryufeng
这篇文章的提示做了些实验。
实验1:所有erlang程序只部署在一台机器(作为主节点,master),其它机器节点(称为从节点,slave)的启动都由主节点控制,同时从节点的代码都来自master
启动作为boot服务器的主节点,位于10.0.0.253,节点名为'master@10.0.0.253':
erl -kernel start_boot_server true boot_server_slaves '[{10,0,0,253},{10,0,0,252}]' -name master@10.0.0.253 -setcookie abc -rsh ssh
这些参数的解释分散在如下文档中:
引导服务器 erl_boot_server
http://erlang.org/doc/man/erl_boot_server.html
start_boot_server, boot_server_slaves:
http://erlang.org/doc/man/kernel_app.html
从节点
http://erlang.org/doc/man/slave.html
其中,
参数 -kernel start_boot_server true boot_server_slaves '[{10,0,0,253},{10,0,0,252}]' 是让主节点成为引导服务器,从节点的beam程序都将从主节点传送。
参数-rsh ssh是为了让主节点远程启动从节点(slave)必须的
然后在主节点中启动从节点(slave节点名:'slave1@10.0.0.252'):
slave:start('10.0.0.252', slave1, "-setcookie abc -loader inet -hosts '10.0.0.253' -id master@10.0.0.253").
参数 -loader inet -hosts '10.0.0.253' -id master@10.0.0.253指示引导方式以及服务器所在
在主节点上的erl测试代码
-module(hello).
-export([hi/0]).
hi() ->
Str = io_lib:format("from ~p\n", [node()]),
file:write_file("hello.txt", Str),
io:format("Hi...~n"),
okay.
只在主节点上编译上述代码(从节点上没有这些)
在主节点上远程调用,也就是说在从节点上执行主节点上的hello程序:
(foo@10.0.0.235)3> rpc:call('slave1@10.0.0.252', hello, hi, []).
Hi...
okay
可以发现生成了hello.txt文件,不过是在主节点上,文件内容为:
from 'slave1@10.0.0.252'
文件内容符合预期,但是为什么hello.txt文件不是在从节点上生成的呢,难道从节点上所有IO都转给主节点了?如果如果要求文件读写在从节点怎么办?
第一次调用hello模块被自动发送到从节点,不过在hello模块修改重新编译后,从节点上还是旧的模块,可以调用如下命令广播新模块。
c:nl(hello).
先记下问题
在我的应用中,系统是以application为单位组织的,比如前端负责处理HTTP请求的功能以一个application的方式组织,后端负责数据库管理的功能以一个application的方式组织,等等。
然后我发现,这些application也是可以在slave上远超启动,这真是太酷了!
我的开发只在一台机器上,所有所有的代码也只在一台机器上,根据需要我可以把我的程序自动发布到其它机器上,在其它机器上远程启动。
再也不需要把程序拷来拷去,然后一个个机器的远程登录,再在一个个机器上远程启动我的应用了。
现在,在热升级方面还有些疑问,因为我在master重编译了代码后,slave机器上似乎不能自动更新
to be continue...
参考资料:
1.
erlang远程控制
2.
Boot Server启动
分享到:
相关推荐
1.完成makefile,直接运行/script目录中的makefile.cmd就能编译文件 2.完成启动多节点的脚本,运行/script目录中的run.cmd可以启动3个节点, 节点的配置在/config目录config.txt中 3.完成跨节点函数的调用,记录...
erlang的高性能集群服务器,erlang解决方案。 供大家学习使用
高性能集群服务器Erlang解决方案
nkcluster, 在大型Erlang集群中,管理作业的框架 Intoduction快速入门用例和部署方案启动和发现功能操作指南请求,任务和作业类失败方案失败配置文件简介NkCLUSTER是创建任何规模的Erlang节点集群,并将它的分配和...
observer_cli, 在 命令行 上,可视化 erlang/tcm节点 observer_cli 在 命令行 基础上可视化/tcm节点上的侦察。目标提供在开发和生产设置中使用的高性能工具。关注实时运行系统的重要信息和详细信息。保持最小消耗。...
所有节点都与中央节点连通,但其他节点互不连通,怎么让其需要通讯时连通
6,安装失败,你骂我好了,并把你的ubunt版本、是否是在虚拟机和其下的虚拟机软件名称和版本与再其下的os名称和版本、硬件(cpu、memory、Mainboard、disk)等信息email给我,我帮你找能用的版本。 软件相关信息: ...
主要介绍了Erlang分布式节点中的注册进程使用实例,本文直接给出实例代码,需要的朋友可以参考下
一个用Erlang公告板系统在一个局域网内构造 BBS 集群,
● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软...
Windows下Erlang与C构建的节点通讯完整例子,包含cnode工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/40836273
北邮erlangB计算器实验报告.docx
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软...
仅需几行启动代码,您的Python程序便成为Erlang网络节点,并参与了Erlang集群。文献资料浏览 或者通过运行make docs (由Sphinx生成)来构建自己的make docs 。支持与问题因为当你绝对需要援助和电子邮件太慢的时候...
讲出Erlang网络协议并模拟网络上的Erlang节点。 完全能够与Erlang进行双向通信。 在合理范围内,Erlang类型已映射到Haskell类型。 发给Erlang的消息只是Haskell中的函数调用,而来自Erlang的消息则传递到MVars。 ...
进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
erlang 安装包
viewer_cli:在命令行上可视化ErlangElixir节点