文档章节

ActiveMQ — 集群 — 安装与配置

XuePeng77
 XuePeng77
发布于 2017/02/08 17:53
字数 1057
阅读 118
收藏 2

1. 服务器配置

    推荐集群的数量为基数,并且在这些机器上安装JDK,配置环境变量。

2. 集群方式

    常用的集群方式有三种:

  • 基于共享文件系统的集群(KahaDB,默认);
  • 基于JDBC的集群;
  • 基于可复制的LevelDB(推荐);

    LevelDB 是 Google 开发的一套用于持久化数据的高性能类库。LevelDB 并不是一种服务,用户需要自
行实现 Server。是单进程的服务,能够处理十亿级别规模 Key-Value 型数据,占用内存小。

    本次使用该方式配置activemq集群。

3. 目录配置

     这次集群配置准备了三台计算机,将activemq安装到它们中,对端口和目录进行配置:

主机 集群端口 消息端口 管控台端口 activemq节点目录
192.168.240.132 62621 51511 8161 /opt/activemq-node-01
192.168.240.133 62622 51512 8162 /opt/activemq-node-02
192.168.240.134 62623 51513 8163 /opt/activemq-node-03

4. 配置防火墙

## 使用firewall命令配置防火墙端口

firewall-cmd  --zone=public --add-port=xxxxx/tcp --permanent
firewall-cmd --reload

    将三台机器所需的端口都配置到防火墙中。

5. 修改管控台端口

    将三台机器的管控台端口修改一遍,文件位于conf/jetty.xml:

<!-- 192.168.240.132 -->
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> 
    <!-- the default port number for the web console --> 
    <property name="host" value="0.0.0.0"/> 
    <property name="port" value="8161"/> 
</bean>


<!-- 192.168.240.133 -->
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> 
    <!-- the default port number for the web console --> 
    <property name="host" value="0.0.0.0"/> 
    <property name="port" value="8162"/> 
</bean>


<!-- 192.168.240.134 -->
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> 
    <!-- the default port number for the web console --> 
    <property name="host" value="0.0.0.0"/> 
    <property name="port" value="8163"/> 
</bean>

6. 配置集群

    配置三台机器的集群信息,文件位于conf/activemq.xml。

    先配置集群的brokerName:

<!-- 三台机器broker节点的brokerName必须相同 -->

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="ems" dataDirectory="${activemq.data}">

    在配置集群方式,还在activemq.xml文件中,使用LevelDB:

<!-- 192.168.240.132 -->
<persistenceAdapter> 
  <!-- kahaDB directory="${activemq.data}/kahadb"/ --> 
  <replicatedLevelDB 
    directory="${activemq.data}/leveldb" 
    replicas="3" 
    bind="tcp://0.0.0.0:62621" 
    zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183" 
    hostname="server01" 
    zkPath="/activemq/leveldb-stores" 
  /> 
</persistenceAdapter>


<!-- 192.168.240.133 -->
<persistenceAdapter> 
  <!-- kahaDB directory="${activemq.data}/kahadb"/ --> 
  <replicatedLevelDB 
    directory="${activemq.data}/leveldb" 
    replicas="3" 
    bind="tcp://0.0.0.0:62622" 
    zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183" 
    hostname="server02" 
    zkPath="/activemq/leveldb-stores" 
  /> 
</persistenceAdapter>


<!-- 192.168.240.134 -->
<persistenceAdapter> 
  <!-- kahaDB directory="${activemq.data}/kahadb"/ --> 
  <replicatedLevelDB 
    directory="${activemq.data}/leveldb" 
    replicas="3" 
    bind="tcp://0.0.0.0:62623" 
    zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183" 
    hostname="server03" 
    zkPath="/activemq/leveldb-stores" 
  /> 
</persistenceAdapter>

    replicatedLevelDB的属性含义如下:

  1. directory:leveldb目录;
  2. replicas:节点数量;
  3. binid:集群端口号;
  4. zkAddress:zookeeper集群地址;
  5. hostname:本机的hosts映射名;
  6. zkPath:集群数据仓库;

     接着配置消息端口,还在activemq.xml文件中:

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

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

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

7. 启动节点

    按照顺序启动节点,启动后,可以使用ZooInspector查看,ZooInspector需要您的机器安装了JDK并配置了环境变量:

    左侧activemq节点下有三个子节点,就是我们配置的三个集群节点了。

8. 使用程序访问集群

