8.RabbitMQ logra una alta disponibilidad del clúster

RabbitMQ logra una alta disponibilidad de clúster

Prefacio

¿Por qué construir un clúster rabbitmq?

¿Cuáles son los modos del cluster rabbitmq?

¿Cómo configurar un clúster Rabbitmq?

¿Cuáles son las estrategias de alta disponibilidad que reflejan rabbitmq?

El producto RabbitMQ en sí tiene muchas ventajas. La más optimista es su asincronización para mejorar la capacidad anti-pico del sistema, y ​​luego el desacoplamiento del sistema y la estructura funcional. Como es tan importante, debemos considerar su alta disponibilidad.

rabbitmq tiene 3 modos :

  • Modo único: es decir, si una sola máquina no se usa como un clúster, simplemente ejecute un rabbitmq solo, que definitivamente no está disponible en producción.

  • Modo normal: el clúster normal consiste en iniciar varias instancias en varias máquinas. Cada cola solo existirá en una de las instancias, y luego todas las instancias sincronizarán los metadatos de estas colas. Cuando los consumidores consumen, si la instancia conectada no es la instancia donde se encuentra la cola, los datos se extraerán de la instancia donde se encuentra la cola de acuerdo con los metadatos de la cola.

    Se puede ver que el modo de clúster no está distribuido. Si la instancia donde se encuentra la cola deja de funcionar, hará que otras instancias no puedan extraer mensajes de esa instancia, por lo que el clúster mejora principalmente el rendimiento.

  • Modo espejo: la cola requerida se convierte en una cola espejo y hay varios nodos que pertenecen al esquema HA de RabbitMQ . ** Este modo resuelve los problemas en el modo normal. Su esencia es diferente del modo normal en que la entidad del mensaje se sincronizará activamente entre los nodos espejo en lugar de extraerla temporalmente cuando el cliente obtenga datos. Los efectos secundarios de este modo también son obvios: además de reducir el rendimiento del sistema, si hay demasiadas colas duplicadas y entra una gran cantidad de mensajes, esta comunicación sincrónica consumirá mucho el ancho de banda de la red dentro del clúster. Por lo tanto, es adecuado para ocasiones con altos requisitos de confiabilidad.

Referencia: https://www.rabbitmq.com/ha.html

Prepare el entorno del clúster para instalar RabbitMQ

  1. Dos máquinas Centos7, los nombres de host son: A, B

  2. Las direcciones IP son: A: 10.0.0.22; B: 10.0.0.33

  3. Modifique el archivo de hosts de la siguiente manera, el siguiente es el contenido del archivo de hosts de la máquina A, y B también necesita la siguiente configuración:

    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. Asegúrese de que ambas máquinas puedan hacer ping entre sí

    ping A 保证ping通
    ping B 保证ping通
    
  5. Instale rabbitmq en 2 máquinas por separado

Construya un clúster de modo general de rabbitmq

Después de instalar rabbitmq en las dos máquinas anteriores, puede ver el siguiente archivo en su máquina. La ruta está en HOME o en / var / lib / rabbitmq, el nombre del archivo es .erlang.cookie, es un archivo oculto. El mío está en HOME o en / var / lib / rabbitmq, el nombre del archivo es .erlang.cookie, es un archivo oculto. El mio esH O M E en o por el / V A R & lt / L I B / R & lt A B B I T m Q en , papel elemento de nombre se refiere a . E R & lt L A n- G . C O O K I E ,Él es piezas de texto ocultas ocultas de Yi Ge . El mío está debajo de HOME, que es / root.

El clúster RabbitMQ se basa en el clúster erlang y el clúster erlang utiliza esta cookie para la autenticación de la comunicación, por lo que el primer paso para crear un clúster es secar la cookie.

  1. El valor de la cookie en el archivo .erlang.cookie de las dos máquinas del clúster, a saber, A y B, debe ser el mismo, y el propietario debe tener los permisos de solo lectura. Modificar los permisos:

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

    rabbitmqctl stop
    
  3. Clúster de componentes, ejecute el comando de inicio y luego use este comando para iniciar el clúster

    rabbitmq-server -detached
    
  4. El esclavo se une a la operación del clúster (lo mismo es cierto para volver a unirse al clúster, con el nodo maestro inicial como nodo de unión)

    A es el nodo principal, así que no nos importa.
    Nodo B:

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

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

