集群 Looker

本教程介绍了推荐创建聚类 Looker 配置的方法。

概览

Looker 应用可以运行单节点或聚类:

  • 单节点 Looker 应用是默认配置,它包含组成 Looker 应用的所有服务,它们在单个服务器上运行。
  • 聚类 Looker 配置是一项更复杂的配置,通常涉及数据库服务器、负载平衡器和多个运行 Looker 应用的服务器。聚类 Looker 应用中的每个节点都是运行单个 Looker 实例的服务器。

组织希望将 Looker 作为集群运行有两个主要原因:

  • 负载均衡
  • 改进了可用性和故障切换

根据扩缩问题,聚类 Looker 可能无法提供解决方案。例如,如果少量大型查询占用了系统内存,唯一的解决方案是增加 Looker 进程的可用内存。

负载均衡替代方案

在对 Looker 进行负载均衡之前,请考虑增加内存并尽可能增加运行 Looker 的单个服务器的 CPU 数量。Looker 建议对内存和 CPU 利用率设置详细性能监控,以确保 Looker 服务器根据工作负载情况进行适当的调整。

大型查询需要更多内存才能获得更好的性能。当许多用户运行小查询时,聚类可以提供性能提升。

对于最多包含 50 个轻量使用 Looker 的用户的配置,Looker 建议以大型 AWS EC2 实例(M4.large:8 GB RAM,2 个 CPU 核心)的等效位置运行单个服务器。对于拥有更多用户或许多活跃高级用户的配置,请留意 CPU 是否出现峰值或用户是否注意到应用运行缓慢。如果是,请将 Looker 移至更大的服务器或运行聚类 Looker 配置。

改进了可用性/故障切换

在集群环境中运行 Looker 可以在服务中断时减少停机时间。如果 Looker API 是在核心业务系统中使用,或者将 Looker 嵌入到面向客户的产品中,那么高可用性就会变得尤为重要。

在聚类 Looker 配置中,代理服务器或负载均衡器在确定某个节点出现故障时会重新路由流量。Looker 会自动处理离开和加入集群的节点。

必需组件

集群 Looker 配置需要以下组件:

  • MySQL 应用数据库
  • Looker 节点(运行 Looker Java 进程的服务器)
  • 负载均衡器
  • 共享文件系统
  • Looker 应用 JAR 文件的正确版本

下图展示了这些组件如何交互:

MySQL 应用数据库

Looker 使用应用数据库(通常称为内部数据库)来保存应用数据。Looker 作为单节点应用运行时,通常使用内存中的 HyperSQL 数据库。

在聚类的 Looker 配置中,每个节点的 Looker 实例必须指向一个共享事务数据库(共享应用或内部数据库)。针对集群 Looker 的应用数据库支持如下:

  • 对于聚类 Looker 实例,应用数据库仅支持 MySQL。不支持 Amazon Aurora 和 MariaDB。
  • 支持 MySQL 5.7 及更高版本和 8.0 及更高版本。
  • 不支持聚类数据库,例如 Galera。

建议使用只读副本数据库来提高性能和冗余。您的读取副本数据库不必是 MySQL 数据库。

Looker 不会管理该数据库的维护和备份。不过,由于数据库几乎托管着所有 Looker 应用配置数据,因此应该将其配置为高可用性数据库并至少每天备份一次。

Looker 节点

每个节点都是一台运行 Looker Java 进程的服务器。Looker 集群中的服务器需要能够相互访问和 Looker 应用数据库。本页面的打开节点进行通信的端口部分列出了默认端口。

负载均衡器

为了平衡负载或重定向请求到可用节点,需要使用负载均衡器或代理服务器(例如 NGINX 或 AWS ELB)将流量定向到每个 Looker 节点。负载均衡器会处理健康检查。如果节点出现故障,负载均衡器必须配置为将流量重新路由到其余健康状况良好的节点。

选择并配置负载均衡器时,请确保它可配置为仅作为第 4 层运行。Amazon Classic ELB 就是这样一个例子。此外,负载均衡器应设有一个较长的超时时间(3600 秒),以防止查询被终止。

共享文件系统

您必须使用符合 POSIX 标准的共享文件系统(如 NFS、AWS EFS、Gluster、BeeGFS、Lustre 或许多其他文件系统)。Looker 使用共享文件系统存储集群中的所有节点所使用的各种信息。

