ПРЕДУПРЕЖДЕНИЕ: в сети есть несколько серверов, передающих один и тот же идентификатор узла. - PullRequest
0 голосов
/ 17 июня 2020

У меня есть кластер из трех брокеров ActiveMQ, работающих на разных машинах. Теперь я постоянно вижу предупреждение, в котором говорится следующее:

2020-06-17 10:40:07,378 WARN  [org.apache.activemq.artemis.core.client] AMQ212034: There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=03451127-a9c9-11ea-992a-005056ad92be

Вот фрагмент broker.xml главного устройства:

<connectors>
   <connector name="nettyartemis">tcp://10.5.100.1:61616</connector>
</connectors>

<discovery-groups>
   <discovery-group name="my-discovery-group">
      <local-bind-address>10.5.100.1</local-bind-address>
      <group-address>231.7.7.7</group-address>
      <group-port>9876</group-port>
      <refresh-timeout>10000</refresh-timeout>
   </discovery-group>
</discovery-groups>

<cluster-connections>
   <cluster-connection name="my-cluster">
      <connector-ref>nettyartemis</connector-ref>
      <retry-interval>500</retry-interval>
      <use-duplicate-detection>true</use-duplicate-detection>
      <message-load-balancing>STRICT</message-load-balancing>
      <max-hops>1</max-hops>
      <discovery-group-ref discovery-group-name="my-discovery-group"/>
   </cluster-connection>
</cluster-connections>


<broadcast-groups>
   <broadcast-group name="my-broadcast-group">
      <local-bind-address>10.5.100.1</local-bind-address>
      <local-bind-port>5432</local-bind-port>
      <group-address>231.7.7.7</group-address>
      <group-port>9876</group-port>
      <broadcast-period>2000</broadcast-period>
      <connector-ref>nettyartemis</connector-ref>
   </broadcast-group>
</broadcast-groups>    

<ha-policy>
   <replication>
      <master/>
   </replication>
</ha-policy>

Вот фрагмент одного из broker.xml подчиненного устройства:

<connectors>
   <connector name="nettyartemistwo">tcp://10.5.100.2:61616</connector>
</connectors>

<discovery-groups>
   <discovery-group name="my-discovery-group">
      <local-bind-address>10.5.100.2</local-bind-address>
      <group-address>231.7.7.7</group-address>
      <group-port>9876</group-port>
      <refresh-timeout>10000</refresh-timeout>
   </discovery-group>
</discovery-groups>

<cluster-connections>
   <cluster-connection name="my-cluster">
      <connector-ref>nettyartemistwo</connector-ref>
      <retry-interval>500</retry-interval>
      <use-duplicate-detection>true</use-duplicate-detection>
      <message-load-balancing>STRICT</message-load-balancing>
      <max-hops>1</max-hops>
      <discovery-group-ref discovery-group-name="my-discovery-group"/>
   </cluster-connection>
</cluster-connections>

<broadcast-groups>
   <broadcast-group name="my-broadcast-group">
      <local-bind-address>10.5.100.2</local-bind-address>
      <local-bind-port>5432</local-bind-port>
      <group-address>231.7.7.7</group-address>
      <group-port>9876</group-port>
      <broadcast-period>2000</broadcast-period>
      <connector-ref>nettyartemistwo</connector-ref>
   </broadcast-group>
</broadcast-groups>

<ha-policy>
   <replication>
      <slave/>
   </replication>
</ha-policy>

Есть идеи, почему я получаю это предупреждение?

1 Ответ

1 голос
/ 17 июня 2020

Когда экземпляр брокера запускается впервые, он инициализирует свой журнал. Одна из вещей, которые брокер делает на этом этапе инициализации, - это генерировать UUID, который будет использоваться для уникальной идентификации брокера для таких вещей, как кластеризация. Это называется «идентификатором узла».

Обычно, когда пользователи видят There are more than one servers on the network broadcasting the same node id, это означает, что они вручную скопировали журнал одного брокера другому брокеру. Обычно это делается, когда пользователи изначально настраивают кластер брокеров, потому что они хотят скопировать конфигурацию вместо того, чтобы начинать с нуля на каждом узле. Однако вместо того, чтобы просто копировать broker.xml на другой узел, также копируется весь журнал, а поскольку журнал содержит уникальный «идентификатор узла», оба брокера в конечном итоге используют один и тот же идентификатор.

Решение в этой ситуации - удалить журнал (по умолчанию хранящийся в каталоге data) у одного из брокеров, регистрирующих это сообщение. Журнал будет повторно инициализирован, и после перезапуска брокера будет создан новый идентификатор узла.

Это сообщение WARN также может быть записано в журнал, если у вас настроен HA, и ведущий и ведомый активны. в то же время. Главный и подчиненный, естественно, имеют один и тот же идентификатор узла, потому что у них один и тот же журнал (через общее хранилище или репликацию). Однако только один брокеров должен быть активным. Если оба брокера активны, это называется «сплит-мозг». Эта ситуация может быть очень проблемной c, потому что оба брокера будут работать независимо с одними и теми же данными журнала. Это может привести к дублированию сообщений, а также к кажущейся потере сообщений, и может быть чрезвычайно сложно (если не невозможно) восстановить целостность данных.

В конфигурации с общим хранилищем само общее хранилище снижает риск раздвоения мозга из-за общих блокировок файлов в журнале. Только одному брокеру физически разрешен доступ к данным журнала. копия данных. Если сетевое соединение между ведущим и ведомым выходит из строя, ведомое устройство не имеет реального способа узнать наверняка, действительно ли ведущее устройство умерло или это была просто проблема сети. Вот почему в документации рекомендуется использовать как минимум 3 пары live / backup . Это позволяет создать надлежащий кворум, чтобы активные члены кластера могли проголосовать за определение правильного переключения при отказе. простой случай, когда произошло аварийное переключение, и вы перезапускаете главный брокер без предварительного выключения подчиненного. Без <check-for-live-server>true</check-for-live-server> главный брокер просто запустится, не проверяя, транслирует ли другой брокер (например, его резервная копия) свой идентификатор узла.

...