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&amp;useQueueForAccept=false&amp;transport.closeAsync=false&amp;maximumConnections=2500&amp;wireFormat.maxFrameSize=104857600&amp;jms.watchTopicAdvisories=false" />

    <transportConnector name="stomp+ssl" uri="stomp+nio+ssl://0.0.0.0:61614?useQueueForAccept=false&amp;transport.closeAsync=false&amp;needClientAuth=true&amp;trace=true&amp;maximumConnections=2500&amp;wireFormat.maxFrameSize=104857600&amp;updateClusterClients=true&amp;rebalanceClusterClients=true&amp;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&amp;transport.closeAsync=false&amp;needClientAuth=true&amp;trace=true&amp;maximumConnections=2500&amp;wireFormat.maxFrameSize=104857600" 
        updateClusterClients="true"
        rebalanceClusterClients="true"
        updateClusterClientsOnRemove="true" />
</transportConnectors>

Также известно, что это будет применяться только к клиентам, подключающимся через один транспортный соединитель, а не к другому, для которого указан только URI. Любые клиенты, подключающиеся к транспортному протоколу tcp на 61616, не будут знать о каких-либо настройках вашего транспортного протокола Stomp.

Все остальное выглядит хорошо, хотя я не настраивал клиентов Stomp с таким количеством свойств, поэтому вы можете проверить, все ли они также действительны.

Другие вопросы по тегам