在一台机器上控制Erlang集群节点的实验1

本文分享了使用Erlang进行远程部署的经验,通过设置主节点(master)作为引导服务器,实现代码仅部署于主节点而从节点(slave)通过远程控制启动及运行,简化了多机部署流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近被在多台机器上部署erlang节点测试,机器太多,开了N多putty窗口,切来换去都快搞疯了,这可不是长久之计,赶紧想办法。受mryufeng[url=http://mryufeng.iteye.com/blog/133816]这篇文章的提示[/url]做了些实验。

实验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. [url=http://mryufeng.iteye.com/blog/133816]erlang远程控制[/url]
2. [url=http://avindev.iteye.com/blog/100113]Boot Server启动[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值