1. 程式人生 > >【轉】Cloudera Manager 中如何正確的下線節點

【轉】Cloudera Manager 中如何正確的下線節點

最低要求的角色:超級管理員(所謂超級管理員就是 admin)

可以通過兩種方式從叢集中刪除主機:

  • 使用 Cloudera Manager 刪除;
  • 從叢集 A 中刪除主機,將其提供給由 Cloudera Manager 管理的其他叢集;

兩種方法都會涉及退役主機(decommission)、刪除角色(role)、刪除託管服務軟體(service),但最終都會保留資料目錄。

使用 Cloudera Manager 刪除主機

  • 在 Cloudera Manager 管理控制檯中,單擊 Hosts 選項卡,在 All Hots 中:
  • 選擇要刪除的主機;
  • 選擇 Actions for Selected > Decommission;

這裡需要注意 3 點:

  • 尤其是運行了 hdfs datanode、kafka broker 這樣的資料節點,退役節點所需時間和資料量線性正相關;

  • 請勿同時下線 2 臺或者以上的資料節點,可能會造成資料丟失;

  • 必須要等待這一步執行完成才可以進行下一步操作;

  • 停止 cloudera-scm-agent:

pssh -h list_cm_agent "sudo systemctl stop cloudera-scm-agent"
  • 確認程序停止:
pssh -h list_cm_agent -P "ps aux | grep 'cloudera-scm-agent.pid' | grep -v grep"
  • 在 Cloudera Manager 管理控制檯中,單擊 Hosts 選項卡;
  • 重新選擇步驟 2 中選擇的主機;
  • 選擇 Actions for Selected > Delete;

從叢集中刪除主機

該操作可以把節點從叢集中挪走,但是保留 Cloudera 管理服務角色(如 ServiceMonitor 等)。

  • 在 Cloudera Manager 管理控制檯中,單擊 Hosts 選項卡;
  • 選擇要刪除的主機;
  • 選擇 Actions for Selected > Remove From Cluster 。將顯示 “Remove Hosts From Cluster” 對話方塊;
  • 跳過移除 Cloudera 管理服務角色的步驟,單擊 “Confirm” 以完成刪除選定的主機;

常見問題

Q:如果沒有按照如上步驟正確刪除主機,可能會導致主機仍然在 All Hosts 列表中,但是實際已經下線。這樣走 7180 endpoint 的監控指令碼就會產生誤報,類似資訊大致如下:

HOST_AGENT_LOG_DIRECTORY_FREE_SPACE=NOT_AVAILABLE, HOST_AGENT_PARCEL_DIRECTORY_FREE_SPACE=NOT_AVAILABLE, HOST_AGENT_PROCESS_DIRECTORY_FREE_SPACE=NOT_AVAILABLE, HOST_CLOCK_OFFSET=NOT_AVAILABLE, HOST_DNS_RESOLUTION=NOT_AVAILABLE, HOST_MEMORY_SWAPPING=NOT_AVAILABLE, HOST_NETWORK_FRAME_ERRORS=NOT_AVAILABLE, HOST_NETWORK_INTERFACES_SLOW_MODE=NOT_AVAILABLE, HOST_SCM_HEALTH=BAD

A:對於 CM Manager 來說,它會把主機元資料全部存放在 DB 裡,對應的表為 ${DATABASE}.HOSTS ,我們只要刪除對應的殭屍機器記錄即可,資料庫名稱一般是預設的 cm:

DELETE FROM cm.HOSTS WHERE HOST_ID=’${HOST_ID}’;

但是可能會因為之前執行過的指令和該行記錄產生了外來鍵依賴而刪除不了,報類似外來鍵依賴的錯,那麼就首先需要刪除對應的 COMMANDS 表的記錄:

DELETE FROM cm.AUDITS WHERE HOST_ID=’ H O S T I D ; D E L E T E F R O M c m . C L I E N T C O N F I G S T O H O S T S W H E R E H O S T I D = {HOST_ID}'; DELETE FROM cm.CLIENT_CONFIGS_TO_HOSTS WHERE HOST_ID=' {HOST_ID}’;
DELETE FROM cm.COMMANDS WHERE HOST_ID=’ H O S T I D ; D E L E T E F R O M c m . C O M M A N D S S C H E D U L E S W H E R E H O S T I D = {HOST_ID}'; DELETE FROM cm.COMMANDS_SCHEDULES WHERE HOST_ID=' {HOST_ID}’;
DELETE FROM cm.CONFIGS WHERE HOST_ID=’ H O S T I D ; D E L E T E F R O M c m . C O N F I G S A U D W H E R E H O S T I D = {HOST_ID}'; DELETE FROM cm.CONFIGS_AUD WHERE HOST_ID=' {HOST_ID}’;
DELETE FROM cm.HOSTS_AUD WHERE HOST_ID=’ H O S T I D ; D E L E T E F R O M c m . P R O C E S S E S W H E R E H O S T I D = {HOST_ID}'; DELETE FROM cm.PROCESSES WHERE HOST_ID=' {HOST_ID}’;
DELETE FROM cm.ROLES WHERE HOST_ID=’ H O S T I D ; D E L E T E F R O M c m . R O L E S A U D W H E R E H O S T I D = {HOST_ID}'; DELETE FROM cm.ROLES_AUD WHERE HOST_ID=' {HOST_ID}’;

然後再執行刪除:

SET FOREIGN_KEY_CHECKS = 0
DELETE FROM cm.HOSTS WHERE HOST_ID=’${HOST_ID}’;
SET FOREIGN_KEY_CHECKS = 1

作者:大資料之心
連結:https://www.jianshu.com/p/00fe996ee325
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。