我一直在一台机器上学习 Riak,并且可以访问 Erlang 节点集群(在 Ubuntu 9 上)。使用远程代码加载如何将 Riak 安装到所有远程节点上?
例如,假设我有一个 Erlang 节点集群。其中一个节点安装了 Riak。我可以做一些类似 nl(riak) 的事情来将 Riak 安装到其他节点上。
我一直在一台机器上学习 Riak,并且可以访问 Erlang 节点集群(在 Ubuntu 9 上)。使用远程代码加载如何将 Riak 安装到所有远程节点上?
例如,假设我有一个 Erlang 节点集群。其中一个节点安装了 Riak。我可以做一些类似 nl(riak) 的事情来将 Riak 安装到其他节点上。
由于我们添加了Innostore并嵌入了 Javascript 引擎, Riak 不再是一个纯粹的 Erlang 应用程序。这意味着通过 Erlang 的远程代码加载安装将不起作用。如果您在同构集群上运行 Riak,您应该能够通过“make rel”构建一个 OTP 版本,将版本复制到集群中的每台机器,并调整 app.config 和 vm.args 以适应。
引导服务器理论上可以工作,但我不知道有谁以这种方式运行 Riak。如果您决定尝试一下,我们 (Basho) 很乐意通过riak-users邮件列表提供帮助。
简短的回答是:你不能。
远程代码加载在模块(而不是应用程序)级别上运行。Riak 由几个 Erlang 模块组成,并且需要一些依赖项。
nl(riak)
本质上在所有连接的节点上加载一个模块。
长答案是:你可以,但不要这样做。
实际上,您可以收集与 Riak 关联的模块列表,然后远程加载这些模块并通过网络配置 Riak。该application
模块可能会对此有所帮助。这种方法的问题在于,如果远程节点出现故障或重新启动,您将需要再次传输所有模块并重复配置。
如果一定要涉及到某种“远程加载” ,你应该在远程机器的某个地方安装 Riak $ERL_LIBS
,这样加载过程就可以通过rpc:call/4
.
Afaik,为此有 erl_boot_server 模块。我从未使用过(或尝试过)它,但它看起来就是你要找的东西: http ://erldocs.com/R13B03/kernel/erl_boot_server.html?search=erl&i=0