В сети hyperledger fabric для каждой организации определяется лидер ( Leader ).

Выборы лидера

Механизм выбора лидера используется для выбора одного peer для каждой организации, который будет связываться с orderer для получения блоков и инициировать распределение вновь прибывших блоков между другими пирами своей организации. Введение лидера оптимизирует общий процесс, так как запросы от orderer отправляется только лидеру каждой организации, а лидер - другим партнерам в этой организации. Определение лидера начинает работать только когда пиры вступили в какой-либо channel.

Существует 2 типа выбора лидера:

  1. Статический ( Static ) - администратор вручную настраивает peer в организации как лидера
  2. Динамический ( Dynamic ) - узлы ( peers ) выполняют процедуру выбора лидера, чтобы выбрать одного peer в организации, который станет лидером.

В примере first network настроено на автоматический выбор.

Статические выборы лидера

Статические выборы лидера позволяют вручную определить одного или нескольких пиров ( peers ) в организации в качестве лидеров.

Пример конфигурации для статического выбора:

peer1:
  - CORE_PEER_GOSSIP_USELEADERELECTION=false
  - CORE_PEER_GOSSIP_ORGLEADER=true
peer2:
  - CORE_PEER_GOSSIP_USELEADERELECTION=false
  - CORE_PEER_GOSSIP_ORGLEADER=false
peer3:
  - CORE_PEER_GOSSIP_USELEADERELECTION=false
  - CORE_PEER_GOSSIP_ORGLEADER=false

Если выставить значения CORE_PEER_GOSSIP_USELEADERELECTION и CORE_PEER_GOSSIP_ORGLEADER в true это приведёт к ошибке.

Нужно также позаботиться о доступности лидера.

Динамические выборы лидера

Выбор лидера осуществляется автоматически.

Динамически избранный лидер отправляет сообщения с проверкой доступности ( ping ) остальным пирам в качестве доказательства жизнеспособности. Если один или несколько пиров не получат пакетов в течение установленного периода времени, они выберут нового лидера. Т.е может получится что в сети с большим количеством пиров будет несколько лидеров. Но после исправления проблем с доступностью всех пиров в лидерах останется только один.

По умолчанию время жизни лидера равно 10 секундам. Для того, чтобы исправить правим файл core.yaml:

peer:
    gossip:
        election:
            leaderAliveThreshold: 20s

Пример конфигурации для динамического выбора:

peer1:
  - CORE_PEER_GOSSIP_USELEADERELECTION=true
  - CORE_PEER_GOSSIP_ORGLEADER=false
peer2:
  - CORE_PEER_GOSSIP_USELEADERELECTION=true
  - CORE_PEER_GOSSIP_ORGLEADER=false
peer3:
  - CORE_PEER_GOSSIP_USELEADERELECTION=true
  - CORE_PEER_GOSSIP_ORGLEADER=false

Screenshots

peer2 стал лидером

peer1 не смог стать лидером

после отключения peer2 лидером стал peer1