## MQ
mq.brokerURL=failover:(tcp://192.168.240.132:51511,tcp://192.168.240.133:51512,tcp://192.168.240.134:51513)?randomize=false
mq.userName=admin
mq.password=admin
mq.pool.maxConnections=10
#queueName
queueName=energyConsumptionData

    通过失败转移策略failover,配置三个集群的IP地址。

9. 使用该方法需要注意的事情

    请使用者注意。replicatedLevelDB 不支持延迟或者计划任务消息。这些消息存储在另外的 LevelDB 文件中,如果使用延迟或者计划任务消息,将不会复制到 slave Broker 上,不能实现消息的高可用。

    这种配置方式也不支持负载均衡。

© 著作权归作者所有

XuePeng77
粉丝 48
博文 146
码字总数 194285
作品 0
丰台
私信 提问
加载中

评论(7)

XuePeng77
XuePeng77 博主

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?

引用来自“杰克鹏仔”的评论

做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"

引用来自“Top8990”的评论

嗯,端口修改为不同了。测试时遇到哪些问题了呢?

引用来自“杰克鹏仔”的评论

最后测试,两个集群,每个集群三个节点,一共六个节点。做这两个集群的负载均衡时,集群A的Master连接集群B的Master没问题,反之亦然。
但集群A的Master连接对方的Slaver时,日志中经常出现警告,说连接失败,反之亦然。。。
负载均衡用的是static方式。

引用来自“Top8990”的评论

负载均衡发方式的调用和文章内最后的调用方式相同?
https://my.oschina.net/u/2450666/blog/835105

负载均衡的配置和测试在这
mind-blowing
mind-blowing

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?

引用来自“杰克鹏仔”的评论

做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"

引用来自“Top8990”的评论

嗯,端口修改为不同了。测试时遇到哪些问题了呢?

引用来自“杰克鹏仔”的评论

最后测试,两个集群,每个集群三个节点,一共六个节点。做这两个集群的负载均衡时,集群A的Master连接集群B的Master没问题,反之亦然。
但集群A的Master连接对方的Slaver时,日志中经常出现警告,说连接失败,反之亦然。。。
负载均衡用的是static方式。
负载均衡发方式的调用和文章内最后的调用方式相同?
mind-blowing
mind-blowing

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?

引用来自“杰克鹏仔”的评论

做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"

引用来自“Top8990”的评论

嗯,端口修改为不同了。测试时遇到哪些问题了呢?

引用来自“杰克鹏仔”的评论

最后测试,两个集群,每个集群三个节点,一共六个节点。做这两个集群的负载均衡时,集群A的Master连接集群B的Master没问题,反之亦然。
但集群A的Master连接对方的Slaver时,日志中经常出现警告,说连接失败,反之亦然。。。
负载均衡用的是static方式。
收到
XuePeng77
XuePeng77 博主

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?

引用来自“杰克鹏仔”的评论

做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"

引用来自“Top8990”的评论

嗯,端口修改为不同了。测试时遇到哪些问题了呢?
最后测试,两个集群,每个集群三个节点,一共六个节点。做这两个集群的负载均衡时,集群A的Master连接集群B的Master没问题,反之亦然。
但集群A的Master连接对方的Slaver时,日志中经常出现警告,说连接失败,反之亦然。。。
负载均衡用的是static方式。
mind-blowing
mind-blowing

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?

引用来自“杰克鹏仔”的评论

做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"
嗯,端口修改为不同了。测试时遇到哪些问题了呢?
XuePeng77
XuePeng77 博主

引用来自“Top8990”的评论

这里的zk没做集群,各自独立吗?
做了集群了,用了3个节点做了zk集群。
zkAddress="192.168.240.132:2181,192.168.240.133:2182,192.168.240.134:2183"
mind-blowing
mind-blowing
这里的zk没做集群,各自独立吗?
ActiveMQ集群方案(下)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51205822 目...

yunlielai
2018/04/15
0
0
ActiveMQ集群方案(上)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51124749 目...

yunlielai
2018/04/15
0
0
基于zookeeper+leveldb搭建activemq集群实现高可用

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。本文主要阐述基于zoo...

chaun
2015/08/17
338
2
基于zookeeper+leveldb搭建activemq集群

自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。本文主要阐述基于zoo...

萧十一郎君
2014/09/12
15.4K
7
ActiveMQ+ZooKeeper 集群整合

原理简介: 一般在部署ActiveMQ集群的时候,更倾向于使用基于ZooKeeper的,该方式是的其中一种策略,也是在多台主机实现ActiveMQ集群的主流部署方式。 此教程。要想保证负载均衡得再结合Bro...

watermelon11
02/18
44
0

没有更多内容

加载失败,请刷新页面

加载更多

领域驱动中的“贫血症和失忆症”

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
2分钟前
1
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
12分钟前
1
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
12分钟前
2
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
14分钟前
1
0
Tomcat源码分析二:先看看Tomcat的整体架构

Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server、Service、Connector、Container等组件,接下...

flygrk
17分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部