`
amornio19840908
  • 浏览: 56815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang OTP takeover

阅读更多
Erlang通过配置,支持takeover。

第一步:
创建一个gen_server, im_chat_ets.erl,takeover要求实现start,stop这两个function,find是callback function用于处理业务。

start() -> gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).

stop() -> gen_server:call({global, ?MODULE}, stop).

find(Who) -> gen_server:call({global, ?MODULE}, {find, Who}).


第二步:
创建一个supervise, im_router_sup
start_link() ->
    supervisor:start_link({global, ?MODULE}, ?MODULE, []).

init([]) ->
	Strategy = {one_for_one, 1, 10},
	{ok,
	 {Strategy, [
				 {im_chat_ets, 
				  {im_chat_ets, start, []}, permanent, 5000, worker, [im_chat_ets]}
				 ]}}.


第三步:
创建app文件,im_router_app.erl
-behaviour(application).
-export([start/2,stop/1]).

start(normal, []) ->
    im_router_sup:start_link();

start({takeover, _OtherNode}, []) ->
    im_router_sup:start_link().

stop(_State) ->
    ok.


第四步:
配置app文件,im_router_app.app
{application, im_router_app,
 [{description, "im_router_app"},
  {vsn, "0.1"},
  {modules, [im_chat_ets, im_router_app, im_router_sup]},
  {registered, [im_chat_ets, im_router_app, im_router_sup]},
  {mod, {'im_router_app', []}},
  {env, []},
  {applications, [kernel, stdlib, crypto]}]}.


第五步:
创建erlang启动配置文件。
a.config
[{kernel,
  [{distributed, [{im_router_app,
                   5000,
                  [a@localhost, {b@localhost}]}]},
   {sync_nodes_mandatory, [b@localhost]},
   {sync_nodes_timeout, 30000}
  ]
 }
].

b.config
[{kernel,
  [{distributed, [{im_router_app,
                   5000,
                  [a@localhost, {b@localhost}]}]},
   {sync_nodes_mandatory, [a@localhost]},
   {sync_nodes_timeout, 30000}
  ]
 }
].


至此,代码工作完成。

第六步,启动
在两个console窗口,cd到项目,再分别输入
erl -sname a -config config/a -pa ebin/

erl -sname b -config config/b -pa ebin/


(a@localhost)1> net_adm:ping(b@localhost).
返回pong,说明a到b连通

(b@localhost)1> net_adm:ping(a@localhost).
返回pong,说明b到a连通

第七步,在a,b分别输入
application:start(crypto). 这是takeover必需的application

第八步,在a,b分别输入
application:start(im_router_app).
分别返回ok。由于a.config,b.config文件中将a点作为主点,所以用application:which_applications().查看时将发现im_router_app运行在a点。
例如:[{im_router_app,"im_router_app","0.1"},.......]

至此双机启动完毕。

验证

情况一:验证Failing Over,im_router_app运行在a点,当a点宕掉后,b点能将im_router_app自动启动。
1)在a点,输入halt().
2)观察b点,输入application:which_applications().将发现[{im_router_app,"im_router_app","0.1"},.......]

总结,说明a点宕机后,im_router_app程序能在b点自动启动,Failing Over成功。

情况二:验证takeover,a点宕机,im_router_app程序运行在b点,先将a点启动,im_router_app程序将重新运行在a点。
1)在a点的console窗口,输入 erl -sname a -config config/a -pa ebin/ -eval 'application:start(crypto), application:start(im_router_app)'

2)观察a点,输入application:which_applications().将发现[{im_router_app,"im_router_app","0.1"},.......]

3)观察b点,输入application:which_applications().将发现im_router_app不在运行列表中。

总结,说明a点的启动,能将app程序从b点抢夺回来。takeover成功。

至此,实验完成。

参考文献:
[1] http://learnyousomeerlang.com/distributed-otp-applications
分享到:
评论

相关推荐

    erlang otp25 win安装包

    erlang otp25 win安装包

    erlang_otp_win64_25.0

    Erlang OTP (Open Telephony Platform) 是一种高级并发编程语言和框架,主要由瑞典电信设备制造商Ericsson开发,用于构建高度可靠、可扩展和实时的分布式系统。Erlang OTP 25.0是该平台的一个版本,特别针对Windows ...

    Erlang-otp_win64_23.0.zip

    Erlang OTP是Erlang编程语言的核心组成部分,它提供了分布式计算、并发处理、热代码升级和容错恢复等一系列强大的功能。在安装RabbitMQ,一个广泛使用的开源消息代理和队列服务器之前,通常需要先安装Erlang环境。...

    ERLANGOTP并发编程实战清晰中文版

    erlang otp学习文档 学习还不错的

    Erlang otp_src_20.3.tar.gz

    Erlang OTP 20.3 是一个针对Linux CentOS系统的软件包,主要为开发者提供了一个强大的并发和分布式计算环境。Erlang是一种静态类型的、函数式的编程语言,它以其在处理高并发、容错和实时系统方面的优秀表现而闻名。...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    Erlang otp_win64_21.2.exe

    Erlang OTP(Open Telephony Platform)是一种开源的编程语言和框架,专为构建高度并发、分布式和容错系统而设计。"Erlang otp_win64_21.2.exe" 是Erlang OTP在Windows 64位平台上的一个特定版本,编号为21.2。这个...

    Erlang otp_win64_21和22版本 exe

    在Windows 64位平台上,Erlang OTP提供了exe安装程序,如"otp_win64_21.3.exe"和"otp_win64_22.exe",分别代表Erlang OTP的21.3和22两个版本。 1. **Erlang语言特性** - **并发性**:Erlang采用轻量级进程模型,每...

    erlang otp_src_20.2.tar.gz

    Erlang OTP (Open Telephony Platform) 是一个用于构建高度并发、分布式和容错系统的软件框架,由瑞典的Ericsson公司开发。OTP提供了一个强大的编程环境,特别适合于实时通信系统和大规模网络应用。在本场景中,"otp...

    erlang-otp-win64位 25.3版本

    Erlang OTP是Erlang编程语言的核心组件,它提供了强大的并发处理、分布式计算和容错能力,广泛应用于电信、互联网服务以及实时系统等领域。在Windows操作系统上,Erlang OTP通常提供为预编译的64位版本,如"erlang-...

    Erlang/OTP Application完整例子

    Erlang/OTP Application完整例子,含代码和二进制,对于学习Erlang/OTP Application很有帮助。 配套文章http://blog.csdn.net/mycwq/article/details/12610677

    c# 版ErlangOtp跨平台通信框架(Java版的转译)

    标题中的"C#版ErlangOtp跨平台通信框架(Java版的转译)"指的是一个用C#语言实现的框架,其目标是提供与Erlang OTP系统进行跨平台通信的能力。Erlang OTP(开放电信平台)是Erlang编程语言的一个核心组件,它包含了一...

    ErlangOTP 21.3.zip

    Erlang OTP(Open Telephony Platform)是一种由Ericsson开发的开源软件框架,主要用于构建高度可扩展、容错性强的分布式系统。OTP 21.3是Erlang的一个特定版本,它包含了Erlang虚拟机(BEAM)、标准库和其他相关...

    erlang_otp_win64_22.1.zip

    Erlang OTP(Open Telephony Platform)是瑞典Ericsson公司开发的一种编程语言,主要用于构建高度并发、分布式和容错的系统。在标题“erlang_otp_win64_22.1.zip”中,我们可以看到这是Erlang OTP的一个特定版本,即...

    Erlang OTP并发编程实战(中文版)

    **Erlang OTP并发编程实战** 是一本专为开发者深入理解Erlang OTP并发机制而设计的实战指南。OTP(Open Telecom Platform)是Erlang编程语言的核心组件,提供了强大的并发处理能力和分布式系统构建框架。这本书以...

    分布式应用Erlang:Erlang_OTP_19_win64

    Erlang OTP 19_win64是一款专为Windows 64位系统设计的Erlang软件开发工具包,它包含Erlang编程语言和OTP(Open Telecom Platform)框架。Erlang是一种强大的、动态类型的函数式编程语言,特别适合构建高可用性、...

    并行编程语言Erlang:Erlang OTP框架及其应用开发指南

    内容概要:本文档详细介绍了Erlang编程语言及其并行编程模型,并重点阐述了Erlang OTP框架的特性和应用场景。首先,文档简述了Erlang语言的特点,包括轻量级进程、模式匹配和热代码升级等特性,以及它在构建高可用、...

    Erlang / OTP 21.0 版本下载

    官网下载实在是困难,我把当前Erlang / OTP 21.0 版本提交到这里提供给大家和自己下载 原先积分0的现在都这么高了,为了方便大家,放出云盘地址:https://pan.百度.com/s/1hb8vPiMslXxNuJC8PvnKgg提取码wmx8

    Erlang otp_win64_22.0

    Erlang OTP(Open Telephony Platform)是一种由Ericsson开发的开源编程语言和并发系统,主要设计用于构建高度可扩展、容错性强的分布式系统。标题"otp_win64_22.0"指的是Erlang OTP的一个特定版本,即22.0,适用于...

    erlang_otp_src_22.3.tar.gz

    Erlang OTP (Open Telephony Platform) 是一种高级编程语言,专为构建高并发、分布式、容错性强的系统而设计。22.3 版本是 Erlang OTP 的一个稳定版本,它提供了许多增强的功能和性能改进。下面将详细介绍这个版本的...

Global site tag (gtag.js) - Google Analytics