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:
2.修改persistenceAdapter的内容为下图:
其中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的独享锁,如图所示:
7.此时关闭master ActiveMQ,则slave ActiveMQ获取独享锁变为master,如图:
8.再次开启刚才关闭的ActiveMQ,则此MQ变为Slave,依旧定时尝试获取master的独享锁,如图:
五、备注
1.通过JDBC Master Slave,可实现ActiveMQ的高可用,但压力都集中在数据库上了,所以数据库是主要的性能瓶颈。
2.本示例中MySql只有一个实例,如果MySQL挂了,则ActiveMQ也不能用了,故生产环境也需要避免MySQL的单点故障,采用集群或者主备切换以避免这种情况。