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 manager@'%' identified by 'manager';
2.创建数据库activemq: CREATE DATABASE activemq;
3.授权manager拥有对数据库activemq的所有操作权限:
GRANT ALL on activemq.* TO manager@'%' 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的单点故障,采用集群或者主备切换以避免这种情况。
相关推荐
主要介绍了ActiveMQ基于zookeeper的主从levelDB Master/Slave搭建,以及Spring-boot下的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
activemq_master-slave集群安装文档,详细描述如何配置。
ActiveMQ集群方案 使用方式 Master/Slave(主从备份)和failover协议
ActiveMQ | 消息队列 | [http://activemq.apache.org/](http://activemq.apache.org/) JStorm | 实时流式计算框架 | [http://jstorm.io/](http://jstorm.io/) FastDFS | 分布式文件系统 | ...
区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从) 同步。 二、Redis在项目中的应用场景 1、缓存数据 对于最常用的数据,经常要查询并且...
Producer 如何感知要发送消息的broker 即brokerAddrTable 中的值是怎么获得的, 1. 发送消息的时候指定会...Producer 发送消息只发送到master 的broker 机器,在通过broker 的主从复制机制拷贝到broker 的slave 上去。
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...
缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...