第十章 代理商拓扑结构【笔记】

xiaoxiao2021-02-28  8

10.1、概述:本章主要是ActiveMQ 集群 拓扑结构设计

10.2、代理商高可用性

一般故障分为 网络故障,硬件故障,软件故障,对于ActiveMQ来说就是如何改善的软件故障来提供高可用性。

介绍三种 主/从结构

10.2.1. 分享式主从结构

到主代理器挂了,有两种操作

第一种:从代理器也关闭

第二种:从代理器上位成主代理器

如果是第二种可以如下配置

failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false

10.2.1.1.配置分享式主/从

remoteURI:主代理器监听地址

userName: 可选,用户名

password : 可选,密码

master(主代理器配置)

<services> <masterConnector remoteURI= "tcp://localhost:62001" userName="Rob" password="Davies"/> </services>slave(从代理器配置)

shutdownOnmasterFailure : 默认值false, 当master挂了,slave将会关闭

waitForslave: 默认值false  , 在从代理器没有与主代理器通讯时不允许客户端访问

shutdownOnslaveFailure , 默认值为false, 如果为true,如果slave断开的时候,master将会关闭

10.2.1.2.什么时候使用master/slave

可以人工干预,你可以用于已经运行中代理器中配置高可用性

10.2.2. 分享数据库 主从

10.2.2.1、什么时候使用数据库主从

它的性能低于分享式主从,它不需要额外配置和slave数量的限制

10.2.3.分享式文件系统主从

SAN(Storage area network): 例如 Network File System (NFS)  、Global File System (GFS)

10.2.3.1、什么时候使用分享文件系统主从

它与AMQMessageStore 或KahaDB整合使用,它的唯一缺陷,只支持分布锁环境文件系统

10.3 网络代理器

通过网络进行传输数据

10.3.1、 存储和传输

以上是单向通道,如果是双向通道

文件配置为:

<networkConnectors> <networkConnector uri="static://(tcp://backoffice:61617)" name="bridge" duplex="true" conduitSubscriptions="true" decreaseNetworkConsumerPriority="false"> </networkConnector> </networkConnectors> 配置的顺序要求

<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://activemq.org/config/1.0"> <broker brokerName="receiver" persistent="true" useJmx="true"> <networkConnectors> <networkConnector uri="static:(tcp://backoffice:61617)" /> </networkConnectors> <persistenceAdapter> <kahaDB /> <kahaDB></kahaDB> </persistenceAdapter> <transportConnectors> <transportConnector uri="tcp://localhost:62002" /> </transportConnectors> </broker> </beans> 高性能网络配置

引用《ActiveMQ in Action》

10.3.2. 网络发现

网络发现有两种:

1、动态(dynamic):自动搜索发现新代理器(使用multicast)

2、静态(Static):列举所有网络(static)

<networkConnectors> <networkConnector uri="multicast://default"/> </networkConnectors> <networkConnectors> <networkConnector uri="static:(tcp://remote-master:61617,tcp://remote-slave:61617)"/> </networkConnectors>static 的配置参数有:

initialReconnectDelay(默认值为1000)单位毫秒初始化重连延迟,只有useExponentialBackOff不可用

maxReconnectDelay (默认值为30000)最大延迟,只有useExponentialBackOff不可用 useExponentialBackOff: (默认值为true)重连时间等待时间会更长

backOffMultiplier:(默认值为2) 这是增加useExponentialBackOff重连等待时间的基数

例如:

<networkConnectors> <networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false"/> </networkConnectors>

10.3.3,网络配置

10.3.3.1. 网络属性:dynamicOnly

默认值为false,如果为true,活动时候才会传递消息给远程代理器

10.3.3.2、网络属性:prefetchSize

默认值为1000,读取远程代理器打包消息大小

10.3.3.3网络属性:conduitSubscriptions

避免多个代理器发送消息重复

10.3.3.4.网络属性:excludedDestinations

去除目的地

它优先级高于staticallyIncludedDestinations和dynamicallyIncludedDestinations.(也就是这两个属性设置无效)

例子:

