Apache ActiveMQ静态集群Activemq-Broker-Cluster部署实战

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.Apache ActiveMQ静态集群Activemq-Broker-Cluster部署实战设置文件数量
可以设置最多可以有多少个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

Apache ActiveMQ静态集群Activemq-Broker-Cluster部署实战

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

(0)
运维侠的头像运维侠共建用户
上一篇 2025年7月4日 18:11
下一篇 2025年7月6日 18:11

相关推荐

发表回复

登录后才能评论