若要安装来自 Looker Marketplace 的应用和工具,您需要使用共享(网络)文件系统。

Looker 应用(JAR 可执行文件)

您必须使用 Looker 3.56 或更高版本的 Looker 应用 JAR 文件。

从 Looker 6.18 开始,Looker JAR 文件已拆分为两个单独的 JAR 文件:Looker 核心 JAR 文件和 Looker 依赖项 JAR 文件。如果您要安装或更新至 Looker 6.18 或更高版本,请务必同时下载这两个 JAR 文件。

Looker 强烈建议集群中的每个节点都运行相同的 Looker 版本和补丁程序版本,如本页面上的在节点上启动 Looker 中所述。

设置集群

必须完成以下任务:

  1. 安装 Looker
  2. 设置 MySQL 应用数据库
  3. 设置共享文件系统
  4. 共享 SSH 密钥存储区(根据您的具体情况)
  5. 打开节点进行通信的端口
  6. 在节点上启动 Looker

安装 Looker

使用 Looker 应用 JAR 文件客户托管的安装步骤文档页面中的说明,确保在每个节点上安装了 Looker。

设置 MySQL 应用数据库

对于聚类 Looker 配置,应用数据库必须是 MySQL 数据库。如果您当前使用 HyperSQL 作为应用数据库的非聚类 Looker 实例,则必须将应用数据从 HyperSQL 数据迁移到新的共享 MySQL 应用数据库。

请务必备份您的 Looker 目录。迁移过程只能从 HyperSQL 数据库到 MySQL 数据库,不能相反。

如需了解如何备份 Looker 以及如何将应用应用从 HyperSQL 迁移到 MySQL,请参阅迁移到 MySQL 文档页面。

设置共享文件系统

只有具体的文件类型(模型文件、部署密钥、插件和潜在的应用清单文件)属于共享文件系统。如需设置共享文件系统,请执行以下操作:

  1. 在存储共享文件系统的服务器上,验证您能否访问其他能够su访问 Looker 用户帐号的帐号。
  2. 在共享文件系统的服务器上,登录 Looker 用户帐号。
  3. 如果 Looker 当前正在运行,请关闭 Looker 配置。
  4. 如果您之前使用 inotify Linux 脚本进行聚类,请停止这些脚本,将其从 cron 中移除,然后删除它们。
  5. 创建网络共享并将其装载到集群中的每个节点上。请确保该节点配置为在每个节点上自动装载,并且 Looker 用户可以读取和写入其中的内容。在以下示例中,网络共享名为 /mnt/looker-share
  6. 将部署键、插件以及用于存储模型文件的 looker/modelslooker/models-user-* 目录移动到一个网络节点中。例如:

    mv looker/models /mnt/looker-share/
    mv looker/models-user-* /mnt/looker-share/
    
  7. 对于每个节点,请将 --shared-storage-dir 设置添加到 LOOKERARGS。指定网络共享,如以下示例所示:

    --shared-storage-dir /mnt/looker-share
    

    应将 LOOKERARGS 添加到 $HOME/looker/lookerstart.cfg,以免这些设置受到更新的影响。如果您的 LOOKERARGS 未在该文件中列出,则表明有人可能直接将其添加到 $HOME/looker/looker shell 脚本。

    集群中的每个节点都必须写入唯一的 /log 目录,或者至少是唯一的日志文件。

共享 SSH 密钥代码库

  • 您正在基于现有的 Looker 配置创建共享文件系统集群,并且
  • 您有在 Looker 4.6 或更早版本中创建的项目。

以下过程需要修改 Looker 用户的 $HOME/.ssh directory。如果配置出错,这可能会使您无法登录并解决问题。在执行以下步骤之前,请确保您有权访问另一个能够向 Looker 用户帐号su的帐号。