Cuando abrimos la consola, podemos ver que ya hay dos nodos en los Nodos debajo de la vista general. Eso es todo. Puedes hacer una prueba para verificar el modo normal del que estamos hablando.

Cree un clúster de modo de alta disponibilidad reflejado de rabbitmq

Primero, el modo espejo depende del módulo de políticas ¿Para qué se usa este módulo?

En chino, política es una política, el significado de una política, por lo que es establecer, esos intercambios o datos de cola deben replicarse, sincronizarse, ¿cómo replicar y sincronizar? Eso es lo que hace.

PD: Establecer la estrategia de cola de espejo (ejecutar en cualquier nodo)

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

PD: Configure todas las colas para que reflejen las colas, es decir, las colas se replicarán en cada nodo y el estado de cada nodo es coherente. Se ha configurado el clúster de alta disponibilidad de RabbitMQ. Podemos reiniciar el servicio y comprobar si la cola está sincronizada desde el nodo.

El parámetro significa:

ha-all: es el nombre de la política.

: Es un carácter coincidente, solo un medio para hacer coincidir todos, ^ abc es hacer coincidir intercambios o colas cuyo nombre es abc.

ha-mode: es el tipo de coincidencia, que se divide en 3 modos: all-all (todas las colas), exctly-part (los parámetros ha-params deben configurarse, este parámetro es de tipo int como 3, aleatorio 3 en muchos clústeres Máquina), nodos-especificar (los parámetros ha-params deben configurarse, este parámetro es un tipo de matriz como ["3rabbit @ F", "rabbit @ G"], que se designa como dos máquinas F y G.).

Para obtener más información, consulte http://www.rabbitmq.com/ha.html

Clúster de prueba 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

Agregar una cola:

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

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

consumidor:

/**
 * @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()));
    }

}

prueba:

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

    @Autowired
    private RabbitTemplate rabbitTemplate;

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

}

Dirección de origen: https://gitee.com/zoo-plus/springboot-learn/tree/2.x/springboot-middleware/rabbitmq-cluster

PD: Podemos usar Ha-Proxy (equilibrio de carga) + Keepalived (punto único de falla) para lograr una alta disponibilidad.

HAProxy:

Es un software proxy que proporciona alta disponibilidad, balanceo de carga y aplicaciones basadas en TCP y HTTP. HAProxy es completamente gratuito. Con la ayuda de HAProxy, puede proporcionar de forma rápida y confiable soluciones de proxy basadas en aplicaciones TCP y HTTP.

HAProxy es adecuado para aquellos sitios web con una gran carga, que generalmente requieren retención de sesión o procesamiento de siete capas.

HAProxy puede admitir decenas de miles de conexiones simultáneas, y el modo operativo de HAProxy hace que su integración en la arquitectura sea simple y segura, al tiempo que protege el servidor web de la exposición a la red.

Keepalived:

Es una solución de servidor de alto rendimiento de alta disponibilidad o hot standby. Keepalived se utiliza principalmente para evitar la ocurrencia de fallas de un solo punto en los servidores. Se puede usar con servidores de equilibrio de carga de proxy inverso como Nginx y Haproxy para lograr una alta disponibilidad del servidor web. Keepalived se basa en el protocolo VRRP y utiliza el protocolo VRRP para lograr alta disponibilidad (HA). El protocolo VRRP (Protocolo de redundancia de enrutador virtual) es un protocolo utilizado para implementar la redundancia del enrutador. El protocolo VRRP virtualiza dos o más dispositivos de enrutador en uno El dispositivo proporciona la IP del enrutador virtual (una o más) al exterior.

Supongo que te gusta

Origin blog.csdn.net/qq_36850813/article/details/104294794
Recomendado
Clasificación