ActiveMQ MasterSlave

MasterSlave方式中,master提供服务,slave备份master的数据。当master挂掉后,slave会变成master继续工作。

Shared File System Master Slave

基于共享文件系统,第一个获取文件上的独占锁的broker,就是master,如果这个broker挂了,其他broker获取文件上的独占锁,就从slave变成master。
broker61616、broker61618、broker61619的persistenceAdapter配置如下:

1
2
3
<persistenceAdapter>
<kahaDB directory="H:\soft\developer\apache\apache-activemq-1\data\kahadb"/>
</persistenceAdapter>

启动

依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到文件的独占锁,变成slave:
image.png
此时结构图如下:
Startup.png

master关闭

关闭后,其中一个slave抢到文件的独占锁,变成master:
image.png
此时结构图如下:
MasterFailed.png

重启原master

由于此时文件的独占锁已经被抢了,所以就算原master重启,也只能是slave了:
image.png
此时结构图如下:
MasterRestarted.png

JDBC Master Slave

jdbcPersistenceAdapter要加个locker标签和lockKeepAlivePeriod的值。

1
2
3
4
5
6
7
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" lockKeepAlivePeriod="5000">
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>

启动

依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到锁,在等待:
数据库值:
image.png
61618:
image.png
61619:
image.png

master关闭

此时61619变成master
image.png

重启原master

在等待中
image.png