備份及還原 Ranger 結構定義

本頁說明如何在 Managed Service for Apache Spark with Ranger 叢集上備份及還原 Ranger 結構定義。

事前準備

  1. 視需要建立 bucket。您必須有權存取 Cloud Storage bucket,才能儲存及還原 Ranger 結構定義。

    建立 bucket 的步驟如下:

    1. 前往 Google Cloud 控制台的 Cloud Storage「Buckets」(值區) 頁面。

      前往「Buckets」(值區) 頁面

    2. 點選 「Create」(建立)
    3. 在「建立 bucket」頁面中,輸入 bucket 資訊。如要前往下一個步驟,請按一下「繼續」
      1. 在「開始使用」部分,執行下列操作:
        • 輸入符合值區命名規定的全域不重複名稱。
        • 如要新增值區標籤,請展開「標籤」部分 (),按一下 「新增標籤」,然後為標籤指定 keyvalue
      2. 在「Choose where to store your data」(選擇資料的儲存位置) 專區中,執行下列操作:
        1. 選取「位置類型」
        2. 從「位置類型」下拉式選單中,選擇要永久儲存 bucket 資料的位置。
          • 如果您選取「雙區域」位置類型,也可以使用相關核取方塊啟用強化型複製
        3. 如要設定跨值區複製,請選取「透過 Storage 移轉服務新增跨值區複製作業」,然後按照下列步驟操作:

          設定跨 bucket 複製作業

          1. 在「Bucket」選單中選取 bucket。
          2. 在「複製設定」部分,按一下「設定」,設定複製作業的設定。

            畫面上會顯示「Configure cross-bucket replication」窗格。

            • 如要依物件名稱前置字串篩選要複製的物件,請輸入要納入或排除物件的前置字串,然後按一下「新增前置字串」
            • 如要為複製的物件設定儲存空間級別,請從「儲存空間級別」選單中選取儲存空間級別。如果略過這個步驟,複製的物件預設會使用目標值區的儲存空間級別。
            • 按一下 [完成]
      3. 在「選擇資料儲存方式」部分,執行下列操作:
        1. 選取 bucket 的預設儲存空間級別,或選取 Autoclass,讓系統自動管理 bucket 資料的儲存空間級別。
        2. 如要啟用階層命名空間,請在「為資料密集型工作負載提供最理想的儲存空間」部分,選取「為這個值區啟用階層結構式命名空間」
      4. 在「選取如何控制物件的存取權」部分,選取 bucket 是否要強制執行禁止公開存取,並為 bucket 的物件選取存取控管方法
      5. 在「選擇保護物件資料的方式」部分,執行下列操作:
        • 選取「資料保護」下方的任何選項,為 bucket 設定所需項目。
          • 如要啟用虛刪除,請按一下「虛刪除政策 (用於資料復原)」核取方塊,並指定要保留物件的天數 (刪除後)。
          • 如要設定「物件版本管理」,請勾選「物件版本管理 (用於版本管控)」核取方塊,並指定每個物件的版本數量上限,以及非現行版本失效的天數。
          • 如要為物件和 bucket 啟用資料保留政策,請勾選「保留 (符合法規)」核取方塊,然後執行下列操作:
            • 如要啟用 Object Retention Lock,請按一下「啟用物件保留功能」核取方塊。
            • 如要啟用 Bucket Lock,請按一下「Set bucket retention policy」(設定值區資料保留政策) 核取方塊,然後選擇保留期限的時間單位和長度。
        • 如要選擇物件資料的加密方式,請展開「資料加密」部分 (),然後選取「資料加密」方法
    4. 點選「建立」

備份 Ranger 結構定義

  1. 使用 SSH 連線至叢集的 Managed Service for Apache Spark 主要節點,並使用 Ranger 結構定義。請在主節點上執行的 SSH 終端機工作階段中,執行本節中的指令。

  2. 設定環境變數。

    BUCKET_NAME=bucket name \
      MYSQL_PASSWORD=MySQL password
      SCHEMA_FILE=schema filename
    

    更改下列內容:

    • MySQL password:您可以在叢集主要節點上開啟 /etc/mysql/my.cnf,複製 MySQL 密碼。

    • bucket name:用於儲存 Ranger 結構定義的 Cloud Storage bucket 名稱。

    • schema filename:指定檔案名稱,不含 .sql 副檔名。Ranger 結構定義會儲存在主要節點的這個檔案中,然後儲存在 Cloud Storage 的 bucket name

  3. 停止 Hive 服務。

    sudo systemctl stop hive-metastore.service
    sudo systemctl stop hive-server2.service
    

  4. 禁止變更 Ranger 結構定義資料表。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE ALL PRIVILEGES ON ranger.* from 'rangeradmin'@'localhost';
    GRANT SELECT ON ranger.* TO 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  5. 將 Ranger 結構定義儲存至 .sql 檔案。

    mysqldump -u root -p${MYSQL_PASSWORD} ranger > ${SCHEMA_FILE}.sql
    
  6. 重設 Ranger 權限。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE SELECT ON ranger.* from 'rangeradmin'@'localhost';
    GRANT ALL PRIVILEGES ON ranger.* to 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  7. 重新啟動 Hive 和 Ranger 服務。

    sudo systemctl start hive-metastore.service
      sudo systemctl start hive-server2.service
      sudo systemctl restart ranger-admin.service
      sudo systemctl restart ranger-usersync.service
    
  8. 將 Ranger 結構定義複製到 Cloud Storage。

    gcloud storage cp ${SCHEMA_FILE}.sql gs://${BUCKET_NAME}
    

還原 Ranger 結構定義

  1. 使用 SSH 連線至要還原叢集結構定義的叢集 Managed Service for Apache Spark 主要節點。請在主節點上執行的 SSH 終端機工作階段中,執行本節中的指令。

  2. 設定環境變數。

    BUCKET_NAME=bucket name \
      MYSQL_PASSWORD=MySQL password
      SCHEMA_FILE=schema filename
    

    更改下列內容:

    • MySQL password:您可以在叢集主要節點上開啟 /etc/mysql/my.cnf,複製 MySQL 密碼。

    • bucket name:包含已儲存 Ranger 結構定義的 Cloud Storage bucket 名稱。

    • schema filename:Ranger 結構定義檔案名稱,不含 .sql 副檔名,儲存在 Cloud Storage 的 bucket name 中。

  3. 停止 Hive 服務。

    sudo systemctl stop hive-metastore.service
    sudo systemctl stop hive-server2.service
    

  4. 禁止變更 Ranger 結構定義資料表。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE ALL PRIVILEGES ON ranger.* from 'rangeradmin'@'localhost';
    GRANT SELECT ON ranger.* TO 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  5. 將 Cloud Storage 中的 Ranger 結構定義 .sql 檔案複製到叢集主要節點。

    gcloud storage cp ${BUCKET_NAME}/${SCHEMA_FILE}.sql .
    
  6. 還原 Ranger 結構定義。這個步驟會覆寫現有 Ranger 結構定義的內容。

    mysqldump -u root -p${MYSQL_PASSWORD} ranger < ${SCHEMA_FILE}.sql
    
  7. 重設 Ranger 權限。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE SELECT ON ranger.* from 'rangeradmin'@'localhost';
    GRANT ALL PRIVILEGES ON ranger.* to 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  8. 更新 Ranger 設定檔。在下列檔案中,將 Ranger DB 主機變更為新的資料庫主機名稱,並使用下列屬性:

    檔案 屬性
    ranger-hdfs-security.xml ranger.plugin.hdfs.policy.rest.url
    ranger-yarn-security.xml ranger.plugin.yarn.policy.rest.url
  9. 重新啟動 Hive 和 Ranger 服務。

    sudo systemctl start hive-metastore.service
      sudo systemctl start hive-server2.service
      sudo systemctl restart ranger-admin.service
      sudo systemctl restart ranger-usersync.service