activemq 高可用集群部署
- 环境准备
- 服务器IP
- 基于 jdbc 的集群方案
- 基于 zookeeper + 可复制的 LevelDB 的集群部署
- 常见问题
环境准备
- activemq-5.16.2 安装包
- 3台安装了 jdk1.8 的 centos 7.5 服务器
- 1台安装了 mysql 的服务器 ( 基于 jdbc 的集群方案)
- 3台安装了 zookeeper 的服务器集群 (基于 zookeeper + 可复制的 LevelDB 的集群方案)
服务器IP
| 服务器 | IP | 域名 |
|---|---|---|
| mysql-130 | 192.168.86.130 | |
| zk-100 | 192.168.86.100 | zk-100.com |
| zk-101 | 192.168.86.101 | zk-101.com |
| zk-102 | 192.168.86.102 | zk-102.com |
| activemq-155 | 192.168.86.155 | activemq-155.com |
| activemq-156 | 192.168.86.156 | activemq-156.com |
| activemq-157 | 192.168.86.157 | activemq-157.com |
基于 jdbc 的集群方案

-
不特殊说明情况下,以下所有操作均在三台 activemq 服务器上操作
-
上传安装包到服务器的 /opt 目录
-
解压安装包,并且移动到 /usr/local 目录
cd /opt tar -zxvf apache-activemq-5.16.2-bin.tar.gz mv apache-activemq-5.16.2 /usr/local/apache-activemq-5.16.2 -
修改 activemq.xml 配置
cd /usr/local/apache-activemq-5.16.2/conf vi activemq.xml-
在 节点后面增加数据源配置,内容如下:
-
修改
里面的内容,修改之后内容如下:
-
-
修改 jetty.xml 以便其它机器可以访问到 8161 前台管理界面
vi /usr/local/apache-activemq-5.16.2/conf/jetty.xml 找到 -
上传 mysql-connector-java-8.0.20.jar 到 /usr/local/apache-activemq-5.16.2/lib 目录下 (如果使用了其它连接池,则一并上传)
-
在数据库中创建一个 activemq 的数据库
create database activemq -
启动
cd /usr/local/apache-activemq-5.16.2/bin ./activemq start -
查看数据库是否自动生成了3张表
? activemq_acks:订阅表
? activemq_lock:用于记录当前哪台机器获取到了锁
? activemq_msgs:持久化消息的存放表
-
查看日志
cd /usr/local/apache-activemq-5.16.2/data tail -1000 activemq.log会发现除了master 之外,其它的两台 slave 都在尝试获取数据库锁

-
访问前台管理界面,会发现只有 master可以正常访问,其余两台 slave均无法访问
-
此时关闭 master,两台 slave 中一台会获取到锁,进而成为 master
基于 zookeeper + 可复制的 LevelDB 的集群部署

-
不特殊说明情况下,以下所有操作均在三台 activemq 服务器上操作
-
上传安装包到服务器的 /opt 目录
-
解压安装包,并且移动到 /usr/local 目录
cd /opt tar -zxvf apache-activemq-5.16.2-bin.tar.gz mv apache-activemq-5.16.2 /usr/local/apache-activemq-5.16.2 -
修改 activemq.xml 配置
cd /usr/local/apache-activemq-5.16.2/conf vi activemq.xml-
修改
节点的 brokerName属性,三台机器需要完全一样 -
修改
里面的内容,每台机器的 hostname 需要修改为自己的 ,修改之后内容如下: -
修改 jetty.xml 以便其它机器可以访问到 8161 前台管理界面
vi /usr/local/apache-activemq-5.16.2/conf/jetty.xml 找到
-
-
为了解决后续集群启动之后关闭之后出现的报错,可以先上传 failureaccess-1.0.1 jar包 到 /usr/local/apache-activemq-5.16.2/lib 目录下,可以等到后面真正报错的时候再执行
-
启动
cd /usr/local/apache-activemq-5.16.2/bin ./activemq start -
查看日志
cd /usr/local/apache-activemq-5.16.2/data tail -1000 activemq.log? 如果只启动了一台的话,日志如下:
?

? 如果启动两台到三台,会发现 slave 会从 master 中同步数据:

-
查看 zookeeper
前台管理界面也只有 master 机器能够访问,关闭 master 之后,其中一个 slave 变为 master
常见问题
-
基于 jdbc 的集群启动时,抛出了 Cannot create PoolableConnectionFactory 以下异常:

解决:在mysql 数据库中执行以下操作
set time_zone=SYSTEM; set global time_zone='+8:00'; flush privileges; -
基于 zookeeper 的集群,master 宕机之后,集群启动报错:java.io.IOException:com/google/common/util/concurrent/internal/InternalFutureFailureAccess
解决:上传 failureaccess-1.0.1 jar包