Configuration de RabbitMQ

Configuration de RabbitMQ sur les systèmes *nix

Configuration de votre environnement

RabbitMQ recherche un ensemble de variables d’environnement dans /etc/rabbitmq/rabbitmq-env.conf. S’il n’existe pas, il prend les valeurs par défaut. Toutes les valeurs de rabbitmq-env.conf sont exportées vers l’environnement dans lequel le serveur RabbitMQ s’exécute avec un préfixe RABBITMQ_ ; ce préfixe n’est pas inclus dans le fichier de configuration. Les variables suivantes peuvent être définies (dans une syntaxe clé=valeur) :

NODENAME : Définit le nom du nœud RabbitMQ.

CONFIG_FILE : Définit l’emplacement du fichier de configuration RabbitMQ (pas ce fichier d’environnement)

NODE_IP_ADDRESS : Définit l’adresse IP spécifique sur laquelle écouter.

NODE_PORT : Définit le port sur lequel écouter

DIST_PORT : définit le port sur lequel écouter pour le clustering

USE_LONGNAME : valeur booléenne indiquant s’il faut ou non utiliser des noms complets pour identifier les nœuds. Utile dans des environnements avec des noms abrégés identiques.

CTL_ERL_ARGS : Définit les arguments de la commande erl invoquée lors de l’exécution de rabbitmqctl. Utile pour le débogage.

SERVER_ERL_ARGS : Définit les arguments de la commande erl invoquée lors du démarrage de RabbitMQ. La définition de cette valeur remplace la valeur par défaut (voir l’exemple de configuration ci-dessous).

SERVER_ADDITIONAL_ERL_ARGS : Définit des arguments supplémentaires pour la commande erl invoquée lors du démarrage de RabbitMQ. La définition de cette valeur s’ajoute à la variable SERVER_ERL_ARGS et est vide par défaut.

SERVER_START_ARGS : également défini pour la commande erl invoquée lors du démarrage de RabbitMQ.

Un exemple de fichier de configuration (toutes les valeurs sont en fait des valeurs par défaut) :

NODENAME=rabbit@localhost    
CONFIG_FILE=/etc/rabbitmq/rabbitmq.config
NODE_IP_ADDRESS=""
NODE_PORT=5672
DIST_PORT=25672
USE_LONGNAME=false
CTL_ERL_ARGS=""
SERVER_ERL_ARGS="+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"
SERVER_ADDITIONAL_ERL_ARGS=""
SERVER_START_ARGS=""

Configurer RabbitMQ

Remarque : Le fichier de configuration de RabbitMQ est dans la syntaxe de configuration standard d’Erlang. Si vous n’êtes pas familier avec Erlang, cela peut être déroutant au début. Il suit le format suivant :

[
    {rabbit,
        [
            {config_value_1, []},
            {config_value_2, []}
        ]
    },
    {additional_rabbitmq_plugins,
        [...]
    }
]

