JindoFS dalam E-MapReduce (EMR) 3.27.0 dan versi yang lebih baru mendukung Raft-RocksDB-Tablestore sebagai backend penyimpanan untuk Namespace Service-nya. Dalam kluster EMR JindoFS, tiga node master membentuk instans Raft, dan setiap peer node menggunakan RocksDB lokal untuk menyimpan metadata.
Prasyarat
-
Buat instans Tablestore. Disarankan menggunakan instans kinerja tinggi. Untuk informasi selengkapnya, lihat Aktifkan Tablestore dan buat instans.
CatatanAnda harus mengaktifkan fitur transaksi.
-
Buat kluster E-MapReduce dengan tiga node master. Untuk informasi selengkapnya, lihat Buat kluster. Saat membuat kluster, aktifkan High Availability dan pilih 3 Master untuk Deployment Mode.
Informasi latar belakang
RocksDB menggunakan protokol Raft untuk mereplikasi data di ketiga node master. Anda dapat mengikat kluster ke instans Tablestore, yang berfungsi sebagai backend penyimpanan tambahan untuk JindoFS Namespace Service. Metadata lokal disinkronkan secara asinkron ke instans Tablestore Anda.
Gambar berikut menunjukkan arsitektur ketersediaan tinggi yang menggunakan Raft, RocksDB, dan Tablestore untuk Namespace Service.
Konfigurasikan backend Raft lokal
-
Setelah membuat kluster EMR, hentikan semua layanan SmartData.
-
Masuk ke Alibaba Cloud EMR console.
-
Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya sesuai kebutuhan.
-
Klik tab Clusters.
-
Di halaman Clusters, temukan kluster target dan klik Details di kolom Actions.
-
Di panel navigasi kiri, pilih .
-
Di pojok kanan atas, pilih .
-
-
Tambahkan namespace sesuai kebutuhan.
-
Buka tab bigboot layanan SmartData.
-
Di panel navigasi kiri, pilih .
-
Klik tab Configure.
-
Di bagian Service Configuration, klik tab bigboot.
-
-
Di tab bigboot layanan SmartData, atur parameter berikut.
Parameter
Deskripsi
Contoh
namespace.backend.type
Backend penyimpanan untuk Namespace Service. Nilai yang valid:
-
rocksdb -
ots -
raft
Nilai default adalah
rocksdb.raftnamespace.backend.raft.initial-conf
Alamat tiga node master yang menjalankan instans Raft. Nilai ini bersifat tetap.
emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0jfs.namespace.server.rpc-address
Alamat akses klien untuk tiga node master dari instans Raft. Nilai ini bersifat tetap.
emr-header-1:8101,emr-header-2:8101,emr-header-3:8101 -
-
Opsional: Konfigurasikan Tablestore untuk penyimpanan asinkron remote.
Di tab bigboot layanan SmartData, atur parameter berikut.
Parameter
Deskripsi
Contoh
namespace.ots.instance
Nama instans Tablestore.
emr-jfsnamespace.ots.accessKey
ID AccessKey untuk instans Tablestore.
YourAccessKeyID
namespace.ots.accessSecret
Rahasia AccessKey untuk instans Tablestore.
YourAccessKeySecret
namespace.ots.endpoint
Titik akhir instans Tablestore. Untuk kluster EMR, disarankan menggunakan endpoint VPC.
http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.comnamespace.backend.raft.async.ots.enabled
Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:
-
true -
false
Jika Anda mengatur parameter ini ke
true, Anda harus mengaktifkan fitur ini sebelum layanan SmartData diinisialisasi.CatatanAnda tidak dapat mengaktifkan fitur ini setelah layanan diinisialisasi karena data di Tablestore akan lebih lama daripada data di RocksDB lokal.
true -
-
Simpan konfigurasi.
-
Di pojok kanan atas, klik Save.
-
Di kotak dialog Confirm, masukkan alasan perubahan dan aktifkan Auto-update Configuration.
-
Klik OK.
-
-
Di pojok kanan atas, pilih .
Pulihkan metadata dari Tablestore
Jika Anda mengaktifkan penyimpanan asinkron remote menggunakan Tablestore pada kluster asli, instans Tablestore berisi salinan lengkap metadata JindoFS. Setelah Anda menghentikan atau melepas kluster asli, Anda dapat memulihkan metadata tersebut ke kluster baru untuk melanjutkan akses ke file Anda.
-
Opsional: Lakukan pekerjaan persiapan.
-
Opsional: Kumpulkan statistik metadata (jumlah file dan folder) dari kluster asli.
[hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ (Jumlah folder) (Jumlah file) -
Hentikan semua pekerjaan di kluster asli dan tunggu 30 hingga 120 detik agar metadata tersinkronisasi sepenuhnya ke Tablestore. Jalankan perintah berikut untuk memeriksa status. Jika node LEADER menampilkan
_synced=1, data di Tablestore telah tersinkronisasi sepenuhnya.jindo jfs -metaStatus -detailBerikut adalah contoh output perintah.
state: LEADERmenunjukkan bahwa node Raft saat ini adalah node LEADER. Indeks log telah diperbarui ke 624625, dan semua replika telah tersinkronisasi.[RaftPeerImpl] peer_id: xxx state: LEADER readonly: 0 term: 2 conf_index: 1 peers: xxx changing_conf: NO stage: STAGE_NONE election_timer: timeout(5000ms) STOPPED vote_timer: timeout(5000ms) STOPPED stepdown_timer: timeout(5000ms) SCHEDULING(in 2335ms) snapshot_timer: timeout(3600000ms) SCHEDULING(in 150305ms) storage: [1, 624625] disk_index: 624625 known_applied_index: 624625 last_log_id: (index=624625,term=2) first_index_pinned: 624625 state_machine: Idle last_committed_index: 624625 last_snapshot_index: 0 last_snapshot_term: 0 snapshot_status: IDLE replicator_25769803789@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0 replicator_32985348833259@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=623564 ic=0 OtsUploader: _lastStopIndex=624624, _synced=1 -
Hentikan atau lepaskan kluster asli untuk memastikan tidak ada kluster lain yang mengakses instans Tablestore.
-
-
Buat kluster baru.
Buat kluster EMR baru di wilayah yang sama dengan instans Tablestore, lalu hentikan semua layanan SmartData. Untuk informasi selengkapnya, lihat Langkah 1 dalam Konfigurasikan backend Raft lokal.
-
Inisialisasi konfigurasi.
Di tab bigboot layanan SmartData, atur parameter berikut.
Parameter
Deskripsi
Contoh
namespace.backend.raft.async.ots.enabled
Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:
-
true -
false
falsenamespace.backend.raft.recovery.mode
Menentukan apakah akan mengaktifkan pemulihan metadata dari Tablestore. Nilai yang valid:
-
true -
false
true -
-
Simpan konfigurasi.
-
Di pojok kanan atas, klik Save.
-
Di kotak dialog Confirm, masukkan alasan perubahan dan aktifkan Auto-update Configuration.
-
Klik OK.
-
-
Di pojok kanan atas, pilih .
-
Setelah layanan SmartData di kluster baru dimulai, metadata secara otomatis dipulihkan dari Tablestore ke Raft-RocksDB lokal. Anda dapat menjalankan perintah berikut untuk memantau progres pemulihan.
jindo jfs -metaStatus -detailSetelah menjalankan perintah, pastikan bahwa
statedalam output adalah LEADER dan bahwastatedalam bagian[Recovery From OTS Status]adalah FINISH. Hal ini menunjukkan bahwa pemulihan telah selesai. Berikut adalah contoh output:[RaftPeerImpl] peer_id: xxx:8103:0 state: LEADER readonly: 0 term: 2 conf_index: 1 peers: xxx changing_conf: NO stage: STAGE_NONE election_timer: timeout(5000ms) STOPPED vote_timer: timeout(5000ms) STOPPED stepdown_timer: timeout(5000ms) SCHEDULING(in 3382ms) snapshot_timer: timeout(600000ms) SCHEDULING(in 474855ms) storage: [1, 153] disk_index: 153 known_applied_index: 153 last_log_id: (index=153,term=2) first_index_pinned: 1 state_machine: Idle last_committed_index: 153 last_snapshot_index: 1 last_snapshot_term: 2 snapshot_status: IDLE replicator_1116691496965@xxx: next_index=154 flying_append_entries_size=0 idle hc=262 ac=154 ic=0 replicator_3311419785217@xxx: next_index=154 flying_append_entries_size=0 idle hc=262 ac=154 ic=0 [Recovery From OTS Status] state: FINISH [Recovery From OTS Status] state: FINISH total rows: 1484409 table `jfs_block_test` 2 rows. table `jfs_namespace_cache_ns` 1 rows. table `jfs_namespace_test` 1484406 rows. -
Opsional: Verifikasi bahwa jumlah file di kluster baru konsisten dengan jumlah file di kluster asli.
Kluster saat ini berada dalam mode pemulihan read-only.
# Bandingkan jumlah file untuk memverifikasi konsistensinya dengan kluster asli. [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ # File dapat dibaca secara normal menggunakan perintah cat atau get. [hadoop@emr-header-1 ~]$ hadoop fs -cat jfs://test/testfile this is a test file # Lihat isi direktori. [hadoop@emr-header-1 ~]$ hadoop fs -ls jfs://test/ Found 3 items drwxrwxr-x - root root 0 2020-03-25 14:54 jfs://test/emr-header-1.cluster-50087 -rw-r----- 1 hadoop hadoop 5 2020-03-25 14:50 jfs://test/haha-12096RANDOM.txt -rw-r----- 1 hadoop hadoop 20 2020-03-25 15:07 jfs://test/testfile # File tidak dapat dimodifikasi karena kluster berada dalam mode read-only. [hadoop@emr-header-1 ~]$ hadoop fs -rm jfs://test/testfile java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only. -
Perbarui konfigurasi untuk mengalihkan kluster ke mode normal dan mengaktifkan unggah data asinkron ke Tablestore.
Di tab bigboot layanan SmartData, atur parameter berikut.
Parameter
Deskripsi
Contoh
namespace.backend.raft.async.ots.enabled
Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:
-
true -
false
truenamespace.backend.raft.recovery.mode
Menentukan apakah akan mengaktifkan pemulihan metadata dari Tablestore. Nilai yang valid:
-
true -
false
false -
-
Mulai ulang kluster.
-
Klik tab Clusters.
-
Di halaman Clusters, temukan kluster target dan pilih di kolom Actions.
-