Erlang子节点代码加载
Posted gohuge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Erlang子节点代码加载相关的知识,希望对你有一定的参考价值。
目的
完成基于Erlang-slave节点启动后代码从master节点获取实践。
官方引导资料
1、引导服务器 erl_boot_server
http://erlang.org/doc/man/erl_boot_server.html
2、start_boot_server和 boot_server_slaves:
http://erlang.org/doc/man/kernel_app.html
3、从节点相关
http://erlang.org/doc/man/slave.html
实践步骤
1、采用ct_slave模块,模块封装了通过ssh启动远端子节点的相关业务
ct_slave:start(‘127.0.0.1‘, slave,[{username, "username"},{password, "password"}]).
但该函数有bug,在ssh链接时传入的nodename没有包含host需要修改下面代码才能正常运行
ssh_connection:exec(SSHConnRef, SSHChannelId, get_cmd(enodename(Host, Node), ErlFlags), infinity).
2、通过salve模块,模块运行需要启动ssh服务 -rsh ssh 以及erl_boot_server的相关服务
slave:start(‘127.0.0.1‘, slave1, "-setcookie abc -loader inet -hosts ‘10.0.0.1‘ -id [email protected]").
3、常用参数说明
-setcookie abc 同一个集群cookie必须相同;
-loader inet -hosts ‘10.0.0.1‘ -id [email protected]指示引导方式以及服务器所在
net_adm ping_list 建立和master的链接:(通过slave启动不需要填写,通过zm_slave启动则需要)
-mnesia_dir mnesia地址
4、Master启动
erl -kernel start_boot_server true boot_server_slaves ‘[{10,0,0,1},{10,0,0,2}]‘ -name [email protected] abc -rsh ssh
其他情况
1、{erl_prim_loader,"no server found"} 表示boot_server 启动了,但是未添加子节点
2、{error,timeout},表示boot_server没有启动。
3、编译了新的代码需要广播 c:nl(hello)。
4、slave节点启动会执行master的.erlang脚本,需要做好验证;
5、增加代码路径 -env ERL_LIBS ../deps,否则需要nl广播至其他节点。
以上是关于Erlang子节点代码加载的主要内容,如果未能解决你的问题,请参考以下文章
spacetree组织架构图 实现异步加载子节点,和定制化内容展示
spacetree组织架构图 实现异步加载子节点,和定制化内容展示