设置要共享的 SSH 密钥代码库:

  1. 在共享文件服务器中,创建一个名为 ssh-share 的目录。例如:/mnt/looker-share/ssh-share

    确保 ssh-share 目录归 Looker 用户所有,并且权限为 700。此外,请确保 ssh-share 目录(例如 /mnt/mnt/looker-share)上方的目录不可全局写入或群组不可写入。

  2. 在一个节点上,将 $HOME/.ssh 的内容复制到新的 ssh-share 目录。例如:

    cp $HOME/.ssh/* /mnt/looker-share/ssh-share

  3. 对于每个节点,备份现有 SSH 文件并创建指向 ssh-share 目录的符号链接。例如:

    cd $HOME
    mv .ssh .ssh_bak
    ln -s /mnt/looker-share/ssh-share .ssh
    

    请务必为每个节点执行此步骤。

打开节点的通信端口

聚类 Looker 节点使用自签名证书以及基于应用数据库中轮替密钥的额外身份验证方案通过 HTTPS 相互通信。

集群节点之间必须打开的默认端口为 1551 和 61616。您可以使用此处列出的启动标志配置这些端口。我们强烈建议您限制网络对这些端口的访问,以仅允许集群主机之间的流量。

在节点上启动 Looker

在具有所需启动标志的每个节点上重启服务器。

集群中的每个节点必须运行相同的版本和补丁程序版本。

可用的启动标志

下表显示了可用的启动标志,包括启动或加入集群所需的标志:

标志 是否必需? 目的
--clustered 添加标志以指定此节点正在集群模式下运行。
-H--hostname 10.10.10.10 其他节点用于联系此节点的主机名,例如节点的 IP 地址或系统主机名。必须不同于集群中所有其他节点的主机名。
-n 1551 节点间通信的端口。默认值为 1551。所有节点都必须使用相同的端口号进行节点间通信。
-q 61616 用于将集群级事件加入队列的端口。默认值为 61616。
-d /path/to/looker-db.yml 存放 Looker 应用数据库凭据的文件的路径。
--shared-storage-dir /path/to/mounted/shared/storage 此选项应指向本页前面的包含 looker/modellooker/models-user-* 目录的共享目录设置。

您的 --clustered 启动标志不应包含任何值。

LOOKERARGS 并指定数据库凭据的示例

将 Looker 启动标志放置在与 Looker JAR 文件位于同一目录的 lookerstart.cfg 文件中。

例如,您可能要告知 Looker:

  • 如需使用名为 looker-db.yml 的文件作为其数据库凭据,请执行以下操作:
  • 它是集群节点,并且
  • 集群的其他节点应使用 IP 地址 10.10.10.10 与此主机联系。

您需要指定以下内容:

LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"

请务必为您的节点指定正确的 IP 地址。

looker-db.yml 文件将包含数据库凭据,例如:

host: your.db.hostname.com
username: db_user
database: looker
dialect: mysql
port: 3306
password: secretPassword

此外,如果您的 MySQL 数据库需要 SSL 连接,则 looker-db.yml 文件还需要以下各项:

ssl: true

在将凭据保存到文件时,请遵循最佳做法安全注意事项。最好将 looker-db.yml 文件权限设置为 600,该权限归执行 Looker 应用的 Linux“用户”帐号所有。切勿将此文件签入 Git 代码库。

如果您不想将配置存储在磁盘上的 looker-db.yml 文件中,则可以将环境变量 LOOKER_DB 配置为包含 looker-db.yml 文件中每一行的键值对列表。例如:

export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"

查找您的 Git SSH 部署密钥

Looker 存储 Git SSH 部署密钥的位置取决于创建项目的版本:

  • 对于 Looker 4.8 之前创建的项目,部署密钥存储在服务器的原生 SSH 目录 ~/.ssh 中。
  • 对于在 Looker 4.8 或更高版本中创建的项目,部署密钥存储在由 Looker 控制的目录 ~/looker/deploy_keys/PROJECT_NAME 中。

修改 Looker 集群

创建 Looker 集群后,您可以添加或移除节点,而无需更改其他集群节点。

将集群更新到新的 Looker 版本

更新可能涉及对 Looker 内部数据库的架构更改,而这些更改与以前的 Looker 版本不兼容。如需更新 Looker,有两种方法。

更安全的方法

  1. 创建应用数据库的备份。
  2. 停止集群的所有节点。
  3. 替换每个服务器上的 JAR 文件。
  4. 一次启动一个节点。

更快捷的方法

此方法可缩短停机时间,但会丢失从创建副本到将代理服务器指向新节点期间所做的任何更改。例如,如果有人在转换期间添加用户或创建外观,新应用数据库中可能不会捕获这些更改。

如需使用这种速度更快但不太完整的方法进行更新,请执行以下操作:

  1. 创建 Looker 应用数据库的副本。
  2. 启动一个指向副本的新集群。
  3. 将代理服务器或负载均衡器指向新节点,然后您可以停止旧节点。