iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
AI & Data

資料專案修羅場,30天手把手教你暗黑求生術!!!系列 第 29

[ Day 29 ] 資料平台辨證論治 - 為 Impala 設定 HA 吧

  • 分享至 

  • xImage
  •  

前言

在 CDP 中,有一些服務是透過 Active-Standby 的方式來實作 HA 機制,但有些服務則是透過把自己複製多份 (replication) 來實作 HA 機制,其中最常用的,即為 Hive 與 Impala。

由於 Hive 可以利用 ZooKeeper 實作服務發現的連線機制,這也有部份 HA 的作用,故此,我們要介紹在 CDP 中為 Impala 設定 HA 與 LB 的機制,以及常見的坑。

症狀

客戶端有 6 台 worker node,6 台上都有 Impala daemon 以分散查詢運算資源,使用者若要使用 Impala daemon 查詢,得隨機選一台 Impala daemon 的主機來登入,這會造成使用者認知與維運上的複雜度,因此需要一個前置的 VIP (Virtual IP) 替代這 6 台的 IP,讓使用者單從這個 VIP 登入,減輕認知及維運負擔。

病因

由於 Impala daemon 通常設於 worker node,而 worker node 大多不會開放使用者登入。在 CDP 中,使用者進入點通常稱為 gateway 或 edge。

使用者從 gateway 主機登入後,若單單執行 impala-shell -k (假設使用者已經取得憑證),往往會無法連到任何一個 Impala daemon,因為 Impala 並未像 Hive 那樣,透過 ZooKeeper 實作服務發現機制,就可以有單一的進入點:

https://ithelp.ithome.com.tw/upload/images/20251011/20084419Q8Sf0mw7qi.png

於是使用者必須在 6 台 worker node 的 IP 當中選擇其一,久而久之就會發現這 6 台 worker node 其中某幾台 loading 特別重,特別是第一台。

處方

為要簡化使用者的登入流程,我們在叢集中挑選了兩台主機,建置 keepalived 與 haproxy。

建置 keepalived 的目的是為了讓兩台主機相互備援,綁定一個虛擬 IP (VIP),於是我們得先安裝 keepalived,順便把 haproxy 也裝起來:

dnf install -y keepalived haproxy

接著我們設定 keepalived,假設我們使用 192.168.30.60 這個 IP 為 VIP,那麼 keepalived 的設定 ( /etc/keepalived/keepalived.conf ) 大概會是這樣:

global_defs {
   router_id LVS_DEVEL  
   enable_script_security  
   script_user keepalived_script
}

vrrp_script chk_health {  
   script      "systemctl is-active --quiet cloudera-scm-agent"  
   interval    2  
   weight      2  
   fall        3  
   rise        2  
}

vrrp_instance VI_SIT {  
   state               MASTER  
   # state               BACKUP  
   interface           ens18  
   virtual_router_id   60  
   mcast_src_ip        192.168.30.51
   priority            100  
   # priority            90  
   advert_int          1  
  
   authentication {  
       auth_type       PASS  
       auth_pass       athemaster  
   }  
  
   virtual_ipaddress {  
       192.168.30.60/24  
   }  
  
   track_script {  
       chk_health  
   }  
}

通常 keepalived 會有一主一備,因此另一台主機,就只需要把 state BACKUPpriority 90 這組設定註解打開、做相反的操作即可。

此外,mcast_src_ip 這欄需要改為主機自己的 IP,interface 也要改為自己網卡的名稱。

接著,我們要在兩台主機裡,各建立一個執行腳本用的帳號:

useradd -r -s /sbin/nologin keepalived_script

這樣就可以先啟動 keepalived,看 MASTER 的那台主機是否有拿到多一個 IP。

再來是設定 HAProxy,我們編輯 /etc/haproxy/haproxy.cfg 設定:

global  
   log         /dev/log    local0 debug  
  
   chroot      /var/lib/haproxy  
   pidfile     /var/run/haproxy.pid  
   maxconn     4000  
   user        haproxy  
   group       haproxy  
   daemon  
  
   stats socket /var/lib/haproxy/stats  
  
defaults  
   mode        tcp  
   log         global  
   option      tcplog  
   option      dontlognull  
   option      redispatch  
   retries     3  
   timeout     queue       1m  
   timeout     client      1m  
   timeout     server      1m  
   timeout     connect     10s  
   timeout     check       10s  
   maxconn     3000  
  
listen impalashell  
    bind    192.168.30.60:21000  
    mode    tcp  
    option  tcplog  
    balance leastconn  
    server  cdp-w1  cdp-w1:21000 check  
    server  cdp-w2  cdp-w2:21000 check  
    server  cdp-w3  cdp-w3:21000 check    
    server  cdp-w4  cdp-w4:21000 check    
    server  cdp-w5  cdp-w5:21000 check    
    server  cdp-w6  cdp-w6:21000 check    

HAProxy 的設定方面,可以用 frontend 搭配 backend,或者用 listen 區塊整個統包設定。

啟動前不需像 keepalived 那樣新增帳號,直接使用 systemctl 啟動即可。

接著我們得去 CM 上,設定 Impala 的 Load Balancer 位置:

https://ithelp.ithome.com.tw/upload/images/20251011/20084419JY8sZzULIo.png

輸入這個 VIP 或者 VIP 的 FQDN 之後,它會告訴你有設定要撒下去,因此要重啟服務。

讓它重啟服務後,就可以在 CDP 叢集中,使用這個 VIP 了,如:

impala-shell -k -i 192.168.30.60:21000

即可進入 Impala Daemon 做查詢。

注意

如果在 CM 上開啟 TLS 功能,它會為 Impala Daemon 掛上 TLS/SSL 憑證,這個憑證的內容,若沒包含 VIP 或它的 FQDN,則會使得進入時,因憑證驗證而失敗。

建議如果要開 TLS,需先把憑證準備、簽發好,再搭配 HAProxy 的 SSL 設定來進行。

由於這是內部叢集,我們為減少設定複雜度,多半是關掉 CM 的 AutoTLS 功能來執行的。


上一篇
[ Day 28 ] 噓,不要告訴別人這裡有 keytab
下一篇
[ Day 30 ] 資料專案的各式小撇步,私房秘訣大公開
系列文
資料專案修羅場,30天手把手教你暗黑求生術!!!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言