Cola de mensajes MQ-rabbitmq

Introducción a la cola de mensajes.

conejoMQ kafka activeMQ coheteMQ


Dividir órdenes de pago por negocio

Pago vertical dividido
Alipay Pago WeChat Cloud Quick Pass

Varios elementos de la implementación de microservicios
¿Cómo llegan los microservicios (docker)?
¿Cómo se descubren los microservicios entre sí?
¿Cómo acceden los microservicios entre sí? Cómo monitorear
la expansión rápida Cómo ver los registros de acceso (ELK ) de actualización y reversión (CI/CD )


bota de primavera
nube de primavera

postgres@server01:~$ apt-cache madison Rabbitmq-servidor

Instalación independiente de RabbitMQ

Sitio web oficial https://www.rabbitmq.com/install-debian.html#apt-quick-start-cloudsmith

官方安装脚本,ubuntu22.04系统
root@server01:~/sh# cat install_rabbitmq.sh 
#!/bin/sh

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://ppa.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://ppa.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null

## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main

## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF

## Update package indices
sudo apt-get update -y

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

Enumere todas las fuentes del software Rabbitmq-Server
apt-cache Madison Rabbitmq-Server

Verifique la versión de RabbitMQ
root@server01:~/sh# estado de Rabbitmqctl | grep “Versión de RabbitMQ”
Versión de RabbitMQ: 3.12.3

Crear usuario

# 1、创建用户并设置密码
[root@rabbit01 ~]# rabbitmqctl add_user admin 123456

#2、赋予其administrator角色
[root@rabbit01 ~]# rabbitmqctl set_user_tags admin administrator

#3、设置权限
[root@rabbit01 ~]# rabbitmqctl  set_permissions -p "/" admin '.*' '.*' '.*'


修改密码
root@server02:~# rabbitmqctl   change_password n80 12345

http://dirección IP:15672 acceso
inserte la descripción de la imagen aquí

root@server02:~# rabbitmqctl  add_vhost  n80 #是用来创建一个名为n80的虚拟主机
root@server02:~# rabbitmqctl  list_vhosts   #用来列出当前 RabbitMQ 服务器上的所有虚拟主机。
root@server02:~# rabbitmqctl list_queues   #列出当前 RabbitMQ 服务器上的所有队列及其相关信息。

Agregar usuarios y configurar permisos
inserte la descripción de la imagen aquí

implementación del clúster de conejos

El clúster rqbbit se divide en dos modos: modo normal y modo espejo

Hay dos tipos de nodos en el clúster:
nodo de disco: guarda datos en la memoria y en el disco.
Nodo de memoria: guarda datos en
la memoria. Aunque el nodo de memoria no escribe en el disco, funciona mejor que el nodo de disco. En el clúster, solo uno
Se necesita disco. Es suficiente para que los nodos guarden datos. Si solo hay nodos de memoria en el clúster, entonces no se pueden detener todos; de lo contrario,
todos los mensajes de datos se perderán después de detener todos los servidores.

Los tres nodos utilizan el script oficial para instalar Rabbitmq, configurar el nombre del host y la resolución del host.

vi /etc/hosts
192.168.74.70 nodo1.rabbit.org nodo1
192.168.74.71 nodo2.rabbit.org nodo2
192.168.74.72 nodo3.rabbit.org nodo3

Crear un clúster RabbitMQ

Cierre RabbitMQ en cada servidor:

El clúster RabbitMQ depende del clúster Erlang para funcionar, por lo que primero se debe crear el entorno del clúster Erlang. Cada nodo en el clúster Erlang se implementa a través de una cookie mágica. Esta cookie se almacena en /var/lib/rabbitmq/. En erlang. cookie, el permiso del archivo es 400 y las cookies de cada nodo deben ser consistentes. De lo contrario, los nodos no pueden comunicarse. Sincronice
.erlang.cookie en mq-server1 con los otros dos servidores:
scp /var/lib/rabbitmq/.erlang .cookie 192.168.74.71: /var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.74.72:/var/lib/rabbitmq/

nodo1:
agregue el nodo1 al nodo3 como nodo de memoria y, como nodo de memoria, ejecute el siguiente comando en el nodo1

root@node1:/etc/rabbitmq# rabbitmqctl stop_app  
Stopping rabbit application on node rabbit@node1 ...
root@node1:/etc/rabbitmq# rabbitmqctl reset 
Resetting node rabbit@node1 ...
root@node1:/etc/rabbitmq#  rabbitmqctl  join_cluster rabbit@node3 --ram
Clustering node rabbit@node1 with rabbit@node3
root@node1:/etc/rabbitmq# rabbitmqctl start_app
Starting node rabbit@node1 ...

nodo2:
agregue el nodo2 al nodo3 como nodo de memoria y, como nodo de memoria, ejecute el siguiente comando en el nodo2:

