2016-11-07 3 views
3

Сценарий

Прямо сейчас у нас есть только один узел, на котором запущена целая система. Мы хотим сделать различие между «frontend» узлами и одним «backend» узлом.Как правильно развернуть с кластером Akka

  • «Frontend» узлы (N узлов): Поддерживает постоянную связь с клиентами через соединение WebSocket
  • узел «Backend» (1 узел): обрабатывает все запросы, поступающие образуют все фронтэнда узлы запросов к базы данных и обработки необходимой логики домена.

Это различие необходимо каким-либо причинам:

Выполненная работа

Мы связали актеров, живущих на внешнем узле, с теми, которые l ive на бэкэнд. Мы сделали так, создавая экземпляр базового узла ActorRef s из внешнего интерфейса, используя akka.cluster.singleton.ClusterSingletonProxy и ClusterSingletonManager, фактически создавая их в бэкэнд.

Вопрос

Как мы делаем развернуть с учетом кластерного узла уведомления Даунинг Akka?

Насколько я понял по the Akka Cluster documentation about downing и some comments on the akka mailing list, рекомендуемый подход при работе с этим процессом было бы что-то вроде:

  1. Скачать дистрибутив AKKA из http://akka.io/downloads/
  2. Скопируйте и вставьте akka-cluster Баш сценарий вместе с jmxsh-R5.jar в папке resources/bin/ (например)
  3. Включите эту папку в распределенный пакет (я добавил следующие строки на build.sbt): mappings in Universal ++= (baseDirectory.value/"resources"/"bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName))
  4. При развертывании, установите узел будет развернут как вниз вручную вызова Баш скрипт, как:
    • Execute bin/akka-cluster %node_to_be_deployed:port% down
    • развернуть новую версию кода
    • Execute bin/akka-cluster %deployed_node:port% join

Сомнения:

  1. Это шаг за шагом процедура правильная?
  2. Если узел развертывания будет иметь тот же IP-порт и порт после развертывания, необходимо ли сделать down и join?
  3. Мы планируем установить один интерфейс и внутренние узлы в качестве семенных. Таким образом, весь кластер может быть восстановлен при развертывании только для интерфейсных узлов или только для внутреннего. Правильно ли это?

Спасибо!

ответ

1

Чтобы избежать сбит вручную, очистки, когда узел завершается, см: http://doc.akka.io/docs/akka/current/scala/cluster-usage.html#How_To_Cleanup_when_Member_is_Removed

Что касается ваших пунктов:

  1. Вам не нужна эта процедура, когда JVM перезапускается и код очистки является казнены. Только когда код очистки каким-то образом потерпел неудачу, вам необходимо вручную опуститься, как описано в процедуре.
  2. Когда узел отмечен как удаленный другими узлами (после выполнения кода очистки), для повторного объединения кластера можно использовать одну и ту же комбинацию ip и port.
  3. Да, вы можете просто повторно развернуть внешний узел.

PS .:
- Согласованное отключение будет улучшена в AKKA 2,5 см: https://github.com/akka/akka-meta/issues/38
- Если вы хотите управлять кластером с помощью HTTP API, см: http://developer.lightbend.com/docs/akka-cluster-management/current/

+0

Hi @Bennie. Спасибо за ваш ответ. Как я понимаю, процесс очистки происходит, когда узел удален, а также [Документация кластера Akka] (http://doc.akka.io/docs/akka/current/common/cluster.html#Membership_Lifecycle) Я понимаю это как следующий шаг (вверх -> недоступен -> вниз -> удален). Мой вопрос в том, как отметить узел как вниз (вверх -> недоступен -> вниз). Я играл с [ConstructR & Consul] (https://github.com/Tecsisa/constructr-consul), но он не имеет дело с нижним шагом (только с перечислением семенных узлов при присоединении к новому члену). –