Distribué RabbitMQ Nœuds de ne pas reconnaître les uns les autres
Je suis en train de travailler sur un RabbitMQ distribué POC et je suis coincé à l'bases de la mise en cluster de nœuds.
Je suis en train de suivre le lapin tutoriel sur le clustering donc, c'est ma référence.
Après l'installation d'erlang (R14B04) et le lapin (2.8.2-1) j'ai copié le .erlang.cookie
fichier contenu d'un nœud à l'autre des deux autres.
Je n'étais pas sûr de savoir comment obtenir erlang pour avis de ce changement, j'ai dû redémarrer les machines elles-mêmes (assez de force brute, mais je ne sais pas erlang).
En outre, j'ai ouvert dans iptables 4369 et 5 ports supplémentaires pour les communications et placé sous
la configuration suivante:
/usr/lib64/erlang/bin/sys.config
{kernel,[{inet_dist_listen_min, XX00},{inet_dist_listen_max,XX05}]}]
Puis un autre redémarrage (stupide je sais) pour vérifier erlang les prend en considération, mais encore quand je le lance:
rabbitmqctl cluster rabbit@HostName1
J'obtiens:
Clustering node rabbit@HostName2 with [rabbit@HostName1] ...
Error: {no_running_cluster_nodes,[rabbit@HostName1],
[rabbit@HostName1]}
Il y a une chance de ma battre avec l'erlang.cookie ou avec les ports n'ont pas réussi, mais je ne sais pas comment le vérifier. J'ai essayé de taper erl
dans le cmd et ensuite erl_epmd:names()
ou d'autres commandes pour obtenir de plus amples renseignements, mais je suis probablement loin en erlang terre.
Serait vraiment reconnaissant de toute aide
Mise à jour:
J'ai essayé une requête ping à deux erlang nœuds manuellement et a obtenu pang
dos.
Je n'ai suivantes:
Connecté à deux nœuds, arrêté rabbitmq (n'étais pas sûr si besoin, mais pour être sûr), a commencé à erlang comme (erl -sname dilbert
et erl -sname dilbert2
) lorsque l'erlang ligne de commande a commencé, j'ai couru node().
sur chacun d'eux et a obtenu dilbert@HostName1
et dilbert2@HostName2
respectivement. J'ai ensuite essayé d'exécuter net_adm:ping('dilbert').
et net_adm:ping('dilbert@HostName1').
avec la citation simple et sans eux, à partir de deux nœuds (a changé de nom bien sûr) et j'ai pris tous les 8 cas pang
.
Quand j'ai couru nodes().
sur une des machines que je suis de retour un tableau vide.
J'ai aussi essayé d'autoriser tout le trafic dans le pare-feu (script) et puis essayez d'exécuter les commandes ci-dessus (ne vous inquiétez pas, ils sont de retour sur maintenant) et toujours eu de retour pang
.
Update2:
Pour une raison quelconque, j'ai eu cookies incompatibilité dont j'avais besoin pour résoudre (merci @kjw0188 pour la suggestion [j'ai couru erlang:get_cookie().
dans l'erlang ligne de commande]).
Cela n'aide pas et je devais arrêter de iptables complètement (je ne sais pas pourquoi, mais je le saurai bientôt) et de charger de l'erlang nœud avec -name dilbert@my-ip
parce que mon rackspace les serveurs ont pas de dns-nom. Cette finalement m'a permis de faire un pong et de voir les nœuds de voir les uns les autres (nodes().
retourne un non-vide après le ping).
Le problème que je me pose maintenant est de savoir comment charger RabbitMQ à utiliser-nom à la place de sname lors du démarrage d'erlang.
N'ai pas encore essayé (erlang noob). Savez-vous comment je peux vérifier que le nœud courant n'est pas en cours d'exécution? Je pense que RabbitMQ commence un nœud lorsqu'il charge donc je vais arrêter, mais je veux vérifier aucun nœud n'est en cours d'exécution avant j'ai essayer votre suggestion. Merci
Vous ne devriez pas avoir besoin de prendre lapin vers le bas, mais si vous le souhaitez, vous pouvez essayez d'arrêter le service
sudo /etc/init.d/rabbitmq-server stop
Toujours pas de chance, consultez ma mise à jour ci-dessus. Merci
Faire les cookies match? Essayez
erlang:get_cookie().
sur dilbert
et dogbert
ou de la définition du cookie manuellement avec le -setcookie
option de ligne de commande. Si ils ne peuvent toujours pas de ping les uns des autres, il semble que erlang ne pouvez pas trouver les autres nœuds pour une raison quelconque. Sont les hôtes accessibles par la normale ping
? Utiliser le nom d'hôte pour les machines pour le ping, pas l'adresse IP.OriginalL'auteur Ittai | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
Donc j'ai eu plusieurs problèmes avec la connexion de mes deux RabbitMQ nœuds-
Je vais ajouter que mes nœuds sont hébergés sur rackspace, et donc ne pas avoir un défaut exposable nom d'hôte, et nécessitent iptables car il n'y a pas de DMZ ou de sécurité intégré dans le concept des groupes comme amazon.
Problèmes:
1. Un Cookie ne savez Pas comment ou pourquoi, mais j'ai eu plusieurs instances de
.erlang.cookie
(en/root
, dans mon répertoire home et dans/var/lib/rabbitmq/
) je n'ai gardé que celui de rabbitmq et vérifié tous les nœuds ont le même cookie.2. IPTables - pour que les nœuds de communiquer-je besoin pour ouvrir le
epmd
port et de la plage de ports pour la communication réelleinet_dist_listen_min
inet_dist_listen_max
.empd
est usuall 4369 port et pour les autres plages de l'utiliser quelle que soit la plage que vous voulez.${otherNode}
est l'ip de mon autre nœud.J'ai aussi besoin de configurer erlang par rabbitmq à l'utilisation de ces ports (voir le fichier de config à la fin)
3. Nom d'hôte - vu que je n'ai pas de nom d'hôte j'avais besoin de modifier le lapin scripts pour utiliser
-name
et pas-sname
(le premier raconte erlang pour prendre le nom en entier, le dernier est synonyme de nom court et donc ajoute un symbole @ et le nom de l'hôte).Cela a été accompli par l'édition de:
/usr/lib/rabbitmq/bin/rabbitmqctl
Ajouté au début de la définition de la
RABBITMQ_NODE_IP_ADDRESS
propriétéet dans la commande erl j'ai changé
-sname ${RABBITMQ_NODENAME} \
d'-name ${RABBITMQ_NODENAME}@${RABBITMQ_NODE_IP_ADDRESS}\
.De ce fait rabbitmq pour n'écouter que sur l'adresse ip spécifiée (spécifié dans le fichier de config à la fin) et de la charge avec cette ip au lieu de l'usuall nom d'hôte.
édité
/usr/lib/rabbitmq/bin/rabbitmq-server
Changé le réel erl commande à partir de
-sname ${RABBITMQ_NODENAME} \
à-name ${RABBITMQ_NODENAME}@${RABBITMQ_NODE_IP_ADDRESS}
\Ajouté un lapin conf (
/etc/rabbitmq/rabbitmq-env.conf
) fichier-Certaines ressources qui m'ont aidé le long du chemin:
RabbitMQ Guide De Mise En Grappe
Clustering RabbitMQ serveurs pour la Haute Disponibilité
rabbitmq-env.conf(5) page de manuel
Nœud de communication par l'adresse IP publique de erlang liste de diffusion (Le poteau du milieu)
La configuration de RabbitMQ Cluster sur le Cloud
Espère que cela aidera quelqu'un d'autre.
EDIT:
Pas sûr de savoir comment je me trompe, mais il me semblait que mon erlang-lapin port instructions n'ont pas été prises en compte ou ne l'étaient pas assez. Fini par avoir pour permettre à toutes les communications entre les deux nœuds...
OriginalL'auteur Ittai
Une chose de vraiment regarder dehors pour est des espaces de toute nature dans l'erlang fichier de cookie, en particulier les sauts de ligne APRÈS le contenu du cookie. Tant que les deux sont identiques, les choses sont bien, mais quand on a un saut de ligne et l'autre ne fonctionne pas, rien ne marche.
OriginalL'auteur Jonathan Oliver
De fond: j'ai été confrontée au même problème lors de la configuration de Rabbitmq cluster. J'ai été à l'aide de 2 conteneurs docker en cours d'exécution sur mon hôte de la machine, ce qui est équivalent à 2 nœuds et je ne pouvais pas créer un cluster de ces deux.
Solution: 1. Assurez-vous que vous disposez des mêmes erlang cookie sur tous les nœuds de votre cluster, l'emplacement par défaut est
/var/lib/rabbitmq/.erlang.cookie
. Ce fichier est utilisé pour l'authentification, assurez-vous donc, vous l'avez même sur tous les nœuds. Après la modification de la .erlang.cookie redémarrez votre rabbitmq service.Assurez-vous que les noeuds sont accessibles à partir d'un autre, utilisez la commande ping ou telnet pour vérifier la connexion.
Vérifier que /etc/hosts ont des entrées correctes, par exemple si rabbit2 veut rejoindre cluster rabbit1, /etc/hosts de rabbit2 doit contenir.
Maintenant, arrêtez de service à l'aide de
$rabbitmqctl stop_app
suivie par$rabbitmqctl join_cluster rabbit@rabbit1
, démarrez votre service parrabbitmqctl start_app
et vérifier$rabbitmqctl cluster_status
pour voir le temps que vous avez rejoint le cluster ou non.J'ai suivi le rabbitmq la documentation officielle à la configuration du cluster.
OriginalL'auteur Rahul Mishra
de changer de RabbitMQ sname/nom de comportement, vous pouvez modifier les scripts:
Exemple
Dans le script rabbitmqctl il y a le morceau de code suivant:
Vous devez le changer en:
OriginalL'auteur Vincenzo Maggio
http://pearlin.info/?p=1672
si vous avez besoin de copier le cookie à partir du nœud que vous essayez de vous connecter
exemple :- lapin@node1
rabbit@node2
aller à lapin@node1 et copier le cookie de cat /var/lib/rabbitmq/.erlang.cookie
aller à lapin@node2 supprimer le cookie et coller le nouveau.
sur le même nœud
devrait le faire.
même documentée ici.
http://pearlin.info/?p=1672
http://pearlin.info/?p=1672
n'est pas l'anglais, ni est-il de la programmation.OriginalL'auteur user2348359