ActiveMQ Master/Slave 主从配置

时间:2024-03-18 22:12:01

ActiveMQ主从配置

@author:wushuang

数据库版本:MySQL 5.7

操作系统:CentOS Linux 7

ActiveMQ版本:apache-activemq-5.14.3

一、前言

官网介绍ActiveMQ有三种方式来实现Master/Slave,分别是Shared File System Master Slave、JDBC Master Slave、Replicated LevelDB Store。其中Shared File System Master Slave需要搭建共享文件系统,查了一下实现比较麻烦,所以放弃;Replicated LevelDB Store已经被官方废弃并移除,且只有5.9.0版本才可用;故采用JDBC Master Slave模式进行ActiveMQ的主从配置。

链接为:http://activemq.apache.org/masterslave.html



二、安装

1.vmware新建两个虚拟机,我安装的系统是CentOS 7。

2.安装JDK,采用openjdk1.8。

3.从官网下载ActiveMQ,解压到两个虚拟机的指定路径。

具体安装指导可见官网:http://activemq.apache.org/getting-started.html

三、安装数据库

JDBC Master Slave支持多种数据库,本次示例用MySQL。

机器性能有限,故安装MySQL在其中一台虚拟机上。生产环境ActiveMQ和MySQL不应安装在同一机器上。

1.安装完成后登陆MySQL,创建用户manager 密码也为manager:

CREATE USER [email protected]'%' identified by 'manager';

2.创建数据库activemq: CREATE DATABASE activemq;

3.授权manager拥有对数据库activemq的所有操作权限:

GRANT ALL on activemq.* TO [email protected]'%' identified by 'manager';

4.刷新权限:FLUSH PRIVILEGES;

 

四、配置Master/Slave

1.打开其中一台虚拟机中的[activemq_install_dir]/conf/activemq.xml,于</broker>后添加数据源bean,我采用的是c3p0:

ActiveMQ Master/Slave 主从配置
 

2.修改persistenceAdapter的内容为下图:


ActiveMQ Master/Slave 主从配置
 

其中createTablesOnStartup第一次启动时为true,后面需要置为false,无需每次启动都建表。

3.复制此activemq.xml到另一台虚拟机的ActiveMQ的相同路径下,覆盖原先的配置文件,并修改jdbcUrl的IP为前一台机器的IP。

4.下载mchange-commons-java-0.2.10.jar、c3p0-0.9.5.1.jar、mysql-connector-java-5.1.38.jar,并将这三个jar复制到两台机器ActiveMQ下的lib目录下([activemq_install_dir]/lib)。

5.启动其中一台虚拟机的ActiveMQ,此MQ成为Master,数据库activemq中会自动新建三张表:

ACTIVEMQ_ACKS、ACTIVEMQ_LOCK、ACTIVEMQ_MSGS

6.启动另一台虚拟机的ActiveMQ,此MQ变为Slave,定时去获取Master的独享锁,如图所示:


ActiveMQ Master/Slave 主从配置
 

7.此时关闭master ActiveMQ,则slave ActiveMQ获取独享锁变为master,如图:


ActiveMQ Master/Slave 主从配置
 

8.再次开启刚才关闭的ActiveMQ,则此MQ变为Slave,依旧定时尝试获取master的独享锁,如图:


ActiveMQ Master/Slave 主从配置
 

 

五、备注

1.通过JDBC Master Slave,可实现ActiveMQ的高可用,但压力都集中在数据库上了,所以数据库是主要的性能瓶颈。

2.本示例中MySql只有一个实例,如果MySQL挂了,则ActiveMQ也不能用了,故生产环境也需要避免MySQL的单点故障,采用集群或者主备切换以避免这种情况。