La section de la configuration de RabbitMQ contient les clés suivantes (extraites de https://www.rabbitmq.com/configure.html ):

  • tcp_listeners : liste des ports sur lesquels écouter les connexions AMQP (sans SSL). Peut contenir des entiers (signifiant “écouter sur toutes les interfaces”) ou des tuples tels que {"127.0.0.1", 5672} pour écouter sur une ou plusieurs interfaces.

Par défaut : [5672]

  • num_tcp_acceptors : nombre de processus Erlang qui accepteront les connexions pour les écouteurs TCP.

Par défaut : ‘10’

  • handshake_timeout : temps maximum pour la poignée de main AMQP 0-8/0-9/0-9-1 (après connexion socket et poignée de main SSL), en millisecondes.

Par défaut : 10000

  • ssl_listeners : comme ci-dessus, pour les connexions SSL.

Par défaut : []

  • num_ssl_acceptors : nombre de processus Erlang qui accepteront les connexions pour les écouteurs SSL.

Par défaut : ‘1’

  • ssl_options : configuration SSL.

Par défaut : []

  • ssl_handshake_timeout : délai d’expiration de la poignée de main SSL, en millisecondes.

Par défaut : 5000

  • vm_memory_high_watermark : seuil de mémoire auquel le contrôle de flux est déclenché. Voir la documentation sur le contrôle de flux basé sur la mémoire.

Par défaut : ‘0.4’

  • vm_memory_high_watermark_paging_ratio : fraction de la limite supérieure du filigrane à laquelle les files d’attente commencent à paginer les messages sur le disque pour libérer de la mémoire. Voir la documentation sur le contrôle de flux basé sur la mémoire.

Par défaut : ‘0.5’

  • disk_free_limit : limite d’espace libre sur le disque de la partition sur laquelle RabbitMQ stocke les données. Lorsque l’espace disque disponible tombe en dessous de cette limite, le contrôle de flux est déclenché. La valeur peut être définie par rapport à la quantité totale de RAM (par exemple, {mem_relative, 1.0}). La valeur peut également être définie sur un nombre entier d’octets. Ou, alternativement, en unités d’information (par exemple "50MB"). Par défaut, l’espace disque libre doit dépasser 50 Mo. Voir la documentation des alarmes de disque.

Par défaut : 50000000

  • log_levels : contrôle la granularité de la journalisation. La valeur est une liste de paires de catégorie d’événement de journal et de niveau de journal.

Le niveau peut être none (aucun événement n’est enregistré), error (seules les erreurs sont enregistrées), warning (seuls les erreurs et les avertissements sont enregistrés), info (les erreurs, les avertissements et les messages d’information sont enregistrés ), ou debug (les erreurs, les avertissements, les messages d’information et les messages de débogage sont enregistrés).

À l’heure actuelle, quatre catégories sont définies. Les autres événements, actuellement non classés, sont toujours enregistrés.

Les catégories sont :

  • channel - pour tous les événements liés aux canaux AMQP

  • connexion - pour tous les événements liés aux connexions réseau

  • “fédération” - pour tous les événements liés à la fédération

  • mirroring - pour tous les événements liés aux files d’attente en miroir

Par défaut : [{connexion, info}]

  • frame_max : taille maximale autorisée d’une trame (en octets) à négocier avec les clients. Définir sur 0 signifie “illimité” mais déclenchera un bogue dans certains clients QPid. La définition d’une valeur plus élevée peut améliorer le débit ; définir une valeur plus petite peut améliorer la latence.

Par défaut : 131072

  • channel_max : nombre maximal autorisé de canaux à négocier avec les clients. Le réglage sur 0 signifie “illimité”. L’utilisation de plusieurs canaux augmente l’empreinte mémoire du courtier.

Par défaut : ‘0’

  • channel_operation_timeout : délai d’expiration du fonctionnement du canal en millisecondes (utilisé en interne, non directement exposé aux clients en raison des différences et des limitations du protocole de messagerie).

Par défaut : 15000

  • heartbeat : valeur représentant le délai de pulsation, en secondes, que le serveur envoie dans la trame connection.tune. S’il est défini sur 0, les battements de cœur sont désactivés. Les clients peuvent ne pas suivre la suggestion du serveur, consultez la référence AMQP pour plus de détails. La désactivation des battements de cœur peut améliorer les performances dans les situations avec un grand nombre de connexions, mais peut entraîner une interruption des connexions en présence de périphériques réseau qui ferment les connexions inactives.

Par défaut : 60 (580 avant la version 3.5.5)

  • default_vhost : hôte virtuel à créer lorsque RabbitMQ crée une nouvelle base de données à partir de zéro. L’échange amq.rabbitmq.log existera dans cet hôte virtuel.

Par défaut : <<"/">>

  • default_user : nom d’utilisateur à créer lorsque RabbitMQ crée une nouvelle base de données à partir de zéro.

Par défaut : <<"invité">>

  • default_pass : mot de passe pour l’utilisateur par défaut.

Par défaut : <<"invité">>

  • default_user_tags : balises pour l’utilisateur par défaut.

Par défaut : [administrateur]

  • default_permissions : Permissions à attribuer à l’utilisateur par défaut lors de sa création.

Par défaut : [<<".*">>, <<".*">>, <<".*">>]

  • loopback_users : liste des utilisateurs qui ne sont autorisés à se connecter au courtier que via une interface de bouclage (c’est-à-dire localhost).

Si vous souhaitez autoriser l’utilisateur invité par défaut à se connecter à distance, vous devez le remplacer par [].

Par défaut : [<<"invité">>]

  • cluster_nodes : définissez ceci pour que le clustering se produise automatiquement lorsqu’un nœud démarre pour la toute première fois. Le premier élément du tuple est les nœuds vers lesquels le nœud essaiera de se regrouper. Le deuxième élément est soit un disque, soit un bélier et détermine le type de nœud.

Par défaut : {[], disque}

  • server_properties : liste des paires clé-valeur à annoncer aux clients lors de la connexion.

Par défaut : []

  • collect_statistics : mode de collecte des statistiques. Principalement pertinent pour le plugin de gestion. Les options sont :

  • none (n’émet pas d’événements statistiques)

  • grossier (émet des statistiques par file d’attente / par canal / par connexion)

  • fine (émet également des statistiques par message)

Vous ne voulez probablement pas changer cela vous-même.

Par défaut : “aucun”

  • collect_statistics_interval : intervalle de collecte des statistiques en millisecondes. Principalement pertinent pour le plugin de gestion.

Par défaut : 5000

  • auth_mechanisms : mécanismes d’authentification SASL à proposer aux clients.

Par défaut : ['PLAIN', 'AMQPLAIN']

  • auth_backends : Liste des backends d’authentification/autorisation à utiliser. Cette liste peut contenir des noms de modules (auquel cas le même module est utilisé à la fois pour l’authentification et l’autorisation), ou des 2-tuples comme {ModN, ModZ} auquel cas ModN est utilisé pour l’authentification et ModZ est utilisé pour l’autorisation.

Dans le cas à 2 tuples, ModZ peut être remplacé par une liste dont tous les éléments doivent confirmer chaque demande d’autorisation, par ex. {ModN, [ModZ1, ModZ2]}. Cela permet aux plugins d’autorisation de se mélanger et de fournir des contraintes de sécurité supplémentaires.

D’autres bases de données que rabbit_auth_backend_internal sont disponibles via des plugins.

Par défaut : [rabbit_auth_backend_internal]

  • reverse_dns_lookups : défini sur true pour que RabbitMQ effectue une recherche DNS inversée sur les connexions client et présente ces informations via rabbitmqctl et le plug-in de gestion.

Par défaut : “faux”

  • delegate_count : nombre de processus délégués à utiliser pour la communication intra-cluster. Sur une machine qui possède un très grand nombre de cœurs et qui fait également partie d’un cluster, vous pouvez augmenter cette valeur.

Par défaut : 16

  • trace_vhosts : utilisé en interne par le traceur. Vous ne devriez pas changer cela.

Par défaut : []

  • tcp_listen_options : options de socket par défaut. Vous ne voulez probablement pas changer cela.

Défaut:

  [{backlog,       128},
   {nodelay,       true},
   {exit_on_close, false}]
  • hipe_compile : défini sur true pour précompiler des parties de RabbitMQ avec HiPE, un compilateur juste-à-temps pour Erlang. Cela augmentera le débit du serveur au prix d’un temps de démarrage accru.

Vous constaterez peut-être une amélioration des performances de 20 à 50 % au prix d’un délai de quelques minutes au démarrage. Ces chiffres dépendent fortement de la charge de travail et du matériel.

Le support HiPE peut ne pas être compilé dans votre installation Erlang. Si ce n’est pas le cas, l’activation de cette option entraînera simplement l’affichage d’un message d’avertissement et le démarrage se poursuivra normalement. Par exemple, les utilisateurs de Debian/Ubuntu devront installer le paquet erlang-base-hipe.

HiPE n’est pas du tout disponible sur certaines plateformes, notamment Windows.

HiPE a des problèmes connus dans les versions Erlang/OTP antérieures à 17.5. L’utilisation d’une version récente d’Erlang/OTP est fortement recommandée pour HiPE.

Par défaut : “faux”

  • cluster_partition_handling : comment gérer les partitions réseau. Les modes disponibles sont :

  • “ignorer”

  • pause_minority

  • {pause_if_all_down, [nœuds], ignorer | autoheal}[nodes] est une liste de noms de nœuds (ex : ['lapin@nœud1', 'lapin@nœud2'])

  • “réparation automatique”

Voir la documentation sur les partitions pour plus d’informations.

Par défaut : ignorer

  • cluster_keepalive_interval : la fréquence à laquelle les nœuds doivent envoyer des messages keepalive à d’autres nœuds (en millisecondes). Notez que ce n’est pas la même chose que net_ticktime ; les messages keepalive manqués ne feront pas considérer les nœuds comme inactifs.

Par défaut : 10000

  • queue_index_embed_msgs_below : taille en octets du message en dessous de laquelle les messages seront intégrés directement dans l’index de la file d’attente. Il est conseillé de lire la documentation de réglage du persister avant de modifier cela.

Par défaut : 4096

  • msg_store_index_module : module d’implémentation pour l’indexation des files d’attente. Il est conseillé de lire la documentation de réglage du persister avant de modifier cela.

Par défaut : rabbit_msg_store_ets_index

  • backing_queue_module : module d’implémentation pour le contenu de la file d’attente. Vous ne voulez probablement pas changer cela.

Par défaut : lapin_variable_queue

  • msg_store_file_size_limit : valeur ajustable pour le persister. Vous ne devriez certainement pas changer cela.

Par défaut : 16777216

  • mnesia_table_loading_timeout : délai d’expiration utilisé lors de l’attente que les tables Mnesia d’un cluster soient disponibles.

Par défaut : 30000

  • queue_index_max_journal_entries : valeur réglable pour le persister. Vous ne devriez certainement pas changer cela.

Par défaut : 65536

  • queue_master_locator : stratégie d’emplacement du maître de file d’attente. Les stratégies disponibles sont :

  • <<"min-masters">>

  • <<"client-local">>

  • <<"aléatoire">>

Consultez la documentation sur l’emplacement du maître de file d’attente pour plus d’informations.

Par défaut : <<"client-local">>