本教學課程說明為客戶代管執行個體建立叢集 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 版本和修補程式版本。
設定叢集
您必須完成下列工作:
安裝 Looker
請使用 Looker 應用程式 JAR 檔案,並按照「客戶代管安裝步驟」說明文件頁面的指示,在每個節點上安裝 Looker。
設定 MySQL 應用程式資料庫
如果是叢集 Looker 設定,應用程式資料庫必須是 MySQL 資料庫。如果您現有的非叢集 Looker 執行個體使用 HyperSQL 做為應用程式資料庫,則必須將應用程式資料從 HyperSQL 資料庫遷移至新的共用 MySQL 應用程式資料庫。
如要瞭解如何備份 Looker,然後將應用程式資料庫從 HyperSQL 遷移至 MySQL,請參閱「遷移至 MySQL」說明文件頁面。
設定共用檔案系統
只有特定檔案類型 (模型檔案、部署金鑰、外掛程式和應用程式資訊清單檔案) 屬於共用檔案系統。如要設定共用檔案系統,請按照下列步驟操作:
- 在將儲存共用檔案系統的伺服器上,確認您有權存取可
su
至 Looker 使用者帳戶的其他帳戶。 - 在共用檔案系統的伺服器上,登入 Looker 使用者帳戶。
- 如果 Looker 正在執行,請關閉 Looker 設定。
- 如果您先前使用 inotify Linux 指令碼進行叢集處理,請停止這些指令碼、從 cron 中移除,然後刪除。
- 建立網路共用磁碟機,並掛接至叢集中的每個節點。請確認已設定在每個節點上自動掛接,且 Looker 使用者有權讀取及寫入該節點。在以下範例中,網路共用名稱為
/mnt/looker-share
。 在一個節點上複製部署金鑰,然後將外掛程式和儲存模型檔案的
looker/models
和looker/models-user-*
目錄移至網路共用資料夾。例如:mv looker/models /mnt/looker-share/ mv looker/models-user-* /mnt/looker-share/
為每個節點將
--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 金鑰存放區:
在共用檔案伺服器上,建立名為
ssh-share
的目錄。例如:/mnt/looker-share/ssh-share
。請確認
ssh-share
目錄的擁有者是 Looker 使用者,且權限為 700。此外,請確保ssh-share
目錄上方的目錄 (例如/mnt
和/mnt/looker-share
) 不可供所有人或群組寫入。在其中一個節點上,將
$HOME/.ssh
的內容複製到新的ssh-share
目錄。例如:cp $HOME/.ssh/* /mnt/looker-share/ssh-share
為每個節點備份現有的 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/model 和 looker/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 安全殼層部署金鑰
Looker 儲存 Git SSH 部署金鑰的位置,取決於專案的建立版本:
- 如果是 Looker 4.8 之前的專案,部署金鑰會儲存在伺服器的內建 SSH 目錄
~/.ssh
中。 - 如果是使用 Looker 4.8 以上版本建立的專案,部署金鑰會儲存在 Looker 控制的目錄
~/looker/deploy_keys/PROJECT_NAME
中。
修改 Looker 叢集
建立 Looker 叢集後,您可以新增或移除節點,不必變更其他叢集節點。
將叢集更新為新的 Looker 版本
更新可能涉及 Looker 內部資料庫的結構定義變更,與舊版 Looker 不相容。更新 Looker 的方法有兩種。
更安全的方法
- 建立應用程式資料庫的備份。
- 停止叢集的所有節點。
- 在每部伺服器上替換 JAR 檔案。
- 一次啟動一個節點。
較快的方法
如要使用這種速度較快但較不完整的方法更新:
- 建立 Looker 應用程式資料庫的副本。
- 啟動指向副本的新叢集。
- 將 Proxy 伺服器或負載平衡器指向新節點,然後停止舊節點。