Cómo agrupar Rabbitmq en AWS

Cómo agrupar Rabbitmq en AWS

Probé todas las combinaciones imaginables en un intento de agrupar Rabbitmq en un entorno de AWS. Pero para resumir:

  1. Apagué y eliminé la distribución de erlang y conejo en mi ubuntu 14 local
  2. Probé los módulos de configuración automática en la web.
  3. La versión de Ubuntu 14 que viene instalada de forma predeterminada no es suficiente.
  4. Las cookies erlang coinciden: esto se demuestra a continuación

La falta de coincidencia del nombre de host es el único enigma. El nodo en sí cree que su nombre de host es 'q1' o 'q2' respectivamente. Cuando intento configurar el nombre de host del contenedor en el nombre DNS privado del host (para que pueda conectarse al otro nodo), la instancia de Rabbit en el contenedor falla. ¿No debajo de cómo hostnamese produce q2, pero ingresé a un DNS privado de Amazon?

root@q2:~# hostname
q2
root@q2:~# exit
christian@q2:~$ logout
Connection to ip-10-0-3-101.us-west-2.compute.internal closed.

Estoy usando la última imagen acoplable de Rabbitmq.

docker run -d --restart always --hostname q1 --name rabbitmq -p 4369:4369 -p 15671:15671 -p 25672:25672 -p 15672:15672 -p 5672:5672 -e RABBITMQ_HIPE_COMPILE=1 -e RABBITMQ_ERLANG_COOKIE='ilikecookies' rabbitmq:3-management

El servicio arranca bien

root@q1:~# curl -I localhost:15672
HTTP/1.1 200 OK
Content-Length: 1419
Content-Type: text/html
Date: Fri, 20 Jan 2017 22:46:12 GMT
last-modified: Fri, 20 Jan 2017 22:38:45 GMT
Server: MochiWeb/1.0 (Any of you quaids got a smint?)

Y aquí está la cookie del host q1.

root@q1:~# docker exec -it rabbitmq /bin/bash
root@q1:/# cat /var/lib/rabbitmq/.erlang.cookie                                                                               
ilikecookies
root@q1:/# 

Ahora intento agruparlo (desde el host q2 siendo q1 el maestro)

root@q2:~# docker exec -it rabbitmq /bin/bash
root@q2:/# rabbitmqctl stop_app
Stopping node rabbit@q2 ...
root@q2:/# rabbitmqctl join_cluster [email protected]
Clustering node rabbit@q2 with '[email protected]' ...
Error: unable to connect to nodes ['[email protected]']: nodedown

DIAGNOSTICS
===========

attempted to contact: ['[email protected]']

[email protected]:
  * connected to epmd (port 4369) on ip-10-0-3-56.us-west-2.compute.internal
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed
  * suggestion: hostname mismatch?
  * suggestion: is the cookie set correctly?
  * suggestion: is the Erlang distribution using TLS?

current node details:
- node name: 'rabbitmq-cli-41@q2'
- home dir: /var/lib/rabbitmq
- cookie hash: quN0y0GUm2Zxv8VYc2eX9A==

root@q2:/# cat /var/lib/rabbitmq/.erlang.cookie
ilikecookies
root@q2:/# 

La preguntaes ¿CÓMO se consigue que estas cosas se agrupen? ¿Cuál es el ingrediente que falta? El mensaje de error no significa nada en la web. ¿Alguien tiene alguna experiencia en esto?

ACTUALIZAR Grupo de seguridad de AWS para estas instancias:

Custom TCP Rule
TCP
1024 - 65535
0.0.0.0/0

Respuesta1

¡Está bien, lo tengo!

Los nombres de host de cada nodo deben alinearse dentro del contenedor.

En la máquina host (q2) verifiqué qué hosts conocía en el archivo de hosts:

# This file was generated by OpsWorks
# any manual changes will be removed on the next update.

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

# OpsWorks Layer State
127.0.0.1 localhost.localdomain localhost
127.0.1.1 q2.localdomain q2

10.0.3.56 q1.localdomain q1
10.0.3.101 q2.localdomain q2


root@q2:/# ping q1
PING q1.local (10.0.3.56): 56 data bytes
^C--- q1.local ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

Entonces, se me ocurrió que no importa en absoluto lo que sepa la máquina host, sino lo que sepa el contenedor acoplable. Entonces, metí en el contenedor e hice lo mismo:

root@q2:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  q2.local

¡Ahora estamos en algo! Entonces, agregué una entrada para el nodo maestro:

root@q2:/# echo "10.0.3.56    q1.local q1" >> /etc/hosts
root@q2:/# which ping
/bin/ping
root@q2:/# ping q1
PING q1.local (10.0.3.56): 56 data bytes

Y dio otro golpe dentro del contenedor.

root@q2:/# rabbitmqctl stop_app
Stopping node rabbit@q2 ...
root@q2:/# rabbitmqctl join_cluster rabbit@q1                                     
Clustering node rabbit@q2 with rabbit@q1 ...
root@q2:/#

¡Y ahora, cada nodo reconoce que está agrupado! ¡Guau!

Creo que para agrupar con Docker voy a modificar el comando de Docker para montar el /etc/hostsarchivo de hosts en la imagen de Docker -v /etc/hosts:/etc/hosts:roy luego esto debería funcionar mágicamente.

Otro paso que olvidé mencionar: la caja local de Ubuntu tenía una versión antigua de erlang ejecutándose que tuve que eliminar (y también tenía conejo).

información relacionada