Pemulihan dari bencana (disaster recovery) untuk Dataproc Metastore

Dataproc Metastore

Tutorial ini mengusulkan pemulihan bencana dan strategi kelangsungan bisnis dual region menggunakan Dataproc Metastore. Tutorial ini menggunakan bucket dual-region untuk menyimpan set data Hive dan ekspor metadata Hive.

Dataproc Metastore adalah layanan metastore berbasis OSS yang sangat tersedia, diskalakan secara otomatis, dan terkelola sepenuhnya, serta sangat menyederhanakan pengelolaan metadata teknis. Layanan terkelola kami didasarkan pada Apache Hive Metastore dan berfungsi sebagai komponen penting terhadap data lake perusahaan.

Tutorial ini dirancang untuk pelanggan Google Cloud yang memerlukan ketersediaan tinggi untuk data dan metadata Hive mereka. Platform ini menggunakan Cloud Storage untuk penyimpanan, Dataproc untuk komputasi, dan Dataproc Metastore (DPMS), layanan Hive Metastore yang terkelola sepenuhnya di Google Cloud. Tutorial ini juga menampilkan dua cara berbeda untuk mengatur failover: satu menggunakan Cloud Run dan Cloud Scheduler, yang satunya menggunakan Cloud Composer.

Pendekatan dual-region yang digunakan dalam tutorial ini memiliki kelebihan dan kekurangan:

Kelebihan

  • Bucket region ganda bersifat geo-redundan.
  • Bucket dual-region memiliki SLA ketersediaan 99,95%, dibandingkan dengan ketersediaan 99,9% bucket region tunggal.
  • Bucket dual-region memiliki performa yang dioptimalkan di dua region, sedangkan bucket satu region tidak berperforma baik saat menangani resource di region lain.

Kekurangan

  • Penulisan bucket dual-region tidak segera direplikasi ke kedua region.
  • Bucket dual-region memiliki biaya penyimpanan yang lebih tinggi daripada bucket satu region.

Arsitektur referensi

Diagram arsitektur berikut menunjukkan komponen yang Anda gunakan dalam tutorial ini. Dalam kedua diagram, X merah besar menunjukkan kegagalan region utama:

Menggunakan Cloud Run dan Cloud Scheduler untuk melakukan failover dari region utama ke region sekunder. Gambar 1: Menggunakan Cloud Run dan Cloud Scheduler

Menggunakan Cloud Composer untuk melakukan failover dari region utama ke region sekunder. Gambar 2: Menggunakan Cloud Composer

Komponen solusi dan hubungannya adalah:

  • Dua bucket Cloud Storage dual-region: Anda membuat satu bucket untuk data Hive, dan satu bucket untuk pencadangan metadata Hive secara berkala. Buat kedua bucket region ganda sedemikian rupa sehingga menggunakan region yang sama dengan cluster Hadoop yang mengakses data.
  • Metastore Hive menggunakan DPMS: Anda membuat metastore Hive ini di region utama (region A). Konfigurasi metastore mengarah ke bucket data Hive Anda. Cluster Hadoop yang menggunakan Dataproc harus berada di region yang sama dengan instance DPMS tempatnya terpasang.
  • Instance DPMS kedua: Anda membuat instance DPMS kedua di region standby (region B) untuk mempersiapkan kegagalan di seluruh region. Kemudian, impor file ekspor hive.sql terbaru dari bucket ekspor ke DPMS standby Anda. Anda juga membuat cluster Dataproc di region standby dan memasangnya ke instance DMPS standby Anda. Terakhir, dalam skenario pemulihan dari bencana (disaster recovery), Anda mengalihkan aplikasi klien dari cluster Dataproc di region A ke cluster Dataproc di region B.
  • Deployment Cloud Run: Anda membuat deployment Cloud Run di region A yang secara berkala mengekspor metadata DPMS ke dalam bucket cadangan metadata menggunakan Cloud Scheduler (seperti yang ditunjukkan pada Gambar 1). Ekspor tersebut berbentuk file SQL yang berisi dump lengkap metadata DPMS.

