ActiveMQ 主备

Replicated LevelDB Store 主备的方式是用Apache Zookeeper从一组broker中选举一个Master。然后所有的Slave 与Master同步,与Master保持一致。

Replicated LevelDB Store使用Zookeeper来调度集群中的节点变成master。被选举的master broker启动并接受客户端请求连接。其他broker进入到slave模式,并且连接到master上同步他的持久化状态。slave节点不接受客户端的连接。所有的持久化操作被复制到slave节点上。如果master挂掉,最后被更新的节点立刻成为master。挂掉的节点可以重新连接到集群中,成为slave节点。

 

所有被同步到磁盘上的发送消息的操作等待被法定的节点更新。如果你配的集群replicas="3",法定结点的大小为(3/2+1)=2。master将会等待别1个slave来复制,复制结束后master才会返回成功信息。

 

如果新的master被选举出来,你仍要保持至少有法定个节点在线,这样能才保证可以找到法定节点复制数据。比如replicas="3",法定节点数为(3/2+1)=2,也就是说至少保证集群中有2节点是有效的才能复制数据。所以推荐集群至少有3个节点,挂掉一个还有2个,仍然符合法定节点的数量。

 

客户端应使用 failover:(tcp://broker1:61616,tcp://broker2:61616,tcp://broker3:61616) 来连接broker。

 

下面的主备例子是在同一台机器上、windows操作系统上进行,具体步骤如下:

1)安装MQ

安装很简单,在这不写了。

2)配置activemq.xml

 

打开[activemq_installdir]/conf/activemq.xml,找到

<persistenceAdapter>...</persistenceAdapter>

节点,修改如下:

<persistenceAdapter>
            <replicatedLevelDB 
				directory="activemq-data"
				replicas="3"
				bind="tcp://0.0.0.0:0"
				zkAddress="localhost:2181"
				zkPath="/activemq/leveldb-stores"
				sync="quorum_disk"
			/>
        </persistenceAdapter

然后保存!

3)复制activemq

将配置好的mq复制两份,如图所示,现在有3个mq

4)配置其他两个mq

因为是在同一台机器上,所以mq端口会冲突,下面把其他两个mq的端口改一下

打开第2个mq的activemq.xml,找到如下配置:

<transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>


将transportConnector的端口号都改一下,我是把每个端口号减10,修改过的端口如下:

<transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61606?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5662?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61603?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1873?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61604?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>


修改完activemq.xml,在conf目录下还有一个jetty.xml,将jettyPort的端口8161也减去10,改为8151。

这样第2个mq配置完成。

 

5)配置第3个mq

第3个mq的配置步骤跟第2个mq一样,改端口号,在第2个mq端口号的基础上再减10,保存3个mq的端口不冲突。

 

到这一步3个mq配置完成。

注意一点,在activemq.xml中有一个brokerName,如图所示

3个mq的brokerName必须相同,这样集群才能识别出这个broker是属于我这个集群的。

 

6)启动zookeeper

启动zookeeper,本次试验是在同一台机器上进行,所以在配置activemq.xml中的zkAddress时都是zkAddress="localhost:2181",如果不在同一台机器上,可以修改为相应的IP。

注意,要先启动zookeeper。

 

7)启动mq

进入3个mq的[activemq_installdir]/bin/win32,双击activemq.bat启动mq

启动第1个mq的时候,控制台会显示如下图所示

提示集群中没有足够的成员来选举master。

因为设置repicas="3",也就是说集群中至少有2个mq才能选举出master。

启动第2个mq,集群可以正常启动,再启动第3个mq,所有步骤完成。

这时可以访问http://localhost:8161/admin,出现mq的管理界面,如果不行,可以访问http://localhost:8151/admin、http://localhost:8141/admin,只要有一个显示说明一切正常。

 

到这里全部完成。

 

测试

客户端的生产者和消息者连接mq的url值为failover:(tcp://localhost:61616,tcp://localhost:61606,tcp://localhost:61596),这样,在一个mq挂掉之后,会自动连接到另一个master上。

测试例子请查看 http://blog.csdn.net/u010764427/article/details/50589700

 

 



 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值