一、前言
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。在ActiveMQ 5.9中,引入了复制LevelDB存储。它处理使用Apache ZooKeeper从一组配置为复制单个LevelDB存储的代理节点中选择一个主服务器。然后将所有从属LevelDB存储与主数据库同步,通过将所有更新复制到主数据库,从而使它们保持最新状态。这可能会成为首选的主从配置。
二、准备
由于ActiveMQ,ZooKeeper是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ,ZooKeeper便可执行。
三、怎么运行
它使用Apache ZooKeeper协调集群中的哪个节点成为主节点。当选的主代理节点将启动并接受客户端连接。其他节点进入从模式并连接主节点并同步其持久状态。从节点不接受客户端连接。所有持久性操作都复制到连接的从站。如果主服务器去世,则具有最新更新的从服务器将升级为主服务器。然后可以将发生故障的节点重新联机,并将进入从属模式。所有需要同步到磁盘的消息传递操作都将等待更新完成后再复制到法定仲裁节点。因此,如果将存储配置replicas="3"则仲裁大小为(3/2+1)=2。主服务器将更新存储在本地,并等待另外1个从服务器存储更新,然后再报告成功。考虑它的另一种方法是,存储将对复制节点的仲裁进行同步复制,对任何其他节点进行异步复制复制。当选出一个新的主节点时,您还至少需要有一定数量的联机节点才能找到更新最新的节点。更新最新的节点将成为新的主节点。因此,建议您至少使用3个副本节点运行,以便可以在不造成服务中断的情况下关闭一个副本节点。
官网说明地址:http://activemq.apache.org/replicated-leveldb-store
四、搭建
4.1、机器环境准备
我是在一台机器上搭建的伪集群:
主机 | ZooKeeper集群端口 | AMQ消息bind端口 | AMQ消息tcp端口 | 管理控制台端口 | AMQ节点安装目录 |
---|---|---|---|---|---|
192.168.25.135 | 2181 | bind=“tcp://0.0.0.0:63631” | 61616 | 8161 | /mq_cluster/mq_node01 |
192.168.25.135 | 2182 | bind=“tcp://0.0.0.0:63632” | 61617 | 8162 | mq_cluster/mq_node02 |
192.168.25.135 | 2183 | bind=“tcp://0.0.0.0:63633” | 61618 | 8163 | mq_cluster/mq_node03 |
(zookeeper集群搭建在我的另一份博客:https://blog.youkuaiyun.com/killerofjava/article/details/103323415)
4.2、下载并解压
1. 官网下载:http://activemq.apache.org/components/classic/download/
2.把下载的gz包用工具拷贝到/usr/local/mq_cluster下
cd /usr/local
#创建目录
mkdir mq_cluster
#解压
tar -zxvf apache-activemq-5.15.10-bin.tar.gz
(笔者安装的目录是/usr/local/mq_cluster,本文后续配置也基于这个目录)
4.3、创建activemq集群节点
把activemq解压下来的文件夹复制三份,分别命名为(名字随意,我这里图方便)mq_node01,mq_node02,mq_node03。
4.4、修改管理控制台端口(mq_node01默认不动,另外两个需要改变)
4.5、修改hostname名字映射(因为每一个主机都叫做localhost名字容易产生冲突)
#修改hosts文件
cd /
vim /etc/hosts
#添加键值对
192.168.25.135 mq-server #192.168.25.135是自己主机的地址,mq-server是域名(可以自己随意起)
4.5、activemq集群配置
1.3个节点的brokername要求一致
#修改activemq.xml,这里以mq_node01为例,其他两个都要改
vim mq_node01/conf/activemq.xml
2.3个节点的持久化配置(默认为KahaDB)
#修改activemq.xml,这里以mq_node01为例,其他两个都要改
vim mq_node01/conf/activemq.xml
#修改的内容
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb" #数据库所在的位置
replicas="3" #节点的个数
bind="tcp://0.0.0.0:63631" #绑定的地址,另外两个端点改为63632和63633
zkAddress="localhost:2181,localhost:2182,localhost:2183" #zookeeper地址
sync="local_disk" #同步到本地磁盘
zkPath="/activemq/leveldb-stores" #如果被zk管理起来了,就会在zk根目录下创建activemq节点写leveldb存储
hostname="mq-server" #名字映射
/>
</persistenceAdapter>
4.6、修改各个节点的消息端口号(mq_node01默认不动,另外两个需要改变)
#修改#修改activemq.xml
vim mq_node02/conf/activemq.xml
四、启动Zookeeper服务并简单测试
4.1、启动服务
1.先要启动zookeeper集群
2.按顺序启动activemq节点笔者认为一个一个启动,停止太慢了,所以我创建了两个批处理文件。
mqstart.sh里面的内容:
mqstop.sh里面的内容:
启动:
./mqstart.sh
登录任意一台zk,看看activemq有没有注册成功
以上就是搭建activemq伪集群的过程,谢谢大家借阅!