Kyuubi 高可用指南
作为构建在 Apache Spark 之上的企业级即席 SQL 查询服务,Kyuubi 将高可用性(HA)作为主要特性,旨在确保商定的服务可用性水平,例如高于通常水平的正常运行时间。
以 HA 模式运行 Kyuubi,就是使用一组计算机或容器来承载基于 Kyuubi 的 SQL 查询服务,使其能够以最少的停机时间被可靠地使用。Kyuubi 通过使用 Apache ZooKeeper 将冗余的服务实例分组管理,从而在一个或多个组件发生故障时仍然提供持续的服务。
如果没有 HA,一旦某个服务器崩溃,Kyuubi 将不可用,直到崩溃的服务器被修复为止。有了 HA,这种情况将通过硬件/软件故障的自动检测来补救,另一个 Kyuubi 服务实例会立即准备就绪并开始提供服务,而无需人工干预。
HA 架构
目前,Kyuubi 支持通过负载均衡使整个系统实现高可用。
负载均衡旨在优化所有 Kyuubi 服务单元的使用,最大化吞吐量,最小化响应时间,并避免单个单元过载。使用多个 Kyuubi 服务单元进行负载均衡,而不是使用单个单元,可以通过冗余来提高可靠性和可用性。
主要优势
高并发
- 通过增加或移除 Kyuubi 服务器实例,可以轻松地进行纵向扩展或缩减,以满足客户端请求的需求。
平滑升级
- Kyuubi 服务器支持优雅停止。我们可以删除一个
k.i.,但不会立即停止它。在这种情况下,该k.i.将不再接受任何新的连接请求,只处理来自现有连接的操作请求。当所有连接都释放完毕后,它才会停止。 - Kyuubi 引擎的依赖项可以随意变更,例如升级版本、修改配置、添加外部 jar、迁移到另一个引擎目录等。所有这些都将在启动和停止期间重新加载。
- Kyuubi 服务器支持优雅停止。我们可以删除一个
系统侧部署
在 Kyuubi 部署中应用 HA 时,我们基本上需要关注以下两项配置:
kyuubi.ha.addresses- 用于部署k.i.的外部 ZooKeeper 集群地址kyuubi.ha.namespace- 根目录,也称为 ServerSpace,用于部署k.i.
更多配置请参阅 Kyuubi 配置系统简介 的 HA 章节。
伪模式
当未配置 kyuubi.ha.addresses 时,k.i. 将启动一个内嵌的 ZooKeeper 服务,并在其中注册自身的地址。在这种伪模式下,客户端既可以通过原始 IP 地址,也可以通过 zk quorum + namespace 来连接 k.i.。但它不具备任何高可用能力。
生产模式
对于生产环境部署,kyuubi.ha.addresses 需要一个外部 ZooKeeper 集群。在此模式下,多个 K.I.(Kyuubi Instance)可以注册到由 kyuubi.ha.namespace 配置的同一个 ServerSpace 中,并共同提供服务。
客户端使用方式
借助 Kyuubi Hive JDBC Driver 或原生 Hive JDBC Driver,客户端可以在 JDBC 连接串中指定服务发现模式,即 serviceDiscoveryMode=zooKeeper;,并设置 zooKeeperNamespace=kyuubi;,随后便可从指定 ZooKeeper 地址的 /kyuubi 路径下随机选取一个 Kyuubi 服务 URI。
例如:
bin/beeline -u 'jdbc:hive2://10.242.189.214:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi' -n kentyao如何热升级 Kyuubi Server
Kyuubi 支持对高可用(HA)集群中的某个 Server 进行热升级,且对用户完全透明。
如果你为 Kyuubi Server 指定了自定义端口
例如,Kyuubi Server 以端口
10009运行在主机kyuubi.host上,你可以使用bin/kyuubi-ctl执行以下命令:./bin/kyuubi-ctl delete server --host "kyuubi.host" --port "10009"
Kyuubi 服务器将等待所有会话关闭后停止,之后你便可以启动新的 Kyuubi 服务器。
如果你为 Kyuubi 服务器配置了随机端口
你可以直接启动新的 Kyuubi 服务器,然后使用
bin/kyuubi-ctl执行命令:./bin/kyuubi-ctl delete server --host "kyuubi.host" --port "${PORT_FPR_OLD_KYUUBI_SERVER}"
可以通过以下方式找到 ${PORT_FPR_OLD_KYUUBI_SERVER}:
grep "server.KyuubiThriftBinaryFrontendService: Starting and exposing JDBC connection at" logs/kyuubi-*.out注意:您无需关心旧的 Kyuubi 服务器何时真正停止,因为新的会话将被路由到新的 Kyuubi 服务器等节点。
评论
登录后参与评论
KnowForge