root@node2:~# systemctl restart rabbitmq-server
root@node2:~# rabbitmqctl stop_app    ##停止 app 服务
Stopping rabbit application on node rabbit@node2 ...
root@node2:~# rabbitmqctl reset   ##清空元数据
Resetting node rabbit@node2 ...
root@node2:~# rabbitmqctl  join_cluster rabbit@node3 --ram
Clustering node rabbit@node2 with rabbit@node3
root@node2:~# rabbitmqctl start_app   ##启动 app 服务
Starting node rabbit@node2 ...


vista nodo3

root@node3:~# rabbitmqctl  cluster_status
............
Disk Nodes

rabbit@node3

RAM Nodes  #内存节点

rabbit@node1
rabbit@node2

Running Nodes   #运行的节点

rabbit@node1
rabbit@node2
rabbit@node3

Versions

rabbit@node1: RabbitMQ 3.11.15 on Erlang 25.3.1
rabbit@node2: RabbitMQ 3.11.15 on Erlang 25.3.1
rabbit@node3: RabbitMQ 3.11.15 on Erlang 25.3.1

CPU Cores

Node: rabbit@node1, available CPU cores: 2
Node: rabbit@node2, available CPU cores: 2
Node: rabbit@node3, available CPU cores: 2
............

Configure el clúster en modo espejo

Rabbitmqctl set_policy ha-all “^” '{“ha-mode”:“todos”}'

Verificar el estado del clúster

Cree una cuenta en cualquier nodo
Rabbitmqctl add_user admin 123456
Rabbitmqctl set_user_tags admin administrador
Rabbitmqctl set_permissions -p "/" admin '. ' '. ' '.*'

Habilite complementos en todos los nodos
sudo Rabbitmq-plugins enable Rabbitmq_management #Habilitar complementos web

Los tres nodos pueden iniciar sesión
inserte la descripción de la imagen aquí

Para eliminar un clúster RabbitMQ, siga estos pasos:

  1. Detenga todos los nodos RabbitMQ: ejecute el siguiente comando en cada nodo para detener el servicio RabbitMQ:

    rabbitmqctl stop_app
    rabbitmqctl reset
    
  2. Borrar el estado del clúster entre nodos: ejecute el siguiente comando en cada nodo para borrar el estado del clúster entre nodos:

    rabbitmqctl force_reset
    
  3. Restablezca el nombre del nodo o borre la configuración en cada nodo: puede optar por restaurar el nodo como un nodo independiente o borrar completamente la información de configuración del nodo. Si desea restaurar el nodo como un nodo independiente, elimine todos los archivos en el directorio de configuración de RabbitMQ (generalmente ubicado en /etc/rabbitmq/o /var/lib/rabbitmq/). Luego reinicie el servicio RabbitMQ.
    systemctl reinicia el servidor Rabbitmq

Tenga en cuenta que eliminar el clúster RabbitMQ puede provocar la pérdida de datos. Asegúrese de haber realizado una copia de seguridad de los datos importantes antes de realizar la operación.

Monitoreo de clústeres

API RabbitMQ:
curl -s -u invitado:invitado http://localhost:15672/api/nodes

Monitoreo del estado del clúster

root@node1:~/py# cat rabbitmq.py 
#!/bin/env python
#coding:utf-8
#Author: ZhangJie
import subprocess
running_list = []
error_list = []
false = "false"
true = "true" 
def get_status():
    obj = subprocess.Popen(("curl -s -u guest:guest http://localhost:15672/api/nodes &> /dev/null"), shell=True, stdout=subprocess.PIPE)
    data = obj.stdout.read()
    data1 = eval(data)
    for i in data1:
        if i.get("running") == "true":
            running_list.append(i.get("name"))
        else:
            error_list.append(i.get("name"))
def count_server():
    if len(running_list) < 3: # 可以判断错误列表大于 0 或者运行列表小于 3,3未总计的节点数量
        print(101) # 100 就是集群内有节点运行不正常了
    else:
        print(50) # 50 为所有节点全部运行正常
def main():
    get_status()
    count_server()
if __name__ == "__main__":
    main()

Monitoreo del uso de memoria

root@node1:~/py# python3 rabbitmq_memory.py rabbit@node2
139382784
root@node1:~/py# cat rabbitmq_memory.py 
#!/bin/env python
#coding:utf-8
#Author: ZhangJie
import subprocess
import sys
running_list = []
error_list = []
false = "false"
true = "true" 
def get_status():
    obj = subprocess.Popen(("curl -s -u guest:guest http://localhost:15672/api/nodes &> /dev/null"), shell=True, stdout=subprocess.PIPE)
    data = obj.stdout.read()
    data1 = eval(data)
    #print(data1)
    for i in data1:
        if i.get("name") == sys.argv[1]:
            print(i.get("mem_used"))
def main():
    get_status()
if __name__ == "__main__":
    main()

root@node1:~/py# python3  rabbitmq_memory.py rabbit-test
root@node1:~/py# python3 rabbitmq_memory.py rabbit@node1
138203136

Ver la lista de todas las conexiones
curl -s -u admin:123456 http://localhost:15672/api/connections

Ver la cola
curl -s -u admin:123456 http://localhost:15672/api/queues/

Supongo que te gusta

Origin blog.csdn.net/m0_37749659/article/details/132484156
Recomendado
Clasificación