Kylin 集群模式部署


Kylin实例是无状态的服务,运行时的状态信息存储在Mysqlmetastore中。出于负载均衡的考虑,您可以启用多个共享一个metastore的Kylin实例,使得各个节点分担查询压力且互为备份,从而提高服务的可用性。下图描绘了Kylin集群模式部署的一个典型场景:

1 Kylin集群模式部署

如果您需要将多个Kylin节点组成集群,请确保他们使用同一个Hadoop集群。然后在每个节点的配置文件$Kylin_HOME/conf/Kylin.properties中执行下述操作:

  • 配置相同的Kylin.metadata.url值,即配置所有的Kylin节点使用同一个Mysqlmetastore
  • 配置Kylin节点列表Kylin.server.cluster-servers,包括所有节点(包括当前节点),当事件变化时,接收变化的节点需要通知其他所有节点(包括当前节点)。
  • 配置Kylin节点的运行模式Kylin.server.mode,参数值可选All,Job,Query中的一个,默认值为all
  • Job模式代表该服务仅用于任务调度,不用于查询;Query模式代表该服务仅用于查询,不用于构建任务的调度;All模式代表该服务同时用于任务调度和SQL查询。

注意:默认情况下只有一个实例用于构建任务的调度(即Kylin.server.mode设置为All或者Job模式)。

2 任务引擎高可用

从v2.0开始,Kylin支持多个任务引擎一起运行,相比于默认单任务引擎的配置,多引擎可以保证任务构建的高可用性

使用多任务引擎,你可以在多个Kylin节点上配置它的角色为Job或All。

为了避免它们之间产生竞争,需要在Kylin.properties中配置任务调度器为分布式调度:

Kylin.job.scheduler.default=2
Kylin.job.lock=org.apache.Kylin.job.lock.zookeeper.ZookeeperJobLock

然后将所有任务和查询节点的地址注册到Kylin.server.cluster-servers

3 配置CuratorScheculer进行任务调度

从v3.0.0-alpha开始,Kylin引入基于Curator主从模式多任务引擎调度器,用户可以修改如下配置来启用CuratorScheculer

Kylin.job.scheduler.default=100
Kylin.server.self-discovery-enabled=true

更多关于Kylin任务调度器的细节可以参考ApacheKylinWiki。

4 安装负载均衡器

为了将查询请求发送给集群而非单个节点,您可以部署一个负载均衡器,如Nginx,F5或cloudlb等,使得客户端和负载均衡器通信代替和特定的Kylin实例通信。

5 读写分离部署

Kylin4的读写分离部署方式与Kylin3存在一定的差异,请参考文档:ReadWriteSeparationDeploymentforKylin4