MQ es todo en un sistema de bus de mensajes del sistema distribuido, hay que tratar de garantizar el funcionamiento normal de mq en un entorno de producción, por lo general utilizan maestro-esclavo, cuelga maestro esclavo puede garantizar la máxima seguir trabajando, pero sólo maestro -slave aunque sólo sea para garantizar una alta disponibilidad, balanceo de carga no se puede hacer, ya que si la carga es demasiado grande mq colgar, maestro-esclavo no puede resolver este problema, debe configurar el equilibrio de carga
activemq despliegue de maestro-esclavo
- implementación Master-Slave sistema de archivos compartido, basado en un directorio de almacenamiento de datos compartida, corredor de múltiples Sistema de archivos compartidos de almacenamiento, que tomó el control del archivo de almacenamiento que es dueño
- modo compartido de bases de datos maestro-esclavo, basado en una base de datos compartida, con una primera similares
- replicado de manera LevelDB tienda, basada empleado del zoológico + LevelDB. LevelDB Google es una kv base de datos de alto rendimiento. Esta es la única manera de añadir después ActiveMQ5.9, el principio es el uso de la coordinación ZooKeeper elegir a un nodo como un maestro, el nodo intermediario master seleccionado conexiones de cliente abierto y acepta. Si el maestro de colgar, obtener los datos de más de esclavo se convierte en maestro. Después de la recuperación nodo re-hang se puede añadir a la red y está conectado en el modo maestro-esclavo.
Los dos primeros para asegurar una alta disponibilidad y el rendimiento del sistema de archivos o base de datos compartida para garantizar una alta disponibilidad mq, a veces no es fácil de cumplir con lo anterior, se utiliza una tercera vía para construir un cluster maestro-esclavo.
medio ambiente
Dado que sólo tenemos dos anfitriones, vamos a configurar un maniquí de prueba racimos maestro-esclavo en cada host, y luego volver a conectarse entre sí para completar los dos grupos de equilibrio de carga
jdk : jdk8
zookeeper: 3.2
activemq: 5.15
主机1:192.168.0.103
主机2:192.168.0.104
Crear un clúster maestro-esclavo
pasos:
- Descargar -> unpack -> Copia 3 copias ActiveMQ (5.9 o posterior) para asegurarse de que no hay ningún problema que corre solo
2. Modificar la persistencia de la forma en que cada activemq
vi ACTIVEMQ_HOME/conf/activemq.xml
El kahadb predeterminado modificado de la siguiente manera, empleado del zoológico agrupar lo hice, muy problemático el uso directo de un único punto no afecta Zookeeper
//directoryleveldb数据保存路径
//bind 服务端口
//replicas表示master-slave集群中节点个数
//zkAddress依次指定三台服务器的ip和ZooKeeper的监听端口
//zkPah在zookeeper中注册的节点路径
//hostname为每一台服务器的ip地址,三台服务器根据实际情况修改
<persistenceAdapter>
<replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3"
bind="tcp://0.0.0.0:62621"
zkAddress="localhost:2181,localhost:2182,localhost:2183"
hostname="localhost"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
3. Modificar el puerto de servicio TCP activemq
Esta configuración también ACTIVEMQ_HOME / conf / activemq.xml, por defecto 61616, la misma máquina no se puede repetir, de lo contrario el conflicto de puertos, estoy aquí para el 61616, 61617, 61618
4. Modificar el puerto embarcadero
activemq ejecutar el servicio utilizando el embarcadero ACTIVEMQ_HOME modificador / conf / jetty.xml tres puertos no se puede garantizar la misma
forma secuencial a 8161, 8162, 8163
- Comienzan empleado del zoológico, comienzan tres casos activemq
- Verificar
de entrada del cliente Zookeeper
ejecutar: ls / activemq / LevelDB-tiendas
Ver nodo encontró tres nodos en / ActiveMQ / LevelDB-tiendas, una para cada servicio activemqimage.png
Ver los datos de cada nodo, que no elegidos nula es el maestro, para el esclavo es nuloimage.png
También se pueden descargar las herramientas de visualización zookeeper:
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip ;
ejecutar ZooInspector \ build \ cuidador del zoológico-dev- ZooInspector.jar puede ver los datos del nodo
ps: sólo se aceptan solicitudes maestro, esclavo no acepta la solicitud, no se puede utilizar la interfaz administrativa
Configurar el equilibrio de carga
- Hemos construido un cluster buena una, puede utilizar el comando scp para copiar un archivo a otro de tres activemq puede conseguir otro host de clúster
#activemqCluster 是我本机的activemq 集群安装目录
scp -r activemqCluster [email protected]:/soft
- Enlace Cluster 2 (configuración antes persistenceAdapter etiqueta) en el grupo activemq.xml 1:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.0.103:61616,tcp://192.168.0.103:61617,tcp://192.168.0.103:61618)" duplex="false"/>
</networkConnectors>
- clúster Link 1 (configuración antes de etiqueta persistenceAdapter) en el grupo 2 activemq.xml en:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.0.104:61616,tcp://192.168.0.104:61617,tcp://192.168.0.104:61618)" duplex="false"/>
</networkConnectors>
Esta realización ActiveMQ clúster de equilibrio de carga de alta disponibilidad.
Proyecto activemq configurado dirección debe decir:
conmutación por error :( tcp: //192.168.0.103: 61616, tcp: //192.168.0.103: 61617, tcp: //192.168.0.103: 61618) el Aleatorizar = falso?
O:
conmutación por error: ( tcp: //192.168.0.104: 61616, tcp: //192.168.0.104: 61617, tcp: //192.168.0.104: 61618) el Randomize = false?
prueba
1. Prueba de maestro-esclavo, el maestro fuera (61616), 61617, y automáticamente cambiar al reconectar el maestro (integridad de los datos no se puede garantizar cuando se cambia) de nuevo para cerrar un servicio de 61.617, más de la mitad de colgar, el servicio no está disponible, el cliente se bloquea ya no pueden enviar mensajes
image.png
-
El equilibrio de carga de prueba
arquitectura final es el maestro-esclavo se comunican unos con otros dos grupos, dos grupos pueden consumir los mensajes de los demás, pero si se bloquea el cliente se inscribe el cluster del lado del cliente está conectado todavía no puede enviar un mensaje, que el activemq simplemente no balanceo de carga de consumo de equilibrio de carga, alta disponibilidad está garantizada por el maestro-esclavo.Hemos puesto en marcha dos servicios al consumidor el mismo nombre de la cola para escuchar
mq direcciones están configuradas
failover:(tcp://192.168.0.103:61616,tcp://192.168.0.103:61617,tcp://192.168.0.103:61618)?randomize=false
和:
failover:(tcp://192.168.0.104:61616,tcp://192.168.0.104:61617,tcp://192.168.0.104:61618)?randomize=false
Después de iniciar el envío de mensajes mantenido a agruparse 104, los consumidores pueden encontrar dos mensajes enviados al grupo de consumidores 104, pero el registro de impresión algunas diferencias, 103 grupos de servicios de consumo conectados conectados a la pantalla 104 por Matser FailoverTransport
image.png
Hasta el momento, el equilibrio de carga de alta disponibilidad + creó se ha completado.
En una nota final, la prueba encontró que el consumo en el mensaje interruptor maestro-esclavo todavía puede ser un problema, no es infalible