Mcollective-activemq балансировка нагрузки
Мы столкнулись с несколькими проблемами с ActiveMQ - MCollective балансировка нагрузки. Может кто-нибудь, пожалуйста, помогите? Ниже наша установка
MCO имеет два брокера ActiveMQ, настроенных в пуле аварийного переключения - Broker1 и Broker2. И мы установили свойство randomize в true server.cfg
а также client.cfg
,
Broker1 и Broker2 вместе образуют кластер activemq. У них также есть updateClientCluster
а также rebalanceClientCluster
свойства установлены в true
(устанавливается на обоих брокеров activemq).
Проблема 1: клиенты MCO не одинаково сбалансированы по нагрузке и связаны между брокером1 и брокером2. 700 MCO подключены к брокеру1, тогда как только 100 MCO подключены к брокеру2. Мы пропускаем какое-либо свойство для этой балансировки нагрузки?
Проблема 2: Когда мы добавляем нового брокера, например, broker3, в кластер activemq, клиенты MCO не перебалансируются или не подключаются к новому брокеру. Согласно документации по activemq, если мы включим свойства updateClientCluster и rebalanceClientCluster, он должен автоматически уведомить MCO о перебалансировке. Можете ли вы сообщить нам любые свойства.
Прикрепление activemq.xml
, server.cfg
а также client.cfg
,
activemq.xml
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?jms.prefetchPolicy.all=1000&useQueueForAccept=false&transport.closeAsync=false&maximumConnections=2500&wireFormat.maxFrameSize=104857600&jms.watchTopicAdvisories=false" />
<transportConnector name="stomp+ssl" uri="stomp+nio+ssl://0.0.0.0:61614?useQueueForAccept=false&transport.closeAsync=false&needClientAuth=true&trace=true&maximumConnections=2500&wireFormat.maxFrameSize=104857600&updateClusterClients=true&rebalanceClusterClients=true&updateClusterClientsOnRemove=true" />
</transportConnectors>
server.cfg
loglevel = info
daemonize = 1
# Plugins
securityprovider = psk
plugin.psk = unset
connector = activemq
plugin.activemq.heartbeat_interval = 60
plugin.activemq.pool.size = 2
plugin.activemq.pool.1.host = broker 1
plugin.activemq.pool.1.port = port no.
plugin.activemq.pool.1.user = user
plugin.activemq.pool.1.password = password
plugin.activemq.pool.1.ssl = 1
plugin.activemq.pool.1.ssl.fallback = 0
#classesfile = /var/lib/puppet/state/classes.txt
# Registration:
# We don't configure a listener, and only send these messages to keep the
# Stomp connection alive. This will use the default "agentlist" registration
# plugin.
registerinterval = 600
plugin.activemq.pool.2.host = broker 1
plugin.activemq.pool.2.port = port no.
plugin.activemq.pool.2.user = user
plugin.activemq.pool.2.password = password
plugin.activemq.pool.2.ssl = 1
plugin.activemq.pool.1.ssl.fallback = 0
securityprovider = ssl
rpcauthorization = 1
rpcauthprovider = action_policy
plugin.actionpolicy.allow_unconfigured = 0
plugin.actionpolicy.enable_default = 1
plugin.actionpolicy.default_name = default
\n
plugin.activemq.initial_reconnect_delay = 0.01
plugin.activemq.max_reconnect_delay = 30.0
plugin.activemq.use_exponential_back_off = true
plugin.activemq.back_off_multiplier = 2
plugin.activemq.max_reconnect_attempts = 0
plugin.activemq.randomize = true
plugin.activemq.timeout = -1
client.cfg
main_collective = mcollective
libdir = /etc/mcollective
logger_type = console
loglevel = warn
# Plugins
securityprovider = psk
plugin.psk = unset
connector = activemq
plugin.activemq.heartbeat_interval = 60
plugin.activemq.pool.size = 2
plugin.activemq.pool.1.host = borker 1
plugin.activemq.pool.1.port = port no.
plugin.activemq.pool.1.user = user
plugin.activemq.pool.1.password = password
plugin.activemq.pool.1.ssl = 1
plugin.activemq.pool.1.ssl.fallback = 0
plugin.activemq.pool.1.host = borker 2
plugin.activemq.pool.1.port = port no.
plugin.activemq.pool.1.user = user
plugin.activemq.pool.1.password = password
plugin.activemq.pool.2.ssl = 1
plugin.activemq.pool.2.ssl.fallback = 0
factsource = yaml
securityprovider = ssl
1 ответ
Выпуск 1. Баланс будет близким, но не идеальным. Насколько я знаю, это просто вынуждает клиента использовать функцию randomize после того, как он изначально соединяется или получает указание перебалансировать.
Проблема 2: Вы настраиваете автоматический балансировку как часть URI, а не атрибут transportConnector.
Так что вам нужно что-то вроде:
<transportConnector name="stomp+ssl" uri="stomp+nio+ssl://0.0.0.0:61614?useQueueForAccept=false&transport.closeAsync=false&needClientAuth=true&trace=true&maximumConnections=2500&wireFormat.maxFrameSize=104857600"
updateClusterClients="true"
rebalanceClusterClients="true"
updateClusterClientsOnRemove="true" />
</transportConnectors>
Также известно, что это будет применяться только к клиентам, подключающимся через один транспортный соединитель, а не к другому, для которого указан только URI. Любые клиенты, подключающиеся к транспортному протоколу tcp на 61616, не будут знать о каких-либо настройках вашего транспортного протокола Stomp.
Все остальное выглядит хорошо, хотя я не настраивал клиентов Stomp с таким количеством свойств, поэтому вы можете проверить, все ли они также действительны.