[Elixir002]节点启动后自动连接其它节点

问题: 如何指定一个节点在启动后自动连接到别的节点上?

这个我们要使用到sys.config,这是erlang的配置文件,这个文件一般都是$ROOT/releases/Vsn下

1. 首先我们要先启动一个master节点,Node.list可以看到当前节点并没有连接到任何节点

iex --cookie secret --name [email protected]
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([email protected]127.0.0.1)1>Node.list
[]

2. 我们再启动一个slave节点,让它启动时直接连接到master上

新建sys.config

#sys.config
[{kernel,
  [
    {sync_nodes_optional, [‘[email protected]‘]},
    {sync_nodes_timeout, 150000}
  ]}
].

这个配置可以表明,启动后会主动连接到‘[email protected]‘ ,如果没有连接成功会每150秒再重连。

iex --cookie secret --name [email protected] --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([email protected]127.0.0.1)1> Node.list
[:"[email protected]"]

这时在2个节点上用Node.list都可以看到对方啦。 注意: 一定要保持2个节点的cookie是一样的

再验证一下:

iex([email protected])2>:rpc.call(:"[email protected]", :io, :format, [:user, "~ts pid: ~p~n", ["我是在master节点上运行的", self()]])
:okiex([email protected])2>self#PID<0.69.0>

这个format只是会在原运行节点上输出,因为使用了:user, 所以我们在master上看到结果

iex([email protected])2> 我是在master节点上运行的 pid: <9547.69.0>

可以看到master上输入的pid是slaver上的进程pid, 其中9547是标记它来自[email protected]节点, 即: <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, [‘[email protected]‘]},
          {sync_nodes_timeout, 150000}
          ]},
     "/etc/region.config"].

我们再验证一下是否改变

iex --cookie secret --name [email protected] --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([email protected]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: [:"[email protected]"], 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

时间: 2024-10-10 21:27:37

[Elixir002]节点启动后自动连接其它节点的相关文章

linux启动后自动登录并运行自定义图形界面程序

在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使用fb或者directfb图形模式: 2.启动xserver不启动桌面系统. 第一种方法性能并不一定高,因为支持fb的显卡驱动可能找不到,就是用上显卡驱动了也需要CPU大量参与.另外如果用这种方式可供选择的图形程序开发技术就受限了.所以这种方法通常用在嵌入式环境下. 第二种方法只要显卡驱动了,CPU就能得到解

禁止Visual Studio启动时自动连接TFS服务器

在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦,例如开发人员的计算机不能连接到TFS服务器,而VS则去自动连接,造成VS卡机. 开发人员可以利用下面的设置禁止VS自动连接TFS: 1. 在安装了VS的计算机上使用管理员身份打开注册表Regedit.exe 2. 导航的Visual Studio安装的目录,例如我的版本是VS 2015,注册表路径

虚拟桌面启动后自动全屏

如果客户端有多个显示器,打开虚拟桌面后,如果需要进入到全屏模式(覆盖所有的客户端显示器),目前还是需要一定技巧的,需要把桌面拖放到两个屏幕的中间,然后全屏才可以实现.否则,简单的全屏只会覆盖当前所在的屏幕.这对普通用户来说,使用有一定的要求,所以,我们可以通过简单的调整,让虚拟桌面在启动后,自动进入到全屏状态,免去了手动全屏的操作. 我们可以通过以下几种方式来实现: 修改ICA文件:针对所有用户生效修改客户端注册表全局设置:对使用客户端用户的所有桌面生效修改特定桌面组的注册表设置:只对特定桌面组

kali linux 启动无法自动连接网络问题i

kali 有一个很大的问题:无法自动连接网咯. 而且,按照网上的方法修改/etc/Network-manager/Network*.conf和/etc/network/interfaces也没有效果. 如果sudo ifconfig wlan0 up的话,会u提示下面的错误: 解决方法有两个: 1.右上角:系统---->设置----->网络------->ON 2.命令解决:由于我已经连上了,不想多事,所以不贴图. sudo rfkill  list all sudo rfkill  u

Centos7系统keepalived备机启动后自动从backup切换成master

操作系统环境:CentOS Linux release 7.0.1406(Core) 64位 主机ip:192.168.1.191,备机ip:192.168.1.150,虚ip:192.168.2.10. /etc/keepalived/keepalived.conf主备配置正确的情况下 搭完后备用机一**启动keepalived就自动从BACKUP切换到MASTER(另一机并未关keepalived服务)**,正常主机没有down之前备机应该是backup状态才对啊,下面是我的日志显示: 个人

禁止Cnario Player启动后自动开始播放

Cnario Player安装激活后, 默认开机后自动启动, 启动加载内容完成后进入10秒倒计时, 10秒后即开始播放关机前播放的内容. 如果不想让其自动开始播放, 可按照如下办法设置其不自动播放. 打开Cnario Player界面, 进入Display Devices标签页, 选中左侧栏的Canvas Controller xx, 右边出现关于此画布控制器的设置参数, 找到AutoStart, 将其参数设置为False 修改参数后, 左上角出现黄色的保存图标, 点击一下, 图标自动消失, 表

Linux 安装Xampp以后,Apache服务器无法启动,以及启动后,连接sql数据库遇到的问题的解决方法

xampp安装以后,搭建服务器的时候,我们会遇到哪些问题呢?1.MySQL Database 可以启动,而Apache Web Server无法启动?应该是80端口被占用,那么如何解决呢?我们可以通过查找80被哪个占用,并关闭这个进程,方法如下: 1 [email protected]:/# netstat -lntp | grep :80 2 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1716/apache2 关闭该服务, 1 [email protected]:

dosbox让DOSBox启动后自动执行命令——自动挂载

学习汇编时. 每次启动DOSBox后,都要挂载.转盘符,于是有一个骚套路. 找到这个:bat文件 用记事本就可以编辑.  拉到最下面,找到[autoexec]部分,补充命令如下: mount c f:\ c: cd (这里是你dosboxmasm5的绝对路境) 就是这样: 原文地址:https://www.cnblogs.com/lanclot-/p/10934070.html

Ambari部署HDP:HBase Master启动后自动消失

这是第一次出勤部署产品.遇到不可控问题,解决,写个心得.记录一下吧^^ 在排查问题的过程中,学到不少知识. (1)centos系统盘和数据盘分开,装操作系统的人没有将IT的空间分配出来,所以分区,自动挂载 #lvmdiskscan 查看哪些设备成为了物理卷. 检测硬盘和分区中的逻辑巻管理信息 只有/dev/sda*,说明只有一个物理卷,其余的是/dev/ram*