ActiveMQ基于zookeeper+leveldb主从配置
以下为官网:http://activemq.apache.org/clustering.html 页面,主从复制就是根据当前页面中的Master Slave配置的。
官网主从配置的方式以下三种
1. 通过共享文件系统,众多brokers争夺文件系统的使用权,谁争夺到了,谁就是Master。
2. JDBC的主从,跟文件共享系统差不多,只不过持久化为数据库。
3. zookeeper+leveldb的主从,用它只是因为官网上的那句Very fast。
稍微说一下此时的环境,我是在一台公网机器上配置了三个zookeeper和三个activerMQ,所以内网IP都是一样的,利用不同的端口区分它们。
三台MQ要用到的端口分别为:
61616 8161
61617 8162
61618 8163
三台ZK用到的端口分别为2181,2182,2183
部署步骤如下
- 在home下mkdir文件夹,在其内分别创建三个server文件夹予以区分。
zookeeper下载地址:http://zookeeper.apache.org/releases.html
activeMQ 下载地址:http://activemq.apache.org/download.html
在每个server文件夹内,分别上传压缩包并解压。而且还创建了data和dataLog文件夹准备存放zookeeper的数据和日志文件。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
进入data目录,创建一个myid的文件,里面写入一个数字,比如我这个是server1,那么就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
进入zookeeper-3.3.6的conf文件夹下,mv zoo_sample.cfg 为zoo.cfg.看一下我server1中的zoo.cfg的配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
注意更改dataDir中,dataLogDir的路径分别是自己文件夹的路径。
还有就是clientPort也要改成不同的端口。三台ZK用到的端口分别为2181,2182,2183
server.X中的X对应着就是上边data/myid中的数字。
其他两台跟此大体相同,只不过注意dataDir,dataLogDir的路径及clientProt的端口号,还有data/myid中的值。
2.启动zookeeper并观察日志。
分别进入三个zookeeper中的bin进行启动
- 1
- 2
- 1
- 2
- 1
- 1
一定要去看日志,避免启动不正常。
3.配置三个service文件夹中的ActiveMQ
首先分别更改三个MQ的端口,涉及到的配置文件为apache-activemq-5.12.1/conf
中的activemq.xml,jetty.xml,因为我这是在一台机器上,如果你是三台,那么久不用改了,通过Ip就可以区分了。
vim activemq.xml
server2中将61616改为61617,server3改为61618
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
vim jetty.xml
将web界面端口同理分别改为8162,8163
- 1
- 2
- 1
- 2
4.更改activema.xml文件,与zookeeper关联上。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
注意修改persistenceAdapter节点
- replicas:集群中节点的数量,这里配置了三台就是3
- bind:当这个节点成为主节点后,就会默认绑定当前IP和端口
- zkAddress:三台zookeeper的服务ip和端口,用逗号隔开
- zkPath:默认不用改
- hostname:这里应该填写三台zookeeper可以互相访问的地址,我因为用的是一台机器,所以写的127.0.0.1,如果你部署的是三台内网,这里就写相应的那台机器的内网IP。
三台mq都配置完之后###,
- 进入/home/ZooKeeper/server1/apache-activemq-5.12.1/bin目录
- 1
- 2
- 1
- 2
启动三台mq,一台一台启动的时候也要查active的log
- 1
- 2
- 3
- 1
- 2
- 3
如果到这里启动没什么问题的话,当你启动第一台mq的时候,zookeeper的日志就会打出英文的日志
告诉你一台activemq不够,至少两台才能形成Master/Slave。
之后可以在浏览器上分别访问三台activeMq的web管理后台8161,8162,8163 这种主从的方式成功的话,只会有一台是master,三个端口也只能有一个可以访问,其他两个都是等待状态。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
同时通过查看端口也可以发现,我三台中,server2的MQ是MASTER,也可以通过访问
http://IP:8161/admin/queues.jsp
http://IP:8162/admin/queues.jsp
http://IP:8163/admin/queues.jsp
进行访问。注意:发现三个网站中同时只能其中被选举为master的才能访问。
最后一步
你需要将客户端的链接改为failover的方式,主备援救的方式,采用此种方式后,如果其中一台broker 死了,客户点会自动切换到新生成的那台主broker上。
- 1
- 1
这个时候,就可以手动kill Master broker ,看看客户端会不会自动切换。
最后提醒的就是上述方式的集群可以自动切换,但是必须同时至少有两个ActiveMQ正常执行,集群方式才可以有效。