Jika sudah memiliki lingkungan Cloud Composer, Anda dapat mengorkestrasi ekspor dan impor metadata DPMS dengan menjalankan DAG Airflow di lingkungan tersebut (seperti yang ditunjukkan pada Gambar 2). Penggunaan DAG Airflow ini akan menggantikan metode Cloud Run yang disebutkan sebelumnya.

Tujuan

  • Siapkan penyimpanan regional ganda untuk data Hive dan cadangan Hive Metastore.
  • Deploy Metastore Dataproc dan cluster Dataproc di region A dan B.
  • Gagal men-deploy ke region B.
  • Menggagalkan deployment kembali ke region A.
  • Membuat pencadangan metastore Hive otomatis.
  • Orkestrasikan ekspor dan impor metadata melalui Cloud Run.
  • Orkestrasikan ekspor dan impor metadata melalui Cloud Composer.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Dataproc, dan Dataproc Metastore.

    Mengaktifkan API

  5. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran Project > Owner ke akun layanan.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih Project > Owner.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

      Jangan tutup jendela browser Anda. Anda akan menggunakannya pada langkah berikutnya.

  6. Membuat kunci akun layanan:

    1. Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
    2. Klik Kunci.
    3. Klik Tambahkan kunci, lalu klik Buat kunci baru.
    4. Klik Create. File kunci JSON akan didownload ke komputer Anda.
    5. Klik Close.
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  9. Aktifkan API Dataproc, dan Dataproc Metastore.

    Mengaktifkan API

  10. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran Project > Owner ke akun layanan.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih Project > Owner.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

      Jangan tutup jendela browser Anda. Anda akan menggunakannya pada langkah berikutnya.

  11. Membuat kunci akun layanan:

    1. Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
    2. Klik Kunci.
    3. Klik Tambahkan kunci, lalu klik Buat kunci baru.
    4. Klik Create. File kunci JSON akan didownload ke komputer Anda.
    5. Klik Close.

Menginisialisasi lingkungan

  1. Di Cloud Shell, mulai instance Cloud Shell.
  2. Clone repositori GitHub tutorial:

    git clone https://github.com/GoogleCloudPlatform/metastore-disaster-recovery.git
    
  3. Aktifkan Google Cloud API berikut:

    gcloud services enable dataproc.googleapis.com metastore.googleapis.com
    
  4. Tetapkan beberapa variabel lingkungan:

    export PROJECT=$(gcloud info --format='value(config.project)')
    export WAREHOUSE_BUCKET=${PROJECT}-warehouse
    export BACKUP_BUCKET=${PROJECT}-dpms-backups
    export DPMS_PRIMARY_REGION=us-central1
    export DPMS_STANDBY_REGION=us-east1
    export DPMS_PRIMARY_INSTANCE=dpms1
    export DPMS_STANDBY_INSTANCE=dpms2
    export HADOOP_PRIMARY=dataproc-cluster1
    export HADOOP_STANDBY=dataproc-cluster2
    

Membuat penyimpanan untuk data Hive dan cadangan Hive Metastore

Di bagian ini, Anda akan membuat bucket Cloud Storage untuk menghosting cadangan data Hive dan Hive Metastore.

Membuat penyimpanan data Hive

  1. Di Cloud Shell, buat bucket dual-regional untuk menghosting data Hive:

    gsutil mb -c standard -l us-east1+us-central1 gs://${WAREHOUSE_BUCKET}
    
  2. Salin beberapa data sampel ke bucket data Hive:

    gsutil -m cp -r gs://retail_csv gs://${WAREHOUSE_BUCKET}/retail
    

Membuat penyimpanan untuk cadangan metadata

  • Di Cloud Shell, buat bucket dual-region untuk menghosting pencadangan metadata DPMS:

    gsutil mb -c standard -l us-east1+us-central1 us gs://${BACKUP_BUCKET}
    

Men-deploy resource komputasi di region utama

Di bagian ini, Anda akan men-deploy semua resource komputasi di region utama, termasuk instance DPMS dan cluster Dataproc. Anda juga mengisi Dataproc Metastore dengan contoh metadata.

