MasterSlave方式中,master提供服务,slave备份master的数据。当master挂掉后,slave会变成master继续工作。
Shared File System Master Slave
基于共享文件系统,第一个获取文件上的独占锁的broker,就是master,如果这个broker挂了,其他broker获取文件上的独占锁,就从slave变成master。
broker61616、broker61618、broker61619的persistenceAdapter配置如下:
<persistenceAdapter>
<kahaDB directory="H:\soft\developer\apache\apache-activemq-1\data\kahadb"/>
</persistenceAdapter>
启动
依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到文件的独占锁,变成slave:
此时结构图如下:
master关闭
关闭后,其中一个slave抢到文件的独占锁,变成master:
此时结构图如下:
重启原master
由于此时文件的独占锁已经被抢了,所以就算原master重启,也只能是slave了:
此时结构图如下:
JDBC Master Slave
基于JDBC作为数据源,配置参考JDBC的持久化,不同的是,jdbcPersistenceAdapter要加个locker标签和lockKeepAlivePeriod的值。
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" lockKeepAlivePeriod="5000">
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>
启动
依次启动broker,61616由于先启动,此时是master,61618、61619的启动结果如下,由于没抢到锁,在等待:
数据库值:
61618:
61619:
master关闭
此时61619变成master
重启原master
在等待中
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。