聚类 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 文件

下图说明了这些组件如何交互。从总体上讲,负载均衡器在集群 Looker 节点之间分配网络流量。每个节点都与共享 MySQL 应用数据库、共享存储空间目录和每个 LookML 项目的 Git 服务器进行通信。

MySQL 应用数据库

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

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

  • 集群 Looker 实例的应用数据库仅支持 MySQL。不支持 Amazon Aurora 和 MariaDB。
  • 支持 MySQL 5.7+ 和 8.0+ 版本。
  • 不支持集群数据库,例如 Galera。

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

Looker 节点

每个节点都是一个服务器,其上运行着 Looker Java 进程。Looker 集群中的服务器需要能够相互访问,并且能够访问 Looker 应用数据库。默认端口列在本页面的打开端口以供节点通信部分。

负载平衡器

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

在选择和配置负载均衡器时,请确保可以将其配置为仅在第 4 层运行。Amazon Classic ELB 就是这样一个示例。此外,负载均衡器应具有较长的超时时间(3,600 秒),以防止查询被终止。

共享文件系统

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

Looker 应用(JAR 可执行文件)

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

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

设置集群

需要执行以下任务:

  1. 安装 Looker
  2. 设置 MySQL 应用数据库
  3. 设置共享文件系统
  4. 共享 SSH 密钥库(视情况而定)
  5. 打开端口以供节点通信
  6. 在节点上启动 Looker

安装 Looker

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

设置 MySQL 应用数据库

对于集群 Looker 配置,应用数据库必须是 MySQL 数据库。如果您有使用 HyperSQL 作为应用数据库的现有非集群 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 或更早版本中创建的项目。

设置要共享的 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-* 目录。

LOOKERARGS 示例和指定数据库凭据

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

例如,您可能希望告知 Looker:

  • 使用名为 looker-db.yml 的文件作为其数据库凭据,
  • 它是一个集群节点,并且
  • 集群的其他节点应通过 IP 地址 10.10.10.10 与此主机联系。

您需要指定:

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

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 文件中,可以将环境变量 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. 将代理服务器或负载均衡器指向新节点,然后您可以停止旧节点。