Membuat instance DPMS

  1. Di Cloud Shell, buat instance DPMS:

    gcloud metastore services create ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --hive-metastore-version=3.1.2
    

    Diperlukan waktu beberapa menit untuk menyelesaikan perintah ini.

  2. Tetapkan bucket data Hive sebagai direktori warehouse default:

    gcloud metastore services update ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}-  warehouse"
    

    Diperlukan waktu beberapa menit untuk menyelesaikan perintah ini.

Membuat cluster Dataproc

  • Di Cloud Shell, buat cluster Dataproc dan lampirkan ke instance DPMS:

    gcloud dataproc clusters create ${HADOOP_PRIMARY} \
        --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_PRIMARY_REGION}/services/${DPMS_PRIMARY_INSTANCE} \
        --region=${DPMS_PRIMARY_REGION} \
        --image-version=2.0
    

    Tentukan image cluster sebagai versi 2.0, yang merupakan versi terbaru yang tersedia mulai Juni 2021. Ini juga merupakan versi pertama yang mendukung DPMS.

Mengisi metastore

  1. Di Cloud Shell, perbarui contoh retail.hql yang diberikan dalam repositori tutorial ini dengan nama bucket data Hive:

    sed -i -- 's/${WAREHOUSE_BUCKET}/'"$WAREHOUSE_BUCKET"'/g' retail.hql
    
  2. Jalankan kueri yang ada dalam file retail.hql untuk membuat definisi tabel di metastore:

    gcloud dataproc jobs submit hive \
        --cluster=${HADOOP_PRIMARY} \
        --region=${DPMS_PRIMARY_REGION} \
        --file=retail.hql
    
  3. Pastikan bahwa definisi tabel dibuat dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster=${HADOOP_PRIMARY} \
        --region=${DPMS_PRIMARY_REGION} \
        --execute="
        desc departments;
        desc categories;
        desc products;
        desc order_items;
        desc orders;
        desc customers;
    
        select count(*) as num_departments from departments;
        select count(*) as num_categories from categories;
        select count(*) as num_products from products;
        select count(*) as num_order_items from order_items;
        select count(*) as num_orders from orders;
        select count(*) as num_customers from customers;
      "
    

    Outputnya akan terlihat seperti berikut:

    +------------------+------------+----------+
    |     col_name     | data_type  | comment  |
    +------------------+------------+----------+
    | department_id    | int        |          |
    | department_name  | string     |          |
    +------------------+------------+----------+
    

    Output juga berisi jumlah elemen di setiap tabel—misalnya:

    +----------------+
    | num_customers  |
    +----------------+
    | 12435          |
    +----------------+
    

Gagal ke region standby

