Conectarse a un nodo Erlang en remoto
A continuación explicaremos en unos sencillos pasos como podemos conectarnos a un nodo de Erlang en remoto.
HostName
Es necesario que las máquinas se puedan ver entre sí a través del DNS, por lo cual hay que incluir los hostnames en el fichero de hosts /etc/hosts, en el caso que los nodos estén en diferentes máquinas.
Name & Cookie
Para poder acceder a un nodo de Erlang en remoto es necesario iniciar Erlang con un nombre, utilizando el parámetro de -name si estamos en diferentes máquinas, pero si iniciamos los dos nodos en la misma máquina es necesario utilizar el parámetro -sname.
También debemos de asegurarnos en compartir la misma cookie en los dos nodos, ya que funciona como una clave para poder acceder al nodo.
En este ejemplo utilizaremos nodoA – MaquinaA y nodoB – MaquinaB
#erl -setcookie COOKIE1234 -sname nodoA
#erl -setcookie COOKIE1234 -sname nodoB
Es posible también cambiar la cookie una vez que estemos en la consola de erlang, utilizando el siguiente comando:
nodoA@MaquinaAl)1> erlang:set_cookie(node(), 'COOKIE1234'). true nodoA@MaqquinaA)2> erlang:get_cookie(). COOKIE1234
Conectando Nodos
Para saber si el nodoB puede vernos, podemos hacer un ping utilizando el módulo net_adm y el nombre de la maquina B:
nodoA@MaquinaAl)1> net_adm:ping('nodoB@MaquinaB'). pong nodoA@MaquinaAl)2> net_adm:ping('nodoCC@MaquinaCC'). pang nodoA@MaquinaAl)3>nodes(). [nodoB@MaquinaB]
Conectarse al nodo
Una ves que podemos ver el nodoB en la MaquinaA, presionamos Control+G para entrar en el modo de control de trabajos.
(nodoA@MaquinaA)4> User switch command -->
Si ponemos h, nos mostrará la ayuda de los comandos:
User switch command --> h c [nn] - connect to job i [nn] - interrupt job k [nn] - kill job j - list all jobs s [shell] - start local shell r [node [shell]] - start remote shell q - quit erlang ? | h - this message -->
Si queremos mostrar los trabajos actuales :
--> j 1* {shell,start,[init]}
Para iniciar la conexión al nodoB debemos utilizar el comando r y el nombre del nodo junto con su dns como se muestra a continuación:
(nodoA@MaquinaA)1> User switch command --> j 1* {shell,start,[init]} --> r nodoB@MaquinaB --> j 1 {shell,start,[init]} 2* {nodoB@MaquinaB,shell,start,[]} -->
Como podemos observar una vez que hacemos la conexión al nodoB y mostramos los trabajos aparece el número 2 conectado al nodoB
Para entrar a la consola del nodoB solo necesitamos utilizar el comando c y el numero de trabajo:
--> c 2 Eshell V5.6.5 (abort with ^G) (nodoB@MaquinaB)1>
Y listo.!!!! ya estamos dentro.
Salir del nodoB
Y ¿ahora cómo salimos?. Bueno cualquiera pensará, fácil le doy q(). o Control +C y listo, pues no se te ocurra hacer esto en producción ya que pararíamos el nodoB por completo.
Para poder salir debemos regresar al nodoA, por lo que repetimos el proceso pero ahora conectándonos al trabajo número 1
(nodoA@MaquinaA)1> User switch command --> j 1* {shell,start,[init]} --> r nodoB@MaquinaB --> j 1 {shell,start,[init]} 2* {nodoB@MaquinaB,shell,start,[]} --> c 2 Eshell V5.6.5 (abort with ^G) (nodoB@MaquinaB)1> User switch command --> j 1 {shell,start,[init]} 2* {nodoA@MaquinaA,shell,start,[]} --> c 1 (nodoA@MaquinaA)2>
Con estos simples pasos podemos acceder a diferentes nodos de Erlang conectados entre si.
