Antecedentes
El proyecto debe ser utilizado RabbitMQ
y, al mismo tiempo, debe ser un clúster espejo.
Combate real
El siguiente experimento se basa en Centos6
,RabbitMQ 3.8.3
Versión del sistema | ip | Nombre de host |
---|---|---|
Centos 6 | 192.168.201.170 | mq1 |
Centos 6 | 192.168.201.171 | MQ2 |
Centos 6 | 192.168.201.172 | mq3 |
Tres servidores recuerdan configurar hosts
cat <<EOF>> /etc/hosts
192.168.201.170 mq1
192.168.201.171 mq2
192.168.201.172 mq3
EOF
Instalar
# 三台都要操作
wget https://mirrors.huaweicloud.com/rabbitmq-server/v3.8.3/rabbitmq-server-3.8.3-1.el6.noarch.rpm
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.3.2/erlang-22.3.2-1.el6.x86_64.rpm
yum localinstall erlang-22.3.2-1.el6.x86_64.rpm rabbitmq-server-3.8.3-1.el6.noarch.rpm -y
Configuracion
# 三台都要操作
# 安装简单,配置比较麻烦
# 我这里需要修改 RabbitMQ 的默认数据目录
mkdir -p /data/rabbitmq/{mnesia,log}
chown -R rabbitmq.rabbitmq /data/rabbitmq/
cat <<EOF> /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log
EOF
#不知道为什么,只要修改过 /etc/rabbitmq 的文件,就要重新授权
chown -R rabbitmq.rabbitmq /etc/rabbitmq/
# 启动
/etc/init.d/rabbitmq-server start
# 启用 web 界面,此处必须,不然搭建集群会提示 “Node statistics not available”
rabbitmq-plugins enable rabbitmq_management
# 查看状态
/etc/init.d/rabbitmq-server status
Construye un clúster ordinario
En frente de la instalación RabbitMQ
también se instala el tiempo erlang
, la oportunidad de aparecer en un archivo oculto llamado después de Bahrein .erlang.cookie
, caminos $HOME
y /var/lib/rabbitmq/.erlang.cookie
, pero los documentos oficiales decir sí o claro por qué tengo aquí hay tres caminos.
En los sistemas UNIX, la cookie generalmente se ubicará en
/var/lib/rabbitmq/.erlang.cookie
(utilizada por el servidor) y$HOME/.erlang.cookie
(utilizada por las herramientas CLI). Tenga en cuenta que, dado que el valor de$HOME
varía de un usuario a otro, es necesario colocar una copia del archivo de cookies para cada usuario que utilizará las herramientas de la CLI. Esto se aplica tanto a usuarios no privilegiados como aroot
.
¿Por qué se usa esta cosa? RabbitMQ
El cluster depende de erlang
un grupo, y erlang
el grupo es a través de este cookie
autenticación de la comunicación, por lo que asegúrese de que todas las máquinas de .erlang.cookie
un mismo contenido, y los privilegios de sólo lectura.
Para que podamos poner mq1
una .erlang.cookie
copia a mq2
, mq3
la máquina, y luego modificar los permisos
# mq1 操作
scp /var/lib/rabbitmq/.erlang.cookie 192.168.201.171:/var/lib/rabbitmq
# mq2 操作
chmod 400 /var/lib/rabbitmq/.erlang.cookie
mq2
, mq3
Únete al clúster
rabbitmqctl stop_app
# => Stopping node rabbit@mq2 ...done.
rabbitmqctl reset
# => Resetting node rabbit@mq2 ...
# 如果要设置为内存节点,则改为 rabbitmqctl join_cluster --ram rabbit@mq1
rabbitmqctl join_cluster rabbit@mq1
# => Clustering node rabbit@mq2 with [rabbit@mq1] ...done.
rabbitmqctl start_app
# => Starting node rabbit@mq2 ...done.
Ver el estado del clúster
rabbitmqctl cluster_status
...
Basics
Cluster name: rabbit@mq1
Disk Nodes
rabbit@mq1
rabbit@mq2
rabbit@mq3
Running Nodes
rabbit@mq1
rabbit@mq2
rabbit@mq3
...
Cluster espejo
J simplemente dijo que el mecanismo de la cola espejo es establecer la cola entre N nodos. El mensaje se sincronizará automáticamente entre N nodos, y si uno de los nodos no está disponible, no causará pérdida de mensajes o servicio. Cuando no está disponible, mejora la alta disponibilidad general del clúster MQ.
Configuracion
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'