8.RabbitMQ atteint la haute disponibilité du cluster

RabbitMQ atteint la haute disponibilité des clusters

Préface

Pourquoi créer un cluster rabbitmq?

Quels sont les modes du cluster rabbitmq?

Comment configurer un cluster Rabbitmq?

Quelles sont les stratégies de mise en miroir de rabbitmq à haute disponibilité?

Le produit RabbitMQ lui-même présente de nombreux avantages. Le plus optimiste est son asynchronisation pour améliorer la capacité anti-pic du système, puis le découplage du système et de la structure fonctionnelle. Comme il est si important, il faut considérer sa haute disponibilité.

rabbitmq dispose de 3 modes :

  • Mode unique: c'est-à-dire que si une seule machine n'est pas utilisée en tant que cluster, exécutez simplement un rabbitmq seul, qui n'est certainement pas disponible en production.

  • Mode normal: le cluster normal consiste à démarrer plusieurs instances sur plusieurs machines. Chaque file d'attente n'existera que sur l'une des instances, puis toutes les instances synchroniseront les métadonnées de ces files d'attente. Lorsque les consommateurs consomment, si l'instance connectée ne se trouve pas être l'instance où se trouve la file d'attente, les données seront extraites de l'instance où se trouve la file d'attente en fonction des métadonnées de la file d'attente

    On peut voir que le mode cluster n'est pas distribué. Si l'instance où se trouve la file d'attente tombe en panne, les autres instances ne pourront pas extraire les messages de cette instance, donc le cluster améliore principalement le débit

  • Mode miroir: la file d'attente requise est transformée en une file d'attente miroir et il existe plusieurs nœuds appartenant au schéma HA de RabbitMQ . ** Ce mode résout les problèmes en mode normal. Son essence est différente du mode normal en ce que l'entité de message se synchronisera activement entre les nœuds miroir au lieu de la tirer temporairement lorsque le client récupérera des données. Les effets secondaires de ce mode sont également évidents: en plus de réduire les performances du système, s'il y a trop de files d'attente miroir et qu'un grand nombre de messages entrent, la bande passante réseau au sein du cluster sera grandement consommée par cette communication synchrone. Par conséquent, il convient aux occasions avec des exigences de fiabilité élevées.

Référence: https://www.rabbitmq.com/ha.html

Préparez l'environnement de cluster pour installer RabbitMQ

  1. Deux machines Centos7, les noms d'hôte sont: A, B

  2. Les adresses IP sont: A: 10.0.0.22; B: 10.0.0.33

  3. Modifiez le fichier hosts comme suit, voici le contenu du fichier hosts de la machine A et B a également besoin de la configuration suivante:

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    
    10.0.0.22 A
    10.0.0.33 B
    
    
  4. Assurez-vous que les deux machines peuvent se cingler

    ping A 保证ping通
    ping B 保证ping通
    
  5. Installez rabbitmq sur 2 machines séparément

Construire un cluster en mode général de rabbitmq

Après avoir installé rabbitmq sur les deux machines ci-dessus, vous pouvez voir le fichier suivant sur votre machine. Le chemin est dans HOME ou dans / var / lib / rabbitmq, le nom du fichier est .erlang.cookie, c'est un fichier caché. Le mien est dans HOME ou dans / var / lib / rabbitmq, le nom du fichier est .erlang.cookie, c'est un fichier caché. Le mien estH O M E dans ou par la / V A R & lt / L I B / R & lt A B B I T m Q dans , papier élément nom visé à . E R & lt L A de G . C O O K I E ,Il est Yi Ge caché des morceaux de texte cachés . Le mien est sous HOME, qui est / root.

Le cluster RabbitMQ repose sur le cluster erlang, et le cluster erlang utilise ce cookie pour l'authentification de la communication.La première étape de la création d'un cluster consiste donc à sécher le cookie.

  1. La valeur du cookie dans le fichier .erlang.cookie des deux machines du cluster, à savoir A et B, doit être la même et les autorisations doivent être en lecture seule par le propriétaire. Modifiez les autorisations:

    chmod 600 .erlang.cookie #修改权限,只有自己读写
    scp /root/.erlang.cookie 10.0.0.33:/root #保证两台服务器cookie一样
    
  2. Arrêter le service MQ

    rabbitmqctl stop
    
  3. Cluster de composants, exécutez la commande de démarrage, puis utilisez cette commande pour démarrer le cluster

    rabbitmq-server -detached
    
  4. L'esclave rejoint l'opération de cluster (il en va de même pour la réintégration du cluster, avec le nœud maître initial comme nœud de jonction)

    A est le nœud maître, donc nous ne nous en soucions pas.
    Nœud B:

    rabbitmqctl stop_app #停止当前节点
    #成功之后出现Clustering node rabbit@B with rabbit@A
    rabbitmqctl join_cluster --ram rabbit@A #加入集群 --ram内存存储,默认不加的话就是磁盘存储
    rabbitmqctl start_app #再次重启当前节点
    #。。。。。如果还有多个节点一次重复上面这个步骤就可以了
    
  5. Autres commandes

    #默认为第一个node名称(在任意节点修改都可以)
    rabbitmqctl set_cluster_name rabbitmq_cluster1
    #在另外其他节点上操作要移除的集群节点
    rabbitmqctl forget_cluster_node rabbit@B
    

Lorsque nous ouvrons la console, nous pouvons voir qu'il y a déjà deux nœuds dans les nœuds sous l'aperçu. C'est tout. Vous pouvez faire un test pour vérifier le mode normal dont nous parlons.

Créer un cluster en mode haute disponibilité en miroir rabbitmq

Tout d'abord, le mode miroir dépend du module de stratégie. À quoi sert ce module?

En chinois, la politique est une politique, la signification d'une politique, donc c'est à définir, ces échanges ou données de file d'attente doivent être répliqués, synchronisés, comment répliquer et synchroniser? C'est ce qu'il fait.

PS: définir la stratégie de file d'attente miroir (exécuter sur n'importe quel nœud)

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

PS: définissez toutes les files d'attente sur des files d'attente miroir, c'est-à-dire que les files d'attente seront répliquées sur chaque nœud et que l'état de chaque nœud est cohérent. Le cluster haute disponibilité RabbitMQ a été configuré. Nous pouvons redémarrer le service et vérifier si la file d'attente est synchronisée à partir du nœud.

Le paramètre signifie:

ha-all: est le nom de la politique.

: Est un caractère correspondant, un seul moyen de faire correspondre tout, ^ abc correspond aux échanges ou aux files d'attente dont le nom est abc.

ha-mode: C'est le type correspondant, qui est divisé en 3 modes: all-all (toutes les files d'attente), exctly-part (les paramètres ha-params doivent être configurés, ce paramètre est de type int tel que 3, aléatoire 3 dans de nombreux clusters Machine), spécifiez les nœuds (les paramètres ha-params doivent être configurés, ce paramètre est un type de tableau tel que ["3rabbit @ F", "rabbit @ G"], qui est désigné comme deux machines F et G.).

Pour plus de détails, veuillez consulter http://www.rabbitmq.com/ha.html

cluster de test springboot2.x

配置 :

spring:
  application:
    name: zoo-plus-cluster
  rabbitmq:
    virtual-host: /
    username: xiefei
    password: xiefei
    addresses: 10.0.0.22:5672,10.0.0.33:5672
    connection-timeout: 15000

Ajouter une file d'attente:

/**
 * @author: 谢飞
 */
@Configuration
public class RabbitConfig {
    
    

    @Bean
    public Queue helloQueue() {
    
    
        return QueueBuilder.durable("hello-queue").build();
    }
}

consommateur:

/**
 * @author: 谢飞
 */
@Slf4j
@Component
public class Consumer {
    
    

    @RabbitListener(queues = {
    
    "hello-queue"})
    public void helloQueue(Message message, Channel channel) {
    
    
        log.info("-----------------hello-queue消费:" + new String(message.getBody()));
    }

}

tester:

/**
 * @author: 谢飞
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRabbitMQ {
    
    

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送到集群队列
     */
    @Test
    public void sendHelloQueue() {
    
    
        rabbitTemplate.convertAndSend( "hello-queue", "这是发送到集群队列的消息");
    }

}

Adresse source: https://gitee.com/zoo-plus/springboot-learn/tree/2.x/springboot-middleware/rabbitmq-cluster

PS: Nous pouvons utiliser Ha-Proxy (équilibrage de charge) + Keepalived (point de défaillance unique) pour atteindre une haute disponibilité.

HAProxy :

Il s'agit d'un logiciel proxy qui fournit une haute disponibilité, un équilibrage de charge et des applications TCP et HTTP. HAProxy est entièrement gratuit. Avec l'aide de HAProxy, il peut fournir rapidement et de manière fiable des solutions proxy basées sur des applications TCP et HTTP.

HAProxy convient aux sites Web avec une charge importante, qui nécessitent généralement une rétention de session ou un traitement en sept couches.

HAProxy peut prendre en charge des dizaines de milliers de connexions simultanées, et le mode de fonctionnement de HAProxy rend son intégration simple et sûre dans l'architecture, tout en protégeant le serveur Web contre toute exposition au réseau.

Keepalived :

Il s'agit d'une solution de serveur haute disponibilité ou de secours à chaud hautes performances. Keepalived est principalement utilisé pour éviter les pannes de serveur à un seul point. Il peut être utilisé avec des serveurs d'équilibrage de charge proxy inversé tels que Nginx et Haproxy pour obtenir une haute disponibilité du serveur Web. Keepalived est basé sur le protocole VRRP et utilise le protocole VRRP pour atteindre la haute disponibilité (HA). Le protocole VRRP (Virtual Router Redundancy Protocol) est un protocole utilisé pour implémenter la redondance des routeurs. Le protocole VRRP virtualise deux ou plusieurs routeurs en un seul. L'appareil fournit l'adresse IP du routeur virtuel (une ou plusieurs) vers l'extérieur.

Je suppose que tu aimes

Origine blog.csdn.net/qq_36850813/article/details/104294794
conseillé
Classement