Bagian ini menjelaskan langkah-langkah untuk melakukan failover dari region utama (region A) ke region standby (region B).

  1. Di Cloud Shell, ekspor metadata instance DPMS utama ke bucket cadangan:

    gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE}  \
        --location=${DPMS_PRIMARY_REGION} \
        --destination-folder=gs://${BACKUP_BUCKET}
    

    Outputnya akan terlihat seperti berikut:

    metadataManagementActivity:
    metadataExports:
    ‐ databaseDumpType: MYSQL
        destinationGcsUri: gs://qa01-300915-dpms-backups/hive-export-2021-05-04T22:21:53.288Z
        endTime: '2021-05-04T22:23:35.982214Z'
        startTime: '2021-05-04T22:21:53.308534Z'
        state: SUCCEEDED
    

    Catat nilai dalam atribut destinationGcsUri. Atribut ini menyimpan cadangan yang Anda buat.

  2. Buat instance DPMS baru di region standby:

    gcloud metastore services create ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --hive-metastore-version=3.1.2
    
  3. Tetapkan bucket data Hive sebagai direktori warehouse default:

    gcloud metastore services update ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}-warehouse"
    
  4. Ambil jalur cadangan metadata terbaru:

    IMPORT_DIR=`gsutil ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1`
    IMPORT_SQL="${IMPORT_DIR}hive.sql"
    echo ${IMPORT_SQL}
    
  5. Impor metadata yang sudah dicadangkan ke dalam instance Dataproc Metastore baru:

    gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --dump-type=mysql \
        --database-dump=${IMPORT_SQL} \
        --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
    
  6. Buat cluster Dataproc di region standby (region B):

    gcloud dataproc clusters create ${HADOOP_STANDBY} \
        --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_STANDBY_REGION}/services/${DPMS_STANDBY_INSTANCE} \
        --region=${DPMS_STANDBY_REGION} \
        --image-version=2.0
    
  7. Pastikan metadata telah diimpor dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_STANDBY} \
        --region ${DPMS_STANDBY_REGION} \
        --execute "select count(*) as num_orders from orders;"
    

    Output num_orders paling penting untuk tutorial. Data tersebut mirip sebagai berikut:

    +-------------+
    | num_orders  |
    +-------------+
    | 68883       |
    +-------------+
    

    Dataproc Metastore utama telah menjadi metastore standby baru, dan Dataproc Metastore standby telah menjadi metastore utama baru.

  8. Perbarui variabel lingkungan berdasarkan peran baru ini:

    export DPMS_PRIMARY_REGION=us-east1
    export DPMS_STANDBY_REGION=us-central1]
    export DPMS_PRIMARY_INSTANCE=dpms2
    export DPMS_STANDBY_INSTANCE=dpms1
    export HADOOP_PRIMARY=dataproc-cluster2
    export HADOOP_STANDBY=dataproc-cluster1
    
  9. Verifikasi bahwa Anda dapat menulis ke Dataproc Metastore utama yang baru di region B:

    gcloud dataproc jobs submit hive \
        --cluster ${DPMS_PRIMARY_INSTANCE} \
        --region ${DPMS_PRIMARY_REGION} \
        --execute "create view completed_orders as select * from orders where order_status = 'COMPLETE';"
    
    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_PRIMARY} \
        --region ${DPMS_PRIMARY_REGION} \
        --execute "select * from completed_orders limit 5;"
    

    Outputnya berisi hal berikut:

    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | completed_orders.order_id  | completed_orders.order_date  | completed_orders.order_customer_id  | completed_orders.order_status  |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | 3                          | 2013-07-25 00:00:00.0        | 12111                               | COMPLETE                       |
    | 5                          | 2013-07-25 00:00:00.0        | 11318                               | COMPLETE                       |
    | 6                          | 2013-07-25 00:00:00.0        | 7130                                | COMPLETE                       |
    | 7                          | 2013-07-25 00:00:00.0        | 4530                                | COMPLETE                       |
    | 15                         | 2013-07-25 00:00:00.0        | 2568                                | COMPLETE                       |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    

Failover kini telah selesai. Sekarang Anda harus mengalihkan aplikasi klien ke cluster Dataproc utama yang baru di region B dengan mengupdate file konfigurasi klien Hadoop Anda.

Gagal kembali ke region asli

Bagian ini menyediakan langkah-langkah untuk gagal kembali ke region asli (region A).

  1. Di Cloud Shell, ekspor metadata dari instance DPMS:

    gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --destination-folder=gs://${BACKUP_BUCKET}
    
  2. Ambil jalur cadangan metadata terbaru:

    IMPORT_DIR=`gsutil ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1`
    IMPORT_SQL="${IMPORT_DIR}hive.sql"
    echo ${IMPORT_SQL}
    
  3. Impor metadata ke dalam instance DPMS standby di region asli (region A):

    gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --dump-type=mysql \
        --database-dump=${IMPORT_SQL} \
        --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
    
  4. Pastikan metadata telah diimpor dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_STANDBY} \
        --region ${DPMS_STANDBY_REGION} \
        --execute "select * from completed_orders limit 5;"
    

    Menghasilkan output yang mencakup:

    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | completed_orders.order_id  | completed_orders.order_date  | completed_orders.order_customer_id  | completed_orders.order_status  |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | 3                          | 2013-07-25 00:00:00.0        | 12111                               | COMPLETE                       |
    | 5                          | 2013-07-25 00:00:00.0        | 11318                               | COMPLETE                       |
    | 6                          | 2013-07-25 00:00:00.0        | 7130                                | COMPLETE                       |
    | 7                          | 2013-07-25 00:00:00.0        | 4530                                | COMPLETE                       |
    | 15                         | 2013-07-25 00:00:00.0        | 2568                                | COMPLETE                       |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    