<networkConnectors> <networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false" /> <excludedDestinations> <queue physicalName="audit.queue-1" /> <queue physicalName="audit.queue-2" /> <queue physicalName="local.>" /> <topic physicalName="local.>" /> </excludedDestinations> </networkConnectors>

10.3.3.5、网络属性:dynamicallyIncludedDestinations

包含目的地(白名单)

10.3.3.6、网络属性:staticallyIncludedDestinations

包含目的地(白名单)

<networkConnectors> <networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false" /> <staticallyIncludedDestinations> <queue physicalName="management.queue-1" /> <queue physicalName="management.queue-2" /> <queue physicalName="global.>" /> <topic physicalName="global.>" /> </staticallyIncludedDestinations> </networkConnectors>

10.3.3.7、网络属性:decreaseNetworkConsumerPriority

默认值为false,如果设置true,表示本地优先级高于远程

10.3.3.8、网络属性:networkTTL

默认值为1,心跳

10.3.3.9,网络属性:name

默认值是bridge,一般忽略这个参数,保证唯一

<networkConnectors> <networkConnector uri="static://(tcp://remotehost:61617)" name="queues_only" duplex="true"> <excludedDestinations> <topic physicalName=">" /> </excludedDestinations> </networkConnector> <networkConnector uri="static://(tcp://remotehost:61617)" name="topics_only" duplex="true"> <excludedDestinations> <queue physicalName=">" /> </excludedDestinations> </networkConnector> </networkConnectors>

10.4、应用分割

实现高并发,负载均衡

10.4.1、垂直分割

设置传输为nio

<broker> <transportConnectors> <transportConnector name="nio" uri="nio://localhost:61616"/> </<transportConnectors> </broker>设置线程池

ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false" 同时设置虚拟机内存大小

ACTIVEMQ_OPTS="-Xmx1024M -Dorg.apache.activemq.UseDedicatedTaskRunner=false"

设置代理器的内存大小:对于100多个连接最小内存大小512MB

<systemUsage> <systemUsage> <memoryUsage> <memoryUsage limit="512 mb" /> </memoryUsage> <storeUsage> <storeUsage limit="10 gb" name="foo" /> </storeUsage> <tempUsage> <tempUsage limit="1 gb" /> </tempUsage> </systemUsage> </systemUsage> 为了减少CPU加载连接,需要将tightEncodingEnabled设置为false

String uri = "failover://(tcp://localhost:61616?wireFormat.tightEncodingEnabled=false)"; ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(url);设置队列最优化

<destinationPolicy> <policyMap> <policyEntries> <policyEntry queue=">" optimizedDispatch="true" /> </policyEntries> </policyMap> </destinationPolicy> “>”表示所有队列(Queues)

整体配置文件如下

<?xml version="1.0"?> <broker xmlns="http://activemq.org/config/1.0" brokerName="amq-broker" dataDirectory="${activemq.base}/data"> <persistenceAdapter> <kahaDB directory="${activemq.base}/data" journalMaxFileLength="32mb" /> </persistenceAdapter> <destinationPolicy> <policyMap> <policyEntries> <policyEntry queue=">" optimizedDispatch="true" /> </policyEntries> </policyMap> </destinationPolicy> <systemUsage> <systemUsage> <memoryUsage> <memoryUsage limit="512 mb" /> </memoryUsage> <storeUsage> <storeUsage limit="10 gb" name="foo" /> </storeUsage> <tempUsage> <tempUsage limit="1 gb" /> </tempUsage> </systemUsage> </systemUsage> <!-- The transport connectors ActiveMQ will listen to --> <transportConnectors> <transportConnector name="openwire" uri="nio://localhost:61616" /> </transportConnectors> </broker>

10.4.2.水平分割

随机连接

failover://(tcp://broker1:61616,tcp://broker2:61616)?randomize=true

为了代理器之间消息不孤立,如下设置

<networkConnector uri="static://(tcp://remotehost:61617)" name="bridge" dynamicOnly="true" prefetchSize="1" </networkConnector>

10.4.3、交通分配(traffic partitioning )

traffic partitioning 是垂直和水平分割的混合体,

引用《ActiveMQ in Action》
转载请注明原文地址: https://www.6miu.com/read-1400149.html

最新回复(0)