Как настроить контроллер Apache Helix в режиме "КОНТРОЛЛЕР КАК СЕРВИС"
В учебнике упоминается, что контроллеры могут быть развернуты для управления большим количеством кластеров, но нет документации / руководства по этому вопросу. Из кода и примеров видно, что для создания контроллера мне всегда нужно передавать имя кластера.
Как настроить контроллеры, чтобы они могли управлять более чем одним кластером и автоматически обрабатывать случаи сбоев?
1 ответ
Нам нужно будет создать документ о том, как его установить.
Общая идея "Контроллер Helix как сервис" заключается в том, что вам необходимо создать кластер контроллеров (он же супер кластер), который будет содержать все экземпляры контроллеров Helix. А затем свяжите ваш кластер, которым будет управлять Helix, с этим супер кластером.
Примерные шаги по настройке:
Building Helix admin
git clone git://git.apache.org/helix.git
cd helix
mvn clean install package -DskipTests
Создание суперкластера на ZK
cd helix-core/target/helix-core-pkg/bin
chmod +x ./helix-admin.sh
./helix-admin.sh --addCluster mySuperCluster --zkSvr <ZKSERVER:PORT>
Создание экземпляров контроллера спирали в супер кластере
./helix-admin.sh --addNode mySuperCluster myController-1_12345 --zkSvr <ZKSERVER:PORT>
./helix-admin.sh --addNode mySuperCluster myController-2_12345 --zkSvr <ZKSERVER:PORT>
./helix-admin.sh --addNode mySuperCluster myController-3_12345 --zkSvr <ZKSERVER:PORT>
Запустите все ваши экземпляры контроллера
./run-helix-controller.sh --cluster mySuperCluster --mode DISTRIBUTED --controllerName myController-1_12345 --zkSvr <ZKSERVER:PORT>
./run-helix-controller.sh --cluster mySuperCluster --mode DISTRIBUTED --controllerName myController-2_12345 --zkSvr <ZKSERVER:PORT>
./run-helix-controller.sh --cluster mySuperCluster --mode DISTRIBUTED --controllerName myController-3_12345 --zkSvr <ZKSERVER:PORT>
Теперь ваш супер кластер настроен и работает.
Предположим, у вас есть два кластера (скажем, storageCluster-1 и storageCluster-2), которыми вы хотели бы управлять с помощью Helix. Вы можете связать эти два кластера со своим супер кластером следующим образом:
./helix-admin.sh --activateCluster storageCluster-1 mySuperCluster true --zkSvr <ZKSERVER:PORT>
./helix-admin.sh --activateCluster storageCluster-2 mySuperCluster true --zkSvr <ZKSERVER:PORT>
Теперь оба ваших кластера будут управляться одним из контроллеров Helix из суперкластера. В случае смерти одного из контроллеров Helix автоматически переключается на другой контроллер для ваших кластеров.