Dataproc Metastore utama dan Dataproc Metastore standby telah kembali bertukar peran.

  1. Perbarui variabel lingkungan ke peran baru berikut:

    export DPMS_PRIMARY_REGION=us-central1
    export DPMS_STANDBY_REGION=us-east1
    export DPMS_PRIMARY_INSTANCE=dpms1
    export DPMS_STANDBY_INSTANCE=dpms12
    export HADOOP_PRIMARY=dataproc-cluster1
    export HADOOP_STANDBY=dataproc-cluster2
    

Failback kini telah selesai. Sekarang Anda harus mengalihkan aplikasi klien ke cluster Dataproc utama yang baru di region A dengan mengupdate file konfigurasi klien Hadoop Anda.

Membuat cadangan metadata otomatis

Bagian ini menjelaskan dua metode berbeda untuk mengotomatiskan ekspor dan impor cadangan metadata. Metode pertama, Opsi 1: Cloud Run dan Cloud Scheduler, menggunakan Cloud Run dan Cloud Scheduler. Metode kedua, Opsi 2: Cloud Composer, menggunakan Cloud Composer. Di kedua contoh tersebut, tugas ekspor membuat cadangan metadata dari DPMS utama di region A. Tugas impor mengisi DPMS standby di region B dari cadangan.

Jika sudah memiliki cluster Cloud Composer, Anda harus mempertimbangkan Opsi 2: Cloud Composer (dengan asumsi bahwa cluster Anda memiliki kapasitas komputasi yang cukup). Jika tidak, gunakan Opsi 1: Cloud Run dan Cloud Scheduler. Opsi ini menggunakan model harga bayar sesuai penggunaan dan lebih ekonomis daripada Cloud Composer, yang memerlukan penggunaan resource komputasi persisten.

Opsi 1: Cloud Run dan Cloud Scheduler

Bagian ini menunjukkan cara menggunakan Cloud Run dan Cloud Scheduler untuk mengotomatiskan ekspor impor metadata DPMS.

Layanan Cloud Run

Bagian ini menunjukkan cara mem-build dua layanan Cloud Run untuk menjalankan tugas ekspor dan impor metadata.

  1. Di Cloud Shell, aktifkan API Cloud Run, Cloud Scheduler, Cloud Build, dan App Engine:

    gcloud services enable run.googleapis.com cloudscheduler.googleapis.com cloudbuild.googleapis.com appengine.googleapis.com
    

    Anda mengaktifkan App Engine API karena layanan Cloud Scheduler memerlukan App Engine.

  2. Bangun image Docker dengan Dockerfile yang disediakan:

    cd metastore-disaster-recovery
    gcloud builds submit --tag gcr.io/$PROJECT/dpms_dr
    
  3. Deploy image container Anda ke layanan Cloud Run di region utama (region A). Deployment ini bertanggung jawab untuk membuat cadangan metadata dari metastore utama:

    gcloud run deploy dpms-export \
        --image gcr.io/${PROJECT}/dpms_dr \
        --region ${DPMS_PRIMARY_REGION} \
        --platform managed \
        --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION} \
        --allow-unauthenticated \
        --timeout=10m
    

    Secara default, waktu permintaan layanan Cloud Run akan habis setelah 5 menit. Untuk membantu memastikan bahwa semua permintaan memiliki cukup waktu agar berhasil diselesaikan, contoh kode sebelumnya memperpanjang nilai waktu tunggu setidaknya 10 menit.

  4. Ambil URL deployment untuk layanan Cloud Run:

    EXPORT_RUN_URL=$(gcloud run services describe dpms-export --platform
    managed --region ${DPMS_PRIMARY_REGION} --format `
    "value(status.address.url)")
    echo ${EXPORT_RUN_URL}
    
  5. Membuat layanan Cloud Run kedua di region standby (region B). Layanan ini bertanggung jawab untuk mengimpor cadangan metadata dari BACKUP_BUCKET ke metastore standby:

    gcloud run deploy dpms-import \
        --image gcr.io/${PROJECT}/dpms_dr \
        --region ${DPMS_STANDBY_REGION} \
        --platform managed \
        --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE} \
        --allow-unauthenticated \
        --timeout=10m
    
  6. Ambil URL deployment untuk layanan Cloud Run kedua:

      IMPORT_RUN_URL=$(gcloud run services describe dpms-import --platform
      managed --region ${REGION_B} --format "value(status.address.url)")
      echo ${IMPORT_RUN_URL}
    

Penjadwalan tugas

Bagian ini menunjukkan cara menggunakan Cloud Scheduler untuk memicu kedua layanan Cloud Run.

  1. Di Cloud Shell, buat aplikasi App Engine yang memerlukan Cloud Scheduler:

    gcloud app create --region=${REGION_A}
    
  2. Buat tugas Cloud Scheduler untuk menjadwalkan ekspor metadata dari metastore utama:

    gcloud scheduler jobs create http dpms-export \
        --schedule "*/15 * * * *" \
        --http-method=post \
        --uri=${EXPORT_RUN_URL}/export\
    

Tugas Cloud Scheduler membuat permintaan http ke layanan Cloud Run setiap 15 menit. Layanan Cloud Run menjalankan aplikasi Flask dalam container dengan fungsi ekspor dan impor. Saat fungsi ekspor dipicu, fungsi tersebut akan mengekspor metadata ke Cloud Storage menggunakan perintah gcloud metastore services export.

Secara umum, jika tugas Hadoop Anda sering melakukan operasi tulis ke Hive Metastore, sebaiknya sering-seringlah mencadangkan metastore. Jadwal pencadangan yang baik adalah rentang waktu setiap 15 menit hingga 60 menit.

  1. Picu pengujian layanan Cloud Run:

    gcloud scheduler jobs run dpms-export
    
  2. Pastikan Cloud Scheduler memicu operasi ekspor DPMS dengan benar:

    gcloud metastore operations list --location ${REGION_A}
    

    Outputnya akan terlihat seperti berikut:

    OPERATION_NAME                                           LOCATION     TYPE             TARGET                             DONE  CREATE_TIME          DURATION
     ...
    operation-a520936204508-5v23bx4y23f60-920f0a0f-9c2b56b5  us-central1  update  dpms1                       True  2021-05-13T20:05:04  2M23S
    

    Jika nilai DONE adalah False, ekspor masih berlangsung. Untuk mengonfirmasi bahwa operasi selesai, jalankan kembali perintah gcloud metastore operations list --location ${REGION_A} hingga nilainya menjadi True.

    Pelajari perintah gcloud metastore operations lebih lanjut di dokumentasi referensi.

  3. (Opsional) Buat tugas Cloud Scheduler untuk menjadwalkan impor ke metastore standby:

    gcloud scheduler jobs create http dpms-import \
        --schedule "*/15 * * * *" \
        --http-method=post \
        --uri=${IMPORT_RUN_URL}/import
    

Langkah ini bergantung pada persyaratan batas waktu pemulihan (RTO) Anda.

Jika menginginkan mode hot standby untuk meminimalkan waktu failover, Anda harus menjadwalkan tugas impor ini. Fitur ini memperbarui DPMS standby setiap 15 menit.

Jika mode cold standby sudah cukup untuk kebutuhan RTO Anda, Anda dapat melewati langkah ini dan juga menghapus cluster Dataproc dan DPMS standby Anda untuk semakin mengurangi tagihan bulanan keseluruhan. Saat gagal beralih ke region standby (region B), sediakan DPMS standby dan cluster Dataproc, lalu jalankan juga tugas impor. Karena file cadangan disimpan di bucket dual-regional, file tersebut dapat diakses meskipun region utama (region A) Anda mengalami gangguan.

Menangani Failover

Setelah gagal beralih ke region B, Anda harus menerapkan langkah-langkah berikut untuk mempertahankan persyaratan pemulihan dari bencana dan melindungi infrastruktur Anda dari potensi kegagalan di region B:

  • Jeda tugas Cloud Scheduler yang ada.
  • Perbarui region DPMS primer ke region B (us-east1).
  • Perbarui region DPMS standby ke region A (us-central1).
  • Update instance utama DPMS ke dpms2.
  • Mengupdate instance standby DPMS ke dpms1.
  • Deploy ulang layanan Cloud Run berdasarkan variabel yang telah diupdate.
  • Buat tugas Cloud Scheduler baru yang mengarah ke layanan Cloud Run baru Anda.

Langkah-langkah yang diperlukan dalam daftar sebelumnya mengulangi banyak langkah dari bagian sebelumnya, hanya dengan penyesuaian kecil (seperti mengganti nama wilayah). Gunakan informasi di Opsi 1: Cloud Run dan Cloud Scheduler untuk menyelesaikan pekerjaan wajib ini.

Opsi 2: Cloud Composer

Bagian ini menunjukkan cara menggunakan Cloud Composer untuk menjalankan tugas ekspor dan impor dalam satu grafik acyclic (DAG) Airflow.

  1. Di Cloud Shell, aktifkan Cloud Composer API:

    gcloud services enable composer.googleapis.com
    
  2. Membuat lingkungan Cloud Composer:

    export COMPOSER_ENV=comp-env
    gcloud beta composer environments create ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --image-version composer-1.17.0-preview.1-airflow-2.0.1 \
        --python-version 3
    
    • Gambar komposer composer-1.17.0-preview.1-airflow-2.0.1 adalah versi terbaru setelah dipublikasikan.
    • Lingkungan Composer hanya dapat menggunakan satu versi Python utama. Python 3 dipilih karena Python 2 memiliki masalah dukungan.
  3. Konfigurasikan lingkungan Cloud Composer Anda dengan variabel lingkungan berikut:

    gcloud composer environments update ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --update-env-variables=DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION},DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE}
    
  4. Upload file DAG ke lingkungan Composer Anda:

    gcloud composer environments storage dags import \
        --environment ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --source dpms_dag.py
    
  5. Ambil URL Airflow:

    gcloud composer environments describe ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --format "value(config.airflowUri)"
    
  6. Di browser, buka URL yang ditampilkan oleh perintah sebelumnya.

    Anda akan melihat entri DAG baru bernama dpms_dag. Dalam satu kali operasi, DAG akan menjalankan ekspor, diikuti dengan impor. DAG mengasumsikan bahwa DPMS standby selalu aktif. Jika tidak memerlukan hot standby dan hanya ingin menjalankan tugas ekspor, Anda harus menjadikan semua tugas terkait impor sebagai komentar dalam kode (find_backup, wait_for_ready_status, current_ts, dpms_import).

  7. Klik ikon Panah untuk memicu DAG guna melakukan pengujian:

    gambar

  8. Klik Graph View DAG yang berjalan untuk memeriksa status setiap tugas:

    gambar

    Setelah Anda memvalidasi DAG, biarkan Airflow menjalankannya sesuai jadwal reguler. Jadwal ditetapkan ke interval 30 menit, tetapi dapat disesuaikan dengan mengubah parameter schedule_interval dalam kode untuk memenuhi persyaratan waktu Anda.

Menangani failover

Setelah gagal beralih ke region B, Anda harus menerapkan langkah-langkah berikut untuk mempertahankan persyaratan pemulihan dari bencana dan melindungi infrastruktur Anda dari potensi kegagalan di region B:

  • Perbarui region DPMS primer ke region B (us-east1).
  • Perbarui region DPMS standby ke region A (us-central1).
  • Update instance utama DPMS ke dpms2.
  • Mengupdate instance standby DPMS ke dpms1.
  • Buat lingkungan Cloud Composer baru di region B (us-east1).
  • Konfigurasikan lingkungan Cloud Composer dengan variabel lingkungan yang telah diperbarui.
  • Impor DAG Airflow dpms_dag yang sama seperti sebelumnya ke lingkungan Cloud Composer baru Anda.

Langkah-langkah yang diperlukan dalam daftar sebelumnya mengulangi banyak langkah dari bagian sebelumnya, hanya dengan penyesuaian kecil (seperti mengganti nama wilayah). Gunakan informasi di Opsi 2: Cloud Composer untuk menyelesaikan tugas wajib ini.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya

  • Pelajari cara memantau instance Dataproc Metastore
  • Pahami cara menyinkronkan metastore Hive dengan Data Catalog
  • Pelajari lebih lanjut cara mengembangkan layanan Cloud Run
  • Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.