【摘录】JDBC Master Slave(JDBC方式的JMS集群)
JDBC Master Slave
First supported in ActiveMQ version 4.1
If you are using pure JDBC and not using the high performance journal then you are generally relying on your database as your single point of failure and persistence engine. If you do not have really high performance requirements this approach can make a lot of sense as you have a single persistence engine to backup and manage etc.
Startup
When using just JDBC as the data source you can use a Master Slave approach, running as many brokers as you wish as this diagram shows. On startup one master grabs an exclusive lock in the broker database - all other brokers are slaves and pause waiting for the exclusive lock.
Clients should be using the Failover Transport to connect to the available brokers. e.g. using a URL something like the following
failover:(tcp: //broker1:61616,tcp://broker2:61616,tcp://broker3:61616) |
Only the master broker starts up its transport connectors and so the clients can only connect to the master.
Master failure
If the master looses connection to the database or looses the exclusive lock then it immediately shuts down. If a master shuts down or fails, one of the other slaves will grab the lock and so the topology switches to the following diagram
One of the other other slaves immediately grabs the exclusive lock on the database to them commences becoming the master, starting all of its transport connectors.
Clients loose connection to the stopped master and then the failover transport tries to connect to the available brokers - of which the only one available is the new master.
Master restart
At any time you can restart other brokers which join the cluster and start as slaves waiting to become a master if the master is shutdown or a failure occurs. So the following topology is created after a restart of an old master...
Configuring JDBC Master Slave
By default if you use the <jdbcPersistenceAdapter/> to avoid the high performance journal you will be using JDBC Master Slave by default. You just need to run more than one broker and point the client side URIs to them to get master/slave. This works because they both try an acquire an exclusive lock on a shared table in the database and only one will succeed.
The following example shows how to configure the ActiveMQ broker in JDBC Master Slave mode
<beans> <!-- Allows us to use system properties as variables in this configuration file --> <bean class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" /> <destinationPolicy> <policyMap><policyEntries> <policyEntry topic= "FOO.>" > <dispatchPolicy> <strictOrderDispatchPolicy /> </dispatchPolicy> <subscriptionRecoveryPolicy> <lastImageSubscriptionRecoveryPolicy /> </subscriptionRecoveryPolicy> </policyEntry> </policyEntries></policyMap> </destinationPolicy> <persistenceAdapter> <jdbcPersistenceAdapter dataDirectory= "${activemq.base}/activemq-data" /> <!-- <jdbcPersistenceAdapter dataDirectory= "activemq-data" dataSource= "#oracle-ds" /> --> </persistenceAdapter> <transportConnectors> </transportConnectors> </broker> <!-- This xbean configuration file supports all the standard spring xml configuration options --> <!-- Postgres DataSource Sample Setup --> <!-- <bean id= "postgres-ds" class = "org.postgresql.ds.PGPoolingDataSource" > <property name= "serverName" value= "localhost" /> <property name= "databaseName" value= "activemq" /> <property name= "portNumber" value= "0" /> <property name= "user" value= "activemq" /> <property name= "password" value= "activemq" /> <property name= "dataSourceName" value= "postgres" /> <property name= "initialConnections" value= "1" /> <property name= "maxConnections" value= "10" /> </bean> --> <!-- MySql DataSource Sample Setup --> <!-- <bean id= "mysql-ds" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method= "close" > <property name= "driverClassName" value= "com.mysql.jdbc.Driver" /> <property name= "username" value= "activemq" /> <property name= "password" value= "activemq" /> <property name= "poolPreparedStatements" value= "true" /> </bean> --> <!-- Oracle DataSource Sample Setup --> <!-- <bean id= "oracle-ds" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method= "close" > <property name= "driverClassName" value= "oracle.jdbc.driver.OracleDriver" /> <property name= "url" value= "jdbc:oracle:thin:@localhost:1521:AMQDB" /> <property name= "username" value= "scott" /> <property name= "password" value= "tiger" /> <property name= "poolPreparedStatements" value= "true" /> </bean> --> <!-- Embedded Derby DataSource Sample Setup --> <!-- <bean id= "derby-ds" class = "org.apache.derby.jdbc.EmbeddedDataSource" > <property name= "databaseName" value= "derbydb" /> <property name= "createDatabase" value= "create" /> </bean> --> </beans> |
【摘录】JDBC Master Slave(JDBC方式的JMS集群)的更多相关文章
- SharedFile System Master Slave(共享文件系统)做ActiveMQ集群
WINDOWS环境下:http://www.apache.org/dyn/closer.cgi?path=/activemq/apache-activemq/5.9.0/apache-activemq ...
- 使用kubeadm进行单master(single master)和高可用(HA)kubernetes集群部署
kubeadm部署k8s 使用kubeadm进行k8s的部署主要分为以下几个步骤: 环境预装: 主要安装docker.kubeadm等相关工具. 集群部署: 集群部署分为single master(单 ...
- 基于已有集群动态发现方式部署 Etcd 集群
etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- 采用二进制方式安装K8S集群,版本etcd-v3.3.10,flannel-v0.11.0,kubernetes-server-linux-amd64
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- K8S踩坑篇-master节点作为node节点加入集群
前面我们二进制部署K8S集群时,三台master节点仅仅作为集群管理节点,所以master节点上中并未部署docker.kubelet.kube-proxy等服务.后来我在部署mertics-serv ...
- 二进制文件方式安装kubernetes集群
所有操作全部用root使用者进行,高可用一般建议大于等于3台的奇数,我们使用3台master来做高可用 练习环境说明: 参考GitHub master: kube-apiserver,kube-con ...
- 分布式-信息方式-ActiveMQ的集群
ActiveMQ的集群Queue consumer clusters ActiveMQ支持 Consumer对消息高可靠性的负载平衡消费,如果一个 Consumer死掉,该消 ...
- 二进制方式搭建Kubernetes集群
环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...
随机推荐
- KCP kcptun
简介 KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果.纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者 ...
- 关于QueryRunner数据查询以及常用方法
QueryRunner数据查询操作调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object.params)R ...
- windows 下安装 php-memcached 扩展
通过 phpinfo()观察 3 个参数,即 php 版本, ts/nts, vc6/vc9 根据上步中的参数,到http://pecl.php.net/ 下载匹配的 memcache.dll 再次观 ...
- 基于cxf的webService服务发布及客户端开发
学习地址: http://www.cnblogs.com/leihenqianshang/category/795140.html
- GitHub报错error: bad signature
Git报错 bad signature 将文件提交到仓库时,抛出以下错误: 报错 Roc@DESKTOP-AF552U2 MINGW64 /e/note/Git (master) $ git add ...
- 10、Latent Relational Metric Learning via Memory-based Attention for Collaborative Ranking-----基于记忆注意的潜在关系度量协同排序
一.摘要: 本文模型 LRML(潜在相关度量学习)是一种新的度量学习方法的推荐.[旨在学习用户和项目之间的相关关系,而不是简单的用户和项目之间的push和pull关系,push和pull主要针对LMN ...
- 代理上网环境配置docker私有库
最后更新时间:2018年12月27日 Docker使用代理上网去 pull 各类 images,需要做如下配置: 创建目录: /etc/systemd/system/docker.service.d ...
- 小试牛刀之sort()排序的实现
受大学室友的鼓动,我也打算利用公众平台来记录自己的前端知识积累,同时呢,自己总结的东西,总归会有局限性,希望小伙伴能给我指点迷津.知识就是一张巨大的网,作为一名摸不清头绪的入学者,唯一能做的事情就是吐 ...
- pytorch 4 regression 回归
import torch import torch.nn.functional as F import matplotlib.pyplot as plt # torch.manual_seed(1) ...
- java拷贝字符文件
1.java拷贝字符文件 2.代码如下: package Demo1; import java.io.*; public class copyfile { public static void mai ...