最近被在多台机器上部署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启动
分享到:
相关推荐
- **集群能力**:Erlang支持集群全连通或分区连通,允许节点间的灵活扩展和热插拔,集群规模可达上千台机器。 - **容错性**:Erlang提供了一种称为“let it crash”的理念,即当某个进程发生故障时,可以通过监控...
- **透明分布支持**:Erlang程序可以在不同机器之间无缝通信,如同在同一台计算机上一样。 - **轻量级进程支持**:每个进程占用的内存非常小,可以创建数十万甚至更多进程。 - **系统信息完善**:ERTS提供了丰富的...
- **启动集群**:在第一台服务器上,使用`rabbitmqctl join_cluster`命令将节点加入集群,指定其他节点作为集群伙伴。随后,重复此过程,将其他节点加入集群。 - **配置策略**:在集群中,可能需要配置高可用策略,...
3. **分布式**:RabbitMQ可以轻松地扩展到多台机器,形成集群,提供高可用性和负载均衡。 **otp_src_22.1.tar.gz** - Erlang OTP (Open Telecom Platform) 是Erlang的标准库和开发框架,包含了Erlang虚拟机、编译器...
2. **分布式计算**:Erlang天生支持分布式计算,节点间通信简单高效,可以在多台机器上构建分布式应用。 3. **容错性**:Erlang的错误处理机制鼓励“失败即恢复”(fail-stop)策略,当一个进程出错时,它会立即...
2. **分布式Erlang**:如何在多台机器上部署和管理Erlang集群,实现跨节点的进程通信。 3. **行为模式**:如GenServer、GenEvent和Supervisor,它们提供了一种组织和管理Erlang进程的标准方式。 4. **性能优化**:...
1. 集群组建:通过在多台服务器上部署RabbitMQ,并配置节点间的通信,形成一个集群。集群中的节点可以是磁盘节点或内存节点,前者用于持久化消息,后者则更注重性能。 2. 节点同步:RabbitMQ使用镜像队列策略,确保...
2. **集群与容错**:Erlang支持透明的分布式计算,可以在多台机器上进行部署,且具有内置的容错机制。当某个进程失败时,系统可以自动恢复,保证服务的连续性。 3. **模式匹配**:Erlang中的模式匹配是其语法的一个...
消息队列是分布式系统中的一种重要技术,它用于在不同组件之间传递消息,实现解耦、异步处理和负载均衡。RabbitMQ是一款广泛应用的消息中间件,基于AMQP(Advanced Message Queuing Protocol)协议,提供了高可用性...
3. **分布式计算**:Erlang节点可以轻松地在多台机器上分布,形成一个集群,节点间可以相互通信,共享数据和任务。 4. **容错性**:Erlang的设计哲学是允许错误发生并优雅地处理它们。通过将状态保存在进程内部,当...
3. 分布式:Erlang天生支持分布式计算,可以在多台机器上无缝部署和运行应用程序。 4. OTP(Open Telecom Platform):Erlang的配套框架,提供了模块化、可重用的组件,便于构建大型、复杂的系统。 RabbitMQ是一个...
节点间可以透明地相互通信,形成一个集群,共享数据和计算资源。这种分布式能力使得构建跨多台机器的大型系统变得简单,同时也增强了系统的可用性和扩展性。 总结来说,"otp_win64_23.2"是Erlang OTP的一个发行版本...
Erlang节点可以在不同的机器上运行,并通过简单的名称解析进行通信。这种分布式的特性使得构建跨多台服务器的集群变得简单,从而实现负载均衡和故障恢复。在Erlang OTP中,分布式数据库Mnesia也提供了强一致性和高...
2. **分布式计算**:Erlang OTP支持跨节点的分布式计算,允许开发者构建可扩展的系统,可以在多台机器上无缝运行。 3. **热代码升级**:Erlang OTP允许在不中断服务的情况下更新和升级运行中的系统,这对于生产环境...
5. **Distributed Erlang**:Erlang 支持跨多台机器的分布式计算,通过节点间通信协议实现集群间的进程交互。 在 `otp_src_22.3` 压缩包中,包含了 Erlang OTP 22.3 版本的源代码。要安装此版本,你可以按照提供的...
- **建立集群**:在另一台主机上执行以下命令来加入集群。 ```bash rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@vm10-10-0-14 rabbitmqctl start_app ``` - **查看集群状态**:通过`...
2. **配置 hosts 文件**:在每台服务器的 `/etc/hosts` 文件中,添加所有集群节点的 IP 地址和主机名映射,确保节点间的网络通信畅通无阻。 3. **启动服务**:使用 `rabbitmq-server -detached` 命令在后台启动 ...
例如,如果出现错误提示“nodewithname‘rabbit’alreadyrunningon‘unicomp1’”,意味着在unicomp1机器上已经有一个名为rabbit的节点正在运行,需要停止这个节点才能继续操作。如果遇到错误提示...
1. **分布式特性**:由于Erlang天生支持分布式计算,RabbitMQ可以轻松地跨多台机器部署,形成一个集群,提供水平扩展能力。 2. **容错性**:Erlang的分布式特性和错误恢复机制让RabbitMQ具有高可用性,即使在部分...