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 設定中,Proxy 伺服器或負載平衡器會在判斷某個節點異常時,重新導向流量。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 應用程式資料庫。如需預設通訊埠的清單,請參閱本頁的「開啟節點通訊的通訊埠」。

負載平衡器

如要平衡負載或將要求重新導向至可用的節點,您必須使用負載平衡器或 Proxy 伺服器 (例如 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. 分享安全殼層金鑰存放區 (視情況而定)
  5. 開啟節點通訊的通訊埠
  6. 在節點上啟動 Looker

安裝 Looker

請務必使用 Looker 應用程式 JAR 檔案,並按照「客戶代管安裝步驟」說明文件中的指示,在每個節點上安裝 Looker。

設定 MySQL 應用程式資料庫

對於叢集 Looker 設定,應用程式資料庫必須是 MySQL 資料庫。如果您有現有的非叢集 Looker 例項,且該例項使用 HyperSQL 做為應用程式資料庫,則必須將應用程式資料從 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 殼層指令碼。

    叢集中的每個節點都必須寫入專屬的 /log 目錄,或至少寫入專屬的記錄檔。

共用安全殼層金鑰存放區

  • 您要從現有的 Looker 設定建立共用檔案系統叢集,且
  • 您有在 Looker 4.6 或更早版本中建立的專案。

設定要共用的安全殼層金鑰存放區:

  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. 將 Proxy 伺服器或負載平衡器指向新節點,然後停止舊節點。