Ranger 스키마 백업 및 복원

이 페이지에서는 Ranger 클러스터로 Managed Service for Apache Spark에서 Ranger 스키마를 백업하고 복원하는 방법을 보여줍니다.

시작하기 전에

  1. 필요한 경우 버킷을 만듭니다. Ranger 스키마를 저장하고 복원하는 데 사용할 Cloud Storage 버킷에 액세스할 수 있어야 합니다.

    버킷을 만드는 방법은 다음과 같습니다.

    1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

      버킷으로 이동

    2. 만들기를 클릭합니다.
    3. 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 단계로 이동하려면 계속을 클릭합니다.
      1. 시작하기 섹션에서 다음을 수행합니다.
        • 버킷 이름 요구사항을 충족하는 전역적으로 고유한 이름을 입력합니다.
        • 버킷 라벨을 추가하려면 라벨 섹션 ()을 펼치고 라벨 추가를 클릭한 다음 라벨에 keyvalue를 지정합니다.
      2. 데이터 저장 위치 선택 섹션에서 다음을 수행합니다.
        1. 위치 유형을 선택합니다.
        2. 위치 유형 드롭다운 메뉴에서 버킷의 데이터가 영구적으로 저장될 위치를 선택합니다.
          • 이중 리전 위치 유형을 선택하는 경우 관련 체크박스를 사용하여 터보 복제를 사용 설정할 수도 있습니다.
        3. 버킷 간 복제를 설정하려면 Storage Transfer Service를 통해 버킷 간 복제 추가를 선택하고 다음 단계를 따르세요.

          버킷 간 복제 설정

          1. 버킷 메뉴에서 버킷을 선택합니다.
          2. 복제 설정 섹션에서 구성을 클릭하여 복제 작업의 설정을 구성합니다.

            버킷 간 복제 구성 창이 표시됩니다.

            • 객체 이름 프리픽스를 기준으로 복제할 객체를 필터링하려면 객체를 포함하거나 제외할 프리픽스를 입력한 다음 프리픽스 추가를 클릭합니다.
            • 복제된 객체의 스토리지 클래스를 설정하려면 스토리지 클래스 메뉴에서 스토리지 클래스를 선택합니다. 이 단계를 건너뛰면 복제된 객체가 기본적으로 대상 버킷의 스토리지 클래스를 사용합니다.
            • 완료를 클릭합니다.
      3. 데이터 저장 방법 선택 섹션에서 다음을 수행합니다.
        1. 버킷의 기본 스토리지 클래스를 선택하거나 버킷 데이터의 자동 스토리지 클래스 관리에서 자동 클래스를 선택합니다.
        2. 계층적 네임스페이스를 사용 설정하려면 데이터 집약적인 워크로드에 맞게 스토리지 최적화 섹션에서 이 버킷에서 계층적 네임스페이스 사용 설정을 선택합니다.
      4. 객체 액세스를 제어하는 방식 선택 섹션에서 버킷이 공개 액세스 방지를 적용할지 여부를 선택하고 버킷의 객체에 대한 액세스 제어 방법을 선택합니다.
      5. 객체 데이터 보호 방법 선택 섹션에서 다음을 수행합니다.
        • 버킷에 설정할 데이터 보호 아래의 옵션을 선택합니다.
          • 소프트 삭제를 사용 설정하려면 소프트 삭제 정책 (데이터 복구용) 체크박스를 클릭하고 삭제 후 객체를 보관하려는 일수를 지정합니다.
          • 객체 버전 관리를 설정하려면 객체 버전 관리 (버전 제어용) 체크박스를 클릭하고 객체당 최대 버전 수와 이전 버전이 만료되는 일수를 지정합니다.
          • 객체 및 버킷에 보관 정책을 사용 설정하려면 보관 (규정 준수용) 체크박스를 클릭한 후 다음 단계를 따르세요.
            • 객체 보관 잠금을 사용 설정하려면 객체 보관 사용 설정 체크박스를 클릭합니다.
            • 버킷 잠금을 사용 설정하려면 버킷 보관 정책 설정 체크박스를 클릭하고 보관 기간의 단위와 기간을 선택합니다.
        • 객체 데이터가 암호화되는 방식을 선택하려면 데이터 암호화 섹션 ()을 펼치고 데이터 암호화 방법을 선택합니다.
    4. 만들기를 클릭합니다.

Ranger 스키마 백업

  1. SSH를 사용하여 Ranger 스키마가 있는 클러스터의 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 버킷의 이름입니다.

    • 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 버킷의 이름입니다.

    • schema filename: Cloud Storage의 bucket name에 저장된 .sql 파일 확장자가 없는 Ranger 스키마 파일 이름입니다.

  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