Apache ActiveMQ的Activemq-Broker-Cluster集群实现有两种方式:分别为Static静态集群部署方式和Dynamic自动发现集群部署方式。这两种集群部署方式的区别如下:
Static静态集群部署方式
Static方式就是在broker的配置中,静态指定要连接到其它broker的地址,例如:
<networkConnector uri="static:(tcp://yunweixia.com-host1:61616)"/>
说明: yunweixia.com-host1表示连接目标的地址,61616是连接目标开放的端口。
Dynamic自动发现集群部署方式
ActiveMQ通过组播方式将自己的信息发送出去,接收到的信息的机器再来连接这个发送源。默认情况下,ActiveMQ发送的是机器名,可以通过配置修改成发送IP地址。
本文档主要介绍采用Static静态集群部署方式
第一步:下载ActiveMQ安装包
下载最新版本的ActiveMQ安装包需要访问官网,下载地址为:http://activemq.apache.org/download.html
在写文档的时候,最新版本为5.17.2版本,以下文档我们就用此版本来部署Activemq-Broker-Cluster集群。
第二步:解压安装包
[root@yunweixia.com-host1 ~]# tar zxvf apache-activemq-5.17.2-bin.tar.gz -C /usr/local/ [root@yunweixia.com-host1 ~]# mv /usr/local/apache-activemq-5.17.2 /usr/local/activemq
第三步:配置环境变量
官方文档说明正常运行ActiveMQ5.12.2版本需要Java compatibility:11,因此我们首先需要安装openjdk11。
[root@yunweixia.com-host1 ~]# yum install -y java-11-openjdk-* [root@yunweixia.com-host1 ~]# vi /etc/profile export ACTIVEMQ_HOME=/usr/local/activemq export ACTIVEMQ_BIN=$ACTIVEMQ_HOME/bin export JAVA_HOME=/usr/lib/jvm/java-11-openjdk export JRE_HOME=/usr/lib/jvm/java-11-openjdk export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$ACTIVEMQ_BIN [root@yunweixia.com-host1 ~]# source /etc/profile
第四步:Activemq-Broker-Cluster集群部署
1.备份所有节点上的activemq.conf配置文件
[root@yunweixia.com-test1 ~]# cp -arf /usr/local/activemq/conf/activemq.xml /usr/local/activemq/conf/activemq.xml.bak
2.修改yunweixia.com-host1主机配置文件
修改yunweixia.com-host1的/usr/local/activemq/conf/activemq.xml,在<broker></broker>标签中添加以下代码:
[root@yunweixia.com-test1 ~]# vi /usr/local/activemq/conf/activemq.xml <networkConnectors> <networkConnector userName="${activemq.username}" password="${activemq.password}" uri="static:(tcp://yunweixia.com-host2:61616,tcp://yunweixia.com-host3:61616)"/> </networkConnectors> <plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> </users> </simpleAuthenticationPlugin> </plugins>
3.修改brokerName名称
将brokerName=”localhost”修改为brokerName=”yunweixia.com-host1″
[root@yunweixia.com-test1 ~]# vi /usr/local/activemq/conf/activemq.xml <broker xmlns="http://activemq.apache.org/schema/core" brokerName="yunweixia.com-host1" dataDirectory="${activemq.data}">
4.修改控制台
修改控制台登录地址和端口,需要编辑conf/jetty.xml
[root@yunweixia.com-test1 ~]# vi /usr/local/activemq/conf/jetty.xml <!-- the default port number for the web console --> <property name="host" value="0.0.0.0"/> <property name="port" value="8161"/>
5.修改客户端
修改客户端访问ActiveMQ密码,需要修改conf/credentials.properties
[root@yunweixia.com-test1 ~]# vi /usr/local/activemq/conf/credentials.properties activemq.username=用户名 activemq.password=密码 guest.password=password
6.修改控制台帐号密码
修改控制台访问的账号密码,需要修改conf/jetty-realm.properties,格式为:用户名:密码,权限。
[root@yunweixia.com-test1 ~]# vi /usr/local/activemq/conf/jetty-realm.properties # username: password [,rolename ...] admin: yunweixia.com, admin
7.修改yunweixia.com-host2主机配置文件
修改yunweixia.com-host2的/usr/local/activemq/conf/activemq.xml,在<broker></broker>标签中添加以下代码:
[root@yunweixia.com-test2 ~]# vi /usr/local/activemq/conf/activemq.xml <networkConnectors> <networkConnector userName="${activemq.username}" password="${activemq.password}" uri="static:(tcp://yunweixia.com-host1:61616,tcp://yunweixia.com-host3:61616)"/> </networkConnectors> <plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> </users> </simpleAuthenticationPlugin> </plugins>
8.修改brokerName名称
修改brokerName名称将brokerName=”localhost”修改为brokerName=”yunweixia.com-host2″
[root@yunweixia.com-test2 ~]# vi /usr/local/activemq/conf/activemq.xml <broker xmlns="http://activemq.apache.org/schema/core" brokerName="yunweixia.com-host2" dataDirectory="${activemq.data}">
9.修改控制台
修改控制台登录地址和端口,需要编辑conf/jetty.xml
[root@yunweixia.com-test2 ~]# vi /usr/local/activemq/conf/jetty.xml <!-- the default port number for the web console --> <property name="host" value="0.0.0.0"/> <property name="port" value="8161"/>
10.修改客户端
修改客户端访问ActiveMQ密码,需要修改conf/credentials.properties
[root@yunweixia.com-test2 ~]# vi /usr/local/activemq/conf/credentials.properties activemq.username=用户名 activemq.password=密码 guest.password=password
11.修改控制台访问帐号和密码
修改控制台访问的账号密码,需要修改conf/jetty-realm.properties,格式为:用户名:密码,权限。
[root@yunweixia.com-test2 ~]# vi /usr/local/activemq/conf/jetty-realm.properties # username: password [,rolename ...] admin: yunweixia.com, admin
12.修改yunweixia.com-host3主机配置文件
参考以上配置,举一反三。
第五步:在所有节点均创建一个systemd服务文件
[root@yunweixia.com-test1 ~]#vi /usr/lib/systemd/system/activemq.service [Unit] Description=ActiveMQ service After=network.target [Service] Type=forking ExecStart=/usr/local/activemq/bin/activemq start ExecStop=/usr/local/activemq/bin/activemq stop User=root Group=root Restart=always RestartSec=9 StandardOutput=syslog StandardError=syslog SyslogIdentifier=activemq [Install] WantedBy=multi-user.target
第六步:通过systemctl管理activemq启停
启动activemq服务:
[root@yunweixia.com-test2 ~]# systemctl start activemq
查看服务状态:
[root@yunweixia.com-test2 ~]# systemctl status activemq
创建软件链接:
[root@yunweixia.com-test2 ~]# ln -s /usr/lib/systemd/system/activemq.service /etc/systemd/system/multi-user.target.wants/activemq.service
开机自启:
[root@yunweixia.com-test2 ~]# systemctl enable activemq
检测是否开启成功(enable):
[root@yunweixia.com-test2 ~]# systemctl list-unit-files |grep activemq
第七步:访问
通过访问节点IP地址和8161端口来登录ActiveMQ的Console控制台,例如:http://yunweixia.com-host1:8161/admin/,默认账户和密码为:admin/admin,如果我们修改过conf/jetty-realm.properties文件,则输入修改后的账号及密码。
启动所有broker查看日志中是否有WARN等警告/错误信息。
[root@yunweixia.com-test1 ~]# tail -f /var/activemq/data/activemq.log。
所有的broker都启动后,可以在web管理界面的Networky页面可以看到连接信息。将生产者与消费者分别连接到不同的节点上,看生产者发送的消息,在消费者中能不能收到。
备注
1,WrapperSimpleApp: Unable to locate the class org.apache.activemq.console.Main: java.lang.UnsupportedClassVersionError: org/apache/activemq/console/Main : Unsupported major.minor version 52.0
解决方案:该jdk版本过低,升级为JDK解决问题
2,WARNING: Could not write lock file /var/lock/subsys/ActiveMQ: Permission denied
解决方案:权限不足,修改/bin/active文件中的LOCKDIR地址。
3,Temporary Store limit is 51200 mb (current store usage is 0 mb). The data directory
解决方案:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="50 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="5 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
4.如何处理wrapper.log过大的问题
ActiveMQ服务器data目录下wrapper.log文件,默认产生的日志是不覆盖的,文件的大小逐渐增大,经过查询资料,和阅读Activemq的官方文档,找到了解决方案:
<1>找到wrapper.conf文件:
<2>修改wrapper.conf文件:设置文件大小
修改maxsize的值,默认是0,也就是无限制,设置1024mb表示最大为1024mb,可以重新生成文件。实验证实,最后生成文件大小是1024mb.设置文件数量
可以设置最多可以有多少个wrapper.log文件,比如我设置了值为5,大小为1024mb,日志到了1024mb的时候文件就无法增大了。如果5个文件都生成了,就从wrapper.log开始覆盖,但是文件大小不变,日志覆盖。
解决了wrapper.log无限增长的问题,重启activemq发现还有报错导致无法启动:
WARN | Exception encountered during context initialization - cancelling reror creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path reis java.io.IOException: Failed to recover data at position:2:9420703
5,如何处理java.io.IOException: Failed to recover data at position这种报错呢?
简单分析下,有可能是异常关闭导致kahadb数据库存储异常。由于是集群另一台activemq正常,因此本台服务器本地持久化数据删除问题不大。删除所有data/kahadb/下的文件,正常启动。
修订记录
- 2025-07-05 v1.1 初始化版本
原创文章,作者:运维侠,如若转载,请注明出处:https://www.yunweixia.com/solutions/apache-activemq-static-cluster-activemq-broker-cluster-deployment-tutorial.html