如何在 "CONTROLLER AS A SERVICE" 模式下设置 Apache Helix 控制器
How to setup Apache Helix controller in "CONTROLLER AS A SERVICE" mode
tutorial中提到可以部署controller来管理大量的集群,但是doc/tutorial中没有。从代码和示例来看,似乎要创建一个控制器,我总是需要将 clusterName 传入。
如何设置控制器让它们管理多个集群并自动处理故障情况?
我们需要创建一个文档来说明如何设置它。
"Helix controller as service" 的总体思路是您需要创建一个控制器集群(又名:超级集群)来容纳所有 Helix 控制器实例。然后 link 你的 Helix 管理的集群到这个超级集群。
设置示例步骤如下:
构建 Helix 管理员
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 控制器实例
./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 管理,您可以通过以下方式将这两个集群 link 到您的超级集群:
./helix-admin.sh --activateCluster storageCluster-1 mySuperCluster true --zkSvr <ZKSERVER:PORT>
./helix-admin.sh --activateCluster storageCluster-2 mySuperCluster true --zkSvr <ZKSERVER:PORT>
现在您的两个集群都将由 superCluster 中的一个 Helix 控制器管理。如果一个控制器死机,Helix 会自动为您的集群切换到另一个控制器。
tutorial中提到可以部署controller来管理大量的集群,但是doc/tutorial中没有。从代码和示例来看,似乎要创建一个控制器,我总是需要将 clusterName 传入。
如何设置控制器让它们管理多个集群并自动处理故障情况?
我们需要创建一个文档来说明如何设置它。
"Helix controller as service" 的总体思路是您需要创建一个控制器集群(又名:超级集群)来容纳所有 Helix 控制器实例。然后 link 你的 Helix 管理的集群到这个超级集群。
设置示例步骤如下:
构建 Helix 管理员
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 控制器实例
./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 管理,您可以通过以下方式将这两个集群 link 到您的超级集群:
./helix-admin.sh --activateCluster storageCluster-1 mySuperCluster true --zkSvr <ZKSERVER:PORT>
./helix-admin.sh --activateCluster storageCluster-2 mySuperCluster true --zkSvr <ZKSERVER:PORT>
现在您的两个集群都将由 superCluster 中的一个 Helix 控制器管理。如果一个控制器死机,Helix 会自动为您的集群切换到另一个控制器。