在Erlang中,升级分布式系统的最佳方法是什么?

时间:2009-07-25 05:46:38

标签: erlang mnesia

如果我在Erlang中运行多个Web服务器(负载均衡)并且Mnesia用于后端数据库,那么将整个系统升级到更新版本的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

尽管Erlang支持热代码加载,但它不是必须使用的东西。在您的情况下,从负载均衡器中删除一个节点似乎更容易,重新启动它运行新代码并将其重新放回负载均衡器。

如果您希望在实时系统中热升级到新的Erlang / OTP版本,那么您必须准备好关闭节点。

但可以为你冒泡的真正问题是那些来自mnesia的担忧。我想你应该问一个新的问题,具体是什么需要mnesia做。如果没有架构/表更改,您只想将一个节点关闭并稍后添加。或者,如果您实际在表中引入新表或新列。 Mnesia确实能够使用表副本添加和删除节点,并且它还通过mnesia:transform_table/3,4唯一地支持多个表定义。

答案 1 :(得分:1)

如果您只是进行代码升级,我写了一篇关于erlang release handling with fab的文章。通过此设置,您可以执行实时代码加载,而无需重新启动节点。但是,转换数据库应该从单个节点完成,与发布升级分开触发。