[Elixir002]节点启动后自动连接其它节点
问题: 如何指定一个节点在启动后自动连接到别的节点上?
这个我们要使用到sys.config,这是erlang的配置文件,这个文件一般都是$ROOT/releases/Vsn下
1. 首先我们要先启动一个master节点,Node.list可以看到当前节点并没有连接到任何节点
iex --cookie secret --name master@127.0.0.1
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(master@127.0.0.1)1>Node.list
[]
2. 我们再启动一个slave节点,让它启动时直接连接到master上
新建sys.config
#sys.config
[{kernel,
[
{sync_nodes_optional, ['master@127.0.0.1']},
{sync_nodes_timeout, 150000}
]}
].
这个配置可以表明,启动后会主动连接到'master@127.0.0.1' ,如果没有连接成功会每150秒再重连。
iex --cookie secret --name slave@127.0.0.1 --erl "-config sys.config"
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(slave@127.0.0.1)1> Node.list
[:"master@127.0.0.1"]
这时在2个节点上用Node.list都可以看到对方啦。 注意: 一定要保持2个节点的cookie是一样的
再验证一下:
iex(slave@127.0.0.1)2>:rpc.call(:"master@127.0.0.1", :io, :format, [:user, "~ts pid: ~p~n", ["我是在master节点上运行的", self()]])
:ok
iex(slave@127.0.0.1)2>self
#PID<0.69.0>
这个format只是会在原运行节点上输出,因为使用了:user, 所以我们在master上看到结果
iex(master@127.0.0.1)2> 我是在master节点上运行的 pid: <9547.69.0>
可以看到master上输入的pid是slaver上的进程pid, 其中9547是标记它来自slaver@127.0.0.1节点, 即: <0.69.0> == <9547.0.0>
3. sys.config实现了发布新的release后会根据新的sys.config再加载配置
When traversing the contents of sys.config and a filename is encountered, its contents are read and merged with the result so far. When an application configuration tuple{Application, Env} is found, it is merged with the result so far. Merging means that new parameters are added and existing parameter values overwritten.
官方的例子给得太简单啦,演示个完整的例子看看:)
假如我们想在上面的slaver节点上的kernel再加一个配置database的地址, 那么我们新建一个region.config
#File: /etc/region.config
[{kernel, [
{database_for_example_purposes, "db://prod-host-omg:8089"}
]}].
那么我们要做的就是把region.config加到sys.config
File: sys.config
[{kernel, [
{sync_nodes_optional, ['master@127.0.0.1']},
{sync_nodes_timeout, 150000}
]},
"/etc/region.config"].
我们再验证一下是否改变
iex --cookie secret --name slave@127.0.0.1 --erl "-config ./sys.config"
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(slave@127.0.0.1)1> Application.get_all_env(:kernel)
[database_for_example_purposes: 'db://prod-host-omg:8089',
sync_nodes_timeout: 150000, included_applications: [],
sync_nodes_optional: [:"master@127.0.0.1"], error_logger: :tty]
有兴趣可以看看extrm release如何生成sys.config的
参照资料
1. Distributed-otp-applications
2. Design_principles about distributed_applications
3. sys.config
A day in the life of an Erlang developer
[Elixir002]节点启动后自动连接其它节点的更多相关文章
- web容器启动后自动执行程序的几种方式比较
1. 背景 1.1. 背景介绍 在web项目中我们有时会遇到这种需求,在web项目启动后需要开启线程去完成一些重要的工作,例如:往数据库中初始化一些数据,开启线程,初始化消息队 ...
- springboot启动后自动退出
有时新建的springboot启动后自动退出运行,如图所示: 此种情况大都数是因为pom文件加入了tomcat的依赖,与springboot内嵌的tomcat冲突导致,所以只需将pom文件中的tomc ...
- hadoop运行故障问题解决1——datanode节点启动后自动关闭
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceID ...
- Springboot项目启动后自动创建多表关联的数据库与表的方案
文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...
- 禁止Visual Studio启动时自动连接TFS服务器
在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ...
- linux启动后自动登录并运行自定义图形界面程序
在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...
- SpringBoot启动后自动打开浏览器访问项目
之前我们用SSM或者SSH进行JAVA WEB开发的时候,IDEA 需要配置Tomcat然后把项目放到tomcat运行,tomcat启动的时候会自动打开浏览器去访问项目,但是SpringBoot是内嵌 ...
- kali linux 启动无法自动连接网络问题i
kali 有一个很大的问题:无法自动连接网咯. 而且,按照网上的方法修改/etc/Network-manager/Network*.conf和/etc/network/interfaces也没有效果. ...
- 使用systemd将iptables规则在docker启动后自动导入
编写systemd文件 $ sudo vi /etc/systemd/system/iptables-import.service # /etc/systemd/system/iptables-imp ...
随机推荐
- python HTMLTestRunner.py
Mac下HTMLTestRunner.py存放路径: -/anaconda/lib/python3.6/site-packages/HTMLTestRunner.py 已经更改,python3可以直接 ...
- Java之解压流(ZipInputStream)
一.ZipInputStream相对于ZipOutputStream而言,使用上面简单的多了,相对的,既然存在压缩流,就会存在,解压的方式. 二.解压文件,流的使用过程中也是很常用的,在读取文件,根据 ...
- RPM安装卸载软件
1.安装 rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包: rpm -iv example.rpm 安装 example.rpm ...
- JMS消息模型
消息机制: 系统之间通信的中介,作为一台单独的服务器部署,大多数使用多个系统之间协作,是系统解耦的常见解决方案. 基于CS架构 作用:多个系统之间解耦,项目可以分开开发,满足显示的高可用(也可以说是异 ...
- OpenMP 循环调度 + 计时
▶ 使用子句 schedule() 来调度循环,对于循环中每次迭代时间不相等的情况较为有效 ● 代码 #include <stdio.h> #include <stdlib.h> ...
- HTML5 APP
jquery,bootstrap http://www.bcty365.com/content-74-2640-1.html JS运行效率,浏览器 html+js+css3 css3是在css的 ...
- 在 springboot 中如何整合 shiro 应用 ?
Shiro是Apache下的一个开源项目,我们称之为Apache Shiro. 它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security 一样都是 ...
- 18.4Sum (Map)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- mybatis框架入门程序:演示通过mybatis实现数据库的修改操作
1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.修改用户的配置文件: <upd ...
- 在Linux下访问Windows共享文件夹
说明 以下操作以Ubuntu为例,大家可以参考. 我在Ubuntu 14.04和16.04都试过了. Windows共享文件夹 如果局域网内有一台Windows主机,将指定文件夹设为共享,就可以在局域 ...