Kluster ClickHouse yang dikelola sendiri sering mengalami ketidakstabilan, skalabilitas buruk, pemutakhiran sulit, dan pemulihan bencana lemah. Akibatnya, semakin banyak pelanggan memigrasikan kluster ClickHouse yang dikelola sendiri ke layanan cloud PaaS. Topik ini menjelaskan cara memigrasikan kluster ClickHouse yang dikelola sendiri ke kluster Edisi Kompatibel Komunitas ApsaraDB for ClickHouse.
Prasyarat
-
Kluster target:
-
Kluster tersebut merupakan Edisi Kompatibel Komunitas.
-
Anda memerlukan akun database dan kata sandi. Untuk membuat akun ClickHouse, lihat Mengelola akun untuk kluster Edisi Kompatibel Komunitas.
-
Akun tersebut harus memiliki izin tingkat tertinggi. Untuk memberikan izin, lihat Memodifikasi izin.
-
-
Kluster yang dikelola sendiri:
-
Anda memerlukan akun database dan kata sandi.
-
Akun tersebut harus memiliki izin baca pada database dan tabel, serta izin untuk menjalankan perintah SYSTEM.
-
-
Kluster target dan kluster yang dikelola sendiri harus dapat berkomunikasi melalui jaringan.
Jika kluster yang dikelola sendiri dan kluster target berada dalam VPC yang sama, Anda juga harus menambahkan alamat IP semua node di kluster target dan Blok CIDR IPv4 vSwitch-nya ke daftar putih kluster yang dikelola sendiri.
-
Untuk mengonfigurasi daftar putih kluster ApsaraDB for ClickHouse, lihat Mengonfigurasi daftar putih.
-
Untuk mengonfigurasi daftar putih di kluster yang dikelola sendiri, lihat dokumentasi produk terkait.
-
Untuk melihat alamat IP semua node di kluster ApsaraDB for ClickHouse, jalankan
SELECT * FROM system.clusters;. -
Untuk mendapatkan Blok CIDR IPv4 vSwitch kluster ApsaraDB for ClickHouse Anda, ikuti langkah-langkah berikut:
-
Di Konsol ApsaraDB for ClickHouse, buka halaman Cluster Information kluster target. Di bagian Network Information, dapatkan VSwitch ID.
-
Di daftar vSwitch, gunakan Instance ID untuk menemukan vSwitch target dan dapatkan IPv4 CIDR-nya.
-
Jika kluster yang dikelola sendiri dan kluster target berada dalam VPC berbeda, atau jika kluster yang dikelola sendiri berada di pusat data lokal atau platform cloud lain, Anda harus terlebih dahulu menetapkan konektivitas jaringan. Untuk informasi selengkapnya, lihat Bagaimana cara menetapkan koneksi jaringan antara kluster target dan sumber data?.
-
Validasi migrasi
Sebelum memulai migrasi data, kami sangat menyarankan membuat lingkungan pengujian untuk memvalidasi kompatibilitas bisnis, kinerja, dan rencana migrasi. Setelah validasi selesai, Anda dapat melakukan migrasi data di lingkungan produksi. Langkah penting ini membantu Anda mengidentifikasi dan menyelesaikan potensi masalah lebih awal, memastikan migrasi lancar dan mencegah gangguan pada lingkungan produksi.
-
Buat tugas migrasi untuk memigrasikan data. Untuk langkah-langkah detail, lihat topik ini.
-
Untuk informasi tentang kompatibilitas migrasi cloud, analisis bottleneck kinerja, dan memastikan keberhasilan migrasi, lihat Analisis dan Solusi untuk Bottleneck Kompatibilitas dan Kinerja dalam Migrasi ClickHouse yang Dikelola Sendiri ke Cloud.
Pilih solusi
|
Solusi migrasi |
Kelebihan |
Kekurangan |
Kasus penggunaan |
|
Menyediakan antarmuka visual. Anda tidak perlu memigrasikan metadata secara manual. |
Hanya mendukung migrasi penuh dan inkremental seluruh kluster. Anda tidak dapat memigrasikan database, tabel, atau data historis tertentu. |
Memigrasikan seluruh kluster. |
|
|
Memungkinkan Anda mengontrol database dan tabel mana yang akan dimigrasikan. |
Melibatkan langkah-langkah kompleks dan migrasi metadata manual. |
|
Prosedur
Migrasi konsol
Batasan
Kluster tujuan harus menjalankan versi 21.8 atau lebih baru.
Catatan
Selama migrasi
-
Selama migrasi, proses merge dijeda di kluster tujuan tetapi berlanjut di kluster yang dikelola sendiri.
CatatanJika tugas migrasi berjalan lama, metadata berlebihan dapat menumpuk di kluster tujuan. Kami menyarankan agar durasi tugas migrasi tidak melebihi 5 hari. Tugas yang melebihi 5 hari akan dibatalkan secara otomatis.
-
Kluster tujuan harus berupa kluster
default. Jika kluster yang dikelola sendiri menggunakan nama berbeda, layanan secara otomatis mengonversi definisiclusterdi tabel terdistribusi menjadidefault.
Lingkup migrasi
-
Objek yang didukung
-
Database, kamus data, dan tampilan materialisasi.
-
Layanan ini mendukung migrasi kamus data yang dibuat dengan SQL, tetapi tidak yang dibuat dengan XML.
Untuk memverifikasi hal ini, jalankan pernyataan berikut:
SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Jika pernyataan tersebut mengembalikan baris apa pun, ini menunjukkan Anda memiliki kamus data yang dibuat menggunakan XML. -
Saat kamus data mengakses layanan eksternal, pastikan layanan eksternal tersedia dan kluster ditambahkan ke daftar izinnya. Jika sumber data untuk kamus data adalah tabel internal di kluster ClickHouse saat ini dan parameter
HOSTdalam definisinya adalah alamat IP, akses ke kamus tersebut dapat gagal setelah migrasi karena perubahan alamat IP. Anda harus mengonfirmasi ulangHOSTkluster ClickHouse saat ini dan membuat manual kamus data tersebut.
-
-
Skema tabel: Semua skema tabel kecuali tabel mesin Kafka dan RabbitMQ.
-
Data: Migrasi inkremental data dari tabel keluarga MergeTree.
-
-
Objek dan data yang tidak didukung
-
Tabel mesin Kafka dan RabbitMQ, serta datanya.
-
Data dari tabel non-MergeTree, seperti tabel eksternal dan tabel Log.
PentingAnda harus memigrasikan item yang tidak didukung di atas secara manual.
-
-
Batasan volume data
-
Data dingin: Memigrasikan data dingin lambat. Untuk mencegah kegagalan akibat waktu migrasi lama, kami menyarankan membersihkan data dingin dari kluster yang dikelola sendiri agar volume total tidak melebihi 1 TB.
-
Data panas: Jika volume data panas melebihi 10 TB, tugas migrasi kemungkinan besar akan gagal.
Jika volume data Anda melebihi batasan ini, pertimbangkan menggunakan solusi migrasi manual.
-
Dampak pada kluster
-
Kluster yang dikelola sendiri:
-
Membaca data dari kluster yang dikelola sendiri meningkatkan penggunaan CPU dan memori.
-
Operasi DDL tidak diizinkan.
-
-
Kluster tujuan:
-
Menulis data ke kluster tujuan meningkatkan penggunaan CPU dan memori.
-
Operasi DDL tidak diizinkan pada database dan tabel yang sedang dimigrasikan.
-
Pembatasan ini tidak berlaku untuk database dan tabel lain.
-
Proses merge hanya dihentikan untuk database dan tabel yang sedang dimigrasikan.
-
Kluster melakukan restart sebelum tugas migrasi dimulai.
-
Setelah migrasi selesai, kluster melakukan operasi merge secara intensif. Hal ini meningkatkan penggunaan I/O dan dapat menyebabkan latensi permintaan bisnis lebih tinggi. Rencanakan dampak potensial dari peningkatan latensi ini. Anda harus menghitung durasi spesifik operasi merge. Untuk petunjuknya, lihat Menghitung waktu merge setelah migrasi.
-
Prosedur
Langkah 1: Periksa kluster dan aktifkan tabel sistem
Sebelum memigrasikan data, modifikasi file config.xml di kluster yang dikelola sendiri untuk mengaktifkan migrasi inkremental. Modifikasi yang diperlukan bergantung pada apakah tabel system.part_log dan system.query_log diaktifkan.
Jika tabel sistem tidak diaktifkan
Jika Anda belum mengaktifkan system.part_log dan system.query_log, tambahkan konfigurasi berikut ke file config.xml.
system.part_log
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
system.query_log
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
Jika tabel sistem diaktifkan
-
Pastikan konfigurasi
system.part_logdansystem.query_logdalam file config.xml sesuai dengan konten berikut. Ketidakkonsistenan dapat menyebabkan migrasi data gagal atau berjalan lambat.system.part_log
<part_log> <database>system</database> <table>part_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </part_log>system.query_log
<query_log> <database>system</database> <table>query_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log> -
Setelah memodifikasi konfigurasi, jalankan pernyataan
drop table system.part_logdandrop table system.query_log. Menyisipkan data ke tabel bisnis secara otomatis membuat ulang tabelsystem.part_logdansystem.query_log.
Langkah 2: Konfigurasi kompatibilitas kluster tujuan
Konfigurasikan kluster tujuan agar kompatibel dengan kluster yang dikelola sendiri. Langkah ini meminimalkan perubahan aplikasi yang diperlukan setelah migrasi.
-
Dapatkan dan bandingkan nomor versi kluster tujuan dan kluster yang dikelola sendiri.
Login ke kluster tujuan dan kluster yang dikelola sendiri, lalu jalankan pernyataan berikut pada masing-masing untuk mendapatkan nomor versinya. Untuk informasi lebih lanjut tentang cara login ke ApsaraDB for ClickHouse, lihat Menghubungkan ke database.
SELECT version(); -
Jika versinya berbeda, login ke kluster tujuan dan atur parameter kompatibilitas agar sesuai dengan versi kluster yang dikelola sendiri. Hal ini memastikan fitur-fiturnya konsisten sebisa mungkin. Berikut contohnya:
SET GLOBAL compatibility = '22.8';
Langkah 3: (Opsional) Aktifkan MaterializedMySQL engine
Jika kluster yang dikelola sendiri Anda berisi tabel yang menggunakan mesin MaterializedMySQL, jalankan pernyataan berikut untuk mengaktifkan mesin ini.
SET GLOBAL allow_experimental_database_materialized_mysql = 1;
Komunitas ClickHouse tidak lagi memelihara mesin MaterializedMySQL. Setelah migrasi ke cloud, kami menyarankan menggunakan Data Transmission Service (DTS) untuk menyinkronkan data MySQL.
Karena mesin MaterializedMySQL tidak dipelihara, Data Transmission Service (DTS) menggunakan tabel ReplacingMergeTree sebagai ganti tabel MaterializedMySQL saat menyinkronkan data MySQL ke ApsaraDB for ClickHouse. Untuk informasi lebih lanjut, lihat Kompatibilitas MaterializedMySQL.
Untuk informasi lebih lanjut tentang penggunaan DTS untuk memigrasikan data MySQL ke ApsaraDB for ClickHouse, lihat topik berikut:
Langkah 4: Catat dan bersihkan tabel mesin Kafka/RabbitMQ
Sebelum memulai migrasi, catat definisi semua tabel mesin Kafka/RabbitMQ dan tampilan materialisasi downstream-nya di kluster yang dikelola sendiri, tangani tabel implisit, lalu hapus tabel-tabel ini untuk menghindari kesalahan migrasi.
-
Login ke kluster yang dikelola sendiri dan kueri semua tabel mesin Kafka dan RabbitMQ beserta dependensi downstream-nya.
/* create_table_query: definisi tabel dependencies_database: database tabel yang bergantung pada tabel ini dependencies_table: tabel yang bergantung pada tabel ini Dari dependencies_database dan dependencies_table, Anda dapat mengidentifikasi tampilan materialisasi yang bergantung pada tabel Kafka/RabbitMQ */ SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka'); -
Lihat definisi tampilan materialisasi untuk memeriksa apakah tabel targetnya adalah tabel implisit.
/* Lihat definisi tampilan materialisasi. Jika tabel target tampilan materialisasi adalah tabel implisit, beri perhatian khusus: Menghapus tampilan materialisasi juga akan menghapus tabel implisit, menyebabkan kehilangan data. Contoh: Jika CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] tidak menentukan TO, sistem secara otomatis membuat tabel implisit, mungkin dalam format '.inner_id.<TABLE_UUID>' atau '.inner.<TABLE>' */ SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>'; -
Jika tabel target tampilan materialisasi adalah tabel implisit, RENAME tabel target ke nama baru untuk mencegah kehilangan data saat tampilan materialisasi di-drop nanti.
-- Ganti nama tabel target implisit ke nama baru untuk melindungi data RENAME TABLE <DATABASE>.`.inner_id.<TABLE_UUID>` TO <DATABASE>.<new_target_table_name>; -
Hapus tabel mesin Kafka/RabbitMQ dan tampilan materialisasi downstream-nya.
-- Drop tampilan materialisasi terlebih dahulu DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- Lalu drop tabel mesin Kafka/RabbitMQ DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Pastikan menyimpan semua pernyataan DDL yang dicatat. Anda akan membutuhkannya untuk membangun ulang tabel-tabel ini di kluster yang dikelola sendiri dan kluster tujuan nanti. Jika Anda melakukan operasi RENAME, gunakan klausa TO yang mengarah ke tabel target yang diganti namanya saat membangun ulang tampilan materialisasi. Untuk informasi lebih lanjut, lihat CREATE MATERIALIZED VIEW.
Langkah 5: Buat tugas migrasi data
-
Login ke Konsol ApsaraDB for ClickHouse.
-
Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster tujuan.
-
Di panel navigasi kiri, pilih .
-
Di halaman tugas migrasi, klik Create Migration Task.
-
Konfigurasikan instans sumber dan tujuan.
Konfigurasikan pengaturan berikut dan klik Test Connectivity and Proceed.
CatatanJika pengujian koneksi berhasil, lanjutkan ke langkah berikutnya. Jika pengujian koneksi gagal, konfigurasi ulang instans sumber dan tujuan berdasarkan petunjuk.
Parameter kluster sumber
Parameter
Deskripsi
Contoh
Source Access Method
Pilih Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance.
Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance
Cluster Name
Nama kluster sumber.
Nama hanya boleh berisi angka dan huruf kecil.
source
Source Cluster Name
Jalankan
SELECT * FROM system.clusters;untuk mendapatkan Source Cluster Name.default
VPC IP Address
Alamat IP dan PORT (alamat TCP) setiap shard di kluster, dipisahkan koma.
PentingAnda tidak dapat menggunakan nama domain VPC atau alamat SLB kluster ApsaraDB for ClickHouse.
Format:
IP:PORT,IP:PORT,......Metode untuk mendapatkan alamat IP dan PORT kluster bervariasi tergantung skenario migrasi data.
Migrasi lintas akun atau lintas wilayah
Anda dapat menggunakan pernyataan SQL berikut untuk mendapatkan alamat IP dan PORT kluster yang dikelola sendiri:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = 'default' and replica_num = 1;Di sini,
replica_num=1memilih set replika pertama. Anda juga dapat memilih set replika lain atau memilih satu replika dari setiap shard.Migrasi ClickHouse non-Alibaba Cloud
Jika alamat IP tidak dapat dengan mudah dipetakan ke Alibaba Cloud, Anda dapat menggunakan pernyataan SQL berikut untuk mendapatkan alamat IP dan PORT kluster yang dikelola sendiri:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;Parameter dijelaskan sebagai berikut:
-
cluster_name: nama kluster tujuan.
-
replica_num=1memilih set replika pertama. Anda juga dapat memilih set replika lain atau memilih satu replika dari setiap shard.
Jika alamat IP dan port dipetakan ke Alibaba Cloud melalui terjemahan jaringan, Anda harus mengonfigurasi alamat IP dan port yang dipetakan sesuai.
192.168.0.5:9000,192.168.0.6:9000
Database Account
Akun database kluster sumber.
test
Database Password
Kata sandi untuk akun database kluster sumber.
test******
Parameter kluster tujuan
Parameter
Deskripsi
Contoh
Database Account
Akun database kluster tujuan.
test
Database Password
Kata sandi untuk akun database kluster tujuan.
test******
-
-
Konfirmasi konten migrasi.
Tinjau dengan cermat informasi tentang data yang akan dimigrasikan di halaman, lalu klik Next: Pre-detect and Start Synchronization.
-
Sistem menjalankan pemeriksaan awal pada tautan migrasi di latar belakang dan memulai tugas.
Sistem menjalankan Instance Status Detection, Storage Space Detection, dan Local Table and Distributed Table Detection pada kluster sumber dan tujuan.
-
Jika pemeriksaan awal berhasil:
Setelah pemeriksaan awal berhasil, halaman menunjukkan bahwa tiga pemeriksaan telah lulus: Instance status check, Storage space check, dan Local table and distributed table check. Bagian atas halaman menunjukkan perkiraan waktu migrasi 2 menit, dan menjelaskan dampak selama migrasi:
-
Instans sumber dapat dibaca dan ditulis tetapi operasi DDL tidak dapat dilakukan.
-
Instans tujuan dapat dibaca tetapi tabel yang dimigrasikan tidak dapat ditulis.
-
Saat waktu tersisa kurang dari 10 menit, Anda harus berhenti menulis untuk memicu akhir migrasi.
-
Tabel non-MergeTree hanya menyimpan struktur tabel tanpa migrasi data setelah penskalaan.
-
Tinjau dengan cermat bagaimana proses migrasi data memengaruhi instans.
-
Klik Completed.
Penting-
Setelah Anda mengklik Selesai, sistem membuat dan memulai tugas, dan statusnya berubah menjadi Berjalan. Anda dapat melihat tugas di daftar tugas.
-
Setelah membuat tugas, Anda harus memantaunya. Di tahap akhir migrasi, Anda harus menghentikan operasi tulis ke kluster yang dikelola sendiri dan memigrasikan skema database dan tabel yang tersisa. Untuk informasi lebih lanjut, lihat Pantau tugas migrasi dan hentikan penulisan ke kluster yang dikelola sendiri.
-
-
-
Jika pemeriksaan awal gagal: Ikuti petunjuk dalam pesan kesalahan dan jalankan kembali tugas migrasi data. Tabel berikut menjelaskan item pemeriksaan awal dan persyaratannya. Untuk informasi lebih lanjut tentang pesan kesalahan pemeriksaan awal dan solusinya, lihat Kesalahan pemeriksaan awal migrasi dan solusinya.
Item pemeriksaan
Persyaratan
Instance Status Detection
Tugas migrasi data tidak dapat dimulai jika tugas manajemen (seperti skala-keluar, upgrade, atau downgrade) sedang berjalan di kluster sumber atau tujuan.
Storage Space Detection
Ruang penyimpanan tersedia kluster tujuan harus minimal 1,2 kali ruang penyimpanan yang digunakan kluster yang dikelola sendiri.
Local Table and Distributed Table Detection
Jika tabel lokal di kluster yang dikelola sendiri tidak memiliki tabel terdistribusi yang sesuai atau memiliki lebih dari satu tabel terdistribusi, pemeriksaan gagal. Untuk mengatasinya, hapus tabel terdistribusi yang berlebihan atau buat tabel terdistribusi unik untuk tabel lokal tersebut.
-
-
Langkah 6: Evaluasi kelayakan migrasi
Jika kecepatan tulis kluster sumber kurang dari 20 MB/detik, Anda dapat melewati langkah ini.
Jika kecepatan tulis kluster sumber lebih dari 20 MB/detik, Anda harus memeriksa kecepatan tulis aktual kluster tujuan untuk mengevaluasi kelayakan migrasi. Migrasi yang berhasil memerlukan kecepatan tulis kluster tujuan yang mampu mengimbangi kluster sumber. Ikuti langkah-langkah berikut:
-
Lihat TairPDBShardingIOBandwidth kluster tujuan untuk menentukan kecepatan tulis aktualnya. Untuk informasi tentang cara melihat TairPDBShardingIOBandwidth, lihat Melihat data pemantauan kluster.
-
Bandingkan kecepatan tulis kluster tujuan dan sumber.
-
Jika kecepatan tulis kluster tujuan lebih besar dari kluster sumber: Migrasi kemungkinan berhasil. Lanjutkan ke Langkah 7.
-
Jika kecepatan tulis kluster tujuan kurang dari kluster sumber: Migrasi kemungkinan gagal. Kami menyarankan Anda membatalkan tugas migrasi dan menggunakan migrasi manual.
-
Langkah 7: Pantau migrasi dan hentikan penulisan
-
Login ke Konsol ApsaraDB for ClickHouse.
-
Di daftar Instans Edisi Komunitas, klik ID kluster tujuan.
-
Di panel navigasi, klik .
-
Di halaman daftar migrasi instans, Anda dapat:
-
Menampilkan status dan tahap berjalan tugas migrasi.
Penting-
Saat tahap berjalan mencapai Migrasi Data (yaitu, migrasi skema telah selesai), segera lanjutkan ke Langkah 8 untuk membangun kembali tabel engine Kafka/RabbitMQ di kluster yang dikelola sendiri dan melanjutkan ingesti data inkremental.
-
Pantau dengan cermat Running Information tugas target. Berdasarkan perkiraan waktu tersisa di kolom Running Information, ikuti Langkah 9 untuk menghentikan penulisan ke kluster yang dikelola sendiri dan menangani tabel Kafka dan RabbitMQ.
-
-
Di kolom Tindakan, klik View Details untuk membuka halaman detail tugas. Halaman detail tugas berisi informasi berikut:
CatatanJika tugas migrasi selesai (statusnya Completed atau Canceled), konten di halaman Lihat Detail dihapus. Anda dapat melihat daftar skema tabel yang dimigrasikan di kluster tujuan dengan menjalankan pernyataan SQL berikut:
SELECT `database`, `name`, `engine_full` FROM `system`.`tables` WHERE `database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema');-
Semua skema tabel yang dimigrasikan dan status migrasinya.
-
Semua skema database yang dimigrasikan dan status migrasinya.
-
Semua pesan kesalahan untuk migrasi database dan tabel yang gagal.
-
Tabel berikut menjelaskan status tugas migrasi.
Status tugas
Deskripsi
Running
Menyiapkan lingkungan dan resource untuk migrasi.
Initializing
Menginisialisasi tugas migrasi.
Configuration Migration
Memigrasikan konfigurasi kluster.
Schema Migration
Memigrasikan semua database, tabel keluarga MergeTree, dan tabel Distributed.
Data Migration
Memigrasikan data inkremental dari tabel keluarga MergeTree.
Other Schema Migration
Memigrasikan skema tampilan materialisasi dan tabel non-MergeTree.
Data Check
Memeriksa apakah volume data tabel yang selesai di kluster tujuan konsisten dengan volume data di kluster yang dikelola sendiri. Jika tidak konsisten, tugas mungkin gagal. Kami menyarankan Anda memulai ulang migrasi.
Post-migration Configuration
Mengonfigurasi pengaturan sistem untuk kluster tujuan, seperti membersihkan resource migrasi dan mengaktifkan kembali penulisan ke instans sumber.
Completed
Tugas migrasi selesai.
Canceled
Tugas migrasi dibatalkan.
-
Langkah 8: Bangun ulang tabel mesin Kafka/RabbitMQ di kluster yang dikelola sendiri
Setelah tugas migrasi memasuki fase migrasi data (yaitu, migrasi skema tabel selesai), gunakan pernyataan DDL yang disimpan sebelumnya untuk membangun ulang tabel mesin Kafka/RabbitMQ dan tampilan materialisasi downstream-nya di kluster yang dikelola sendiri. Setelah dibangun ulang, data inkremental kembali mengalir dan secara otomatis disinkronkan ke kluster tujuan.
Jika Anda melakukan operasi RENAME pada tabel target implisit sebelumnya, gunakan klausa TO yang mengarah ke tabel target yang diganti namanya saat membangun ulang tampilan materialisasi.
-- Bangun ulang tabel mesin Kafka/RabbitMQ di kluster yang dikelola sendiri
CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Bangun ulang tampilan materialisasi (mengarah ke tabel target yang diganti namanya)
CREATE MATERIALIZED VIEW <DATABASE>.<MATERIALIZED_VIEW_NAME> TO <DATABASE>.<new_target_table_name>
AS SELECT ... FROM <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Langkah 9: Hentikan penulisan dan lakukan cutover
Saat perkiraan waktu migrasi tersisa kurang dari 10 menit atau progres migrasi mencapai 99%, lakukan langkah cutover berikut:
-
Hentikan penulisan bisnis. Di kluster yang dikelola sendiri, hapus tabel mesin Kafka/RabbitMQ yang dibangun ulang sebelumnya dan tampilan materialisasi downstream-nya.
-- Drop tampilan materialisasi terlebih dahulu DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- Lalu drop tabel mesin Kafka/RabbitMQ DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>; -
Tunggu hingga progres migrasi mencapai 100% dan migrasi selesai sepenuhnya.
-
Hubungkan ke kluster tujuan dan gunakan pernyataan DDL yang disimpan sebelumnya untuk membangun ulang tabel mesin Kafka/RabbitMQ dan tampilan materialisasi downstream-nya.
PentingJika Anda melakukan operasi RENAME pada tabel target implisit sebelumnya, gunakan klausa TO yang mengarah ke tabel target yang diganti namanya saat membangun ulang tampilan materialisasi.
-- Bangun ulang tabel mesin Kafka/RabbitMQ di kluster tujuan CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...) ENGINE = Kafka/RabbitMQ SETTINGS ...;-- Bangun ulang tampilan materialisasi (mengarah ke tabel target yang diganti namanya) CREATE MATERIALIZED VIEW <DATABASE>.<MATERIALIZED_VIEW_NAME> TO <DATABASE>.<new_target_table_name> AS SELECT ... FROM <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>; -
Verifikasi bahwa pipa data di kluster tujuan berfungsi dengan baik dan data mengalir secara normal.
Langkah 10: Selesaikan migrasi
Setelah menghentikan penulisan ke kluster yang dikelola sendiri, Anda dapat Complete the task. Langkah ini memigrasikan data yang tersisa, melakukan pemeriksaan volume data, dan memigrasikan skema database dan tabel yang tersisa. Anda dapat melihat konten yang dimigrasikan di detail tugas.
-
Jika pemeriksaan data gagal, tugas migrasi tetap berada di fase pemeriksaan volume data. Kami menyarankan membatalkan migrasi dan membuat tugas migrasi baru. Untuk informasi lebih lanjut tentang pembatalan tugas migrasi, lihat Operasi lainnya.
-
Migrasi data yang lama dapat menyebabkan akumulasi metadata berlebihan di kluster tujuan. Kami menyarankan agar durasi tugas migrasi tidak melebihi 5 hari. Tugas yang melebihi 5 hari akan dibatalkan secara otomatis.
-
Login ke Konsol ApsaraDB for ClickHouse.
-
Di halaman Clusters, pilih Clusters of Community-compatible Edition, lalu klik ID kluster tujuan.
-
Di panel navigasi kiri, klik .
-
Untuk tugas migrasi target, klik Complete Migration di kolom Actions.
-
Di kotak dialog Complete Migration, klik OK.
Langkah 11: Migrasikan data untuk tabel non-MergeTree
Tugas migrasi hanya memigrasikan skema tabel non-MergeTree (seperti tabel eksternal dan tabel Log), membuatnya di kluster tujuan tanpa data bisnis apa pun. Anda harus memigrasikan data bisnis secara manual. Ikuti langkah-langkah berikut:
-
Login ke kluster yang dikelola sendiri dan jalankan pernyataan berikut untuk mengidentifikasi tabel non-MergeTree yang memerlukan migrasi data.
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') )) -
Login ke kluster tujuan dan gunakan fungsi
remoteuntuk memigrasikan data tabel. Untuk petunjuk detail, lihat Migrasi data menggunakan fungsi remote.
Operasi lainnya
Saat tugas migrasi selesai, Migration Status berubah menjadi Completed. Daftar tugas tidak segera diperbarui, jadi segarkan halaman secara berkala untuk melihat status terbaru.
|
Tindakan |
Deskripsi |
Dampak |
Skenario |
|
Cancel Migration |
Membatalkan paksa tugas dan melewatkan pemeriksaan volume data, tanpa memigrasikan skema database dan tabel yang tersisa. |
|
Gunakan opsi ini saat migrasi berdampak buruk pada kluster yang dikelola sendiri dan Anda perlu segera mengembalikan operasi tulis. |
|
Stop Migration |
Menghentikan migrasi data segera tetapi menyelesaikan migrasi skema database dan tabel yang tersisa. Pemeriksaan volume data dilewati. |
Migrasi data tidak akan lengkap, tetapi skema database dan tabel di instans tujuan akan lengkap. |
Gunakan opsi ini untuk menguji dataset yang sebagian dimigrasikan tanpa mengganggu operasi tulis ke kluster yang dikelola sendiri. |
Hentikan migrasi
-
Login ke Konsol ApsaraDB for ClickHouse.
-
Di halaman Clusters, pilih Clusters of Community-compatible Edition, lalu klik ID kluster target.
-
Di panel navigasi kiri, pilih .
-
Di kolom Actions untuk tugas migrasi target, klik Stop Migration.
-
Di kotak dialog Stop Migration, klik OK.
Batalkan migrasi
-
Login ke Konsol ApsaraDB for ClickHouse.
-
Di halaman Clusters, pilih Clusters of Community-compatible Edition, lalu klik ID kluster target.
-
Di panel navigasi kiri, pilih .
-
Di kolom Actions untuk tugas migrasi target, klik Cancel Migration.
-
Di kotak dialog Cancel Migration, klik OK.
Migrasi manual
Metode 1: Gunakan perintah BACKUP dan RESTORE
Untuk informasi lebih lanjut, lihat Gunakan perintah BACKUP dan RESTORE untuk backup dan restore data.
Metode 2: Gunakan pernyataan INSERT FROM SELECT
Langkah 1: Migrasi metadata
Memigrasikan metadata ClickHouse terutama tentang memigrasikan DDL pembuatan tabel.
Jika Anda perlu menginstal tool clickhouse-client, pastikan versinya sesuai dengan instans ApsaraDB for ClickHouse tujuan. Anda dapat menemukan tautan unduhan di clickhouse-client.
-
Lihat daftar database di kluster yang dikelola sendiri.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases" > database.listParameter:
Parameter
Deskripsi
old host
Alamat kluster yang dikelola sendiri.
old port
Port kluster yang dikelola sendiri.
old user name
Akun yang digunakan untuk login ke kluster yang dikelola sendiri. Akun harus memiliki izin baca/tulis DML, izin pengaturan, dan izin DDL.
old password
Kata sandi untuk akun tersebut.
CatatanDatabase
systemadalah database sistem dan tidak perlu dimigrasikan. Filter database ini. -
Lihat daftar tabel di kluster yang dikelola sendiri.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>" > table.listParameter:
Parameter
Deskripsi
database_name
Nama database.
Atau, Anda dapat langsung mengkueri semua nama database dan tabel dari tabel sistem.
SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';CatatanJika nama tabel yang dikueri diawali dengan
.inner., itu adalah representasi internal tampilan materialisasi dan tidak perlu dimigrasikan. Filter tabel ini. -
Ekspor DDL pembuatan tabel untuk semua tabel dalam database tertentu dari kluster yang dikelola sendiri.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SELECT concat(create_table_query, ';') FROM system.tables WHERE database='<database_name>' FORMAT TabSeparatedRaw" > tables.sql -
Impor DDL pembuatan tabel ke instans ApsaraDB for ClickHouse tujuan.
CatatanSebelum mengimpor DDL pembuatan tabel, Anda harus membuat database yang sesuai di instans ApsaraDB for ClickHouse.
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" -d '<database_name>' --multiquery < tables.sqlParameter:
Parameter
Deskripsi
new host
Alamat instans ApsaraDB for ClickHouse tujuan.
new port
Port instans ApsaraDB for ClickHouse tujuan.
new user name
Akun yang digunakan untuk login ke instans ApsaraDB for ClickHouse tujuan. Akun harus memiliki izin baca/tulis DML, izin pengaturan, dan izin DDL.
new password
Kata sandi untuk akun tersebut.
Langkah 2: Migrasi data
Fungsi remote
-
-
Di instans ApsaraDB for ClickHouse tujuan, jalankan pernyataan SQL berikut untuk memigrasikan data.
INSERT INTO <new_database>.<new_table> SELECT * FROM remote('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;CatatanUntuk versi 20.8, pertama gunakan fungsi
remoteRawuntuk migrasi data. Jika migrasi gagal, Anda dapat meminta upgrade versi minor.INSERT INTO <new_database>.<new_table> SELECT * FROM remoteRaw('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;Parameter:
PentingGunakan parameter
_partition_iduntuk memfilter data. Ini mengurangi penggunaan resource.Parameter
Deskripsi
new_database
Nama database di instans ApsaraDB for ClickHouse tujuan.
new_table
Nama tabel di instans ApsaraDB for ClickHouse tujuan.
old_endpoint
Titik akhir instans sumber.
ClickHouse yang dikelola sendiri
Format titik akhir:
Alamat IP node instans sumber:port.PentingPort harus port TCP.
ApsaraDB for ClickHouse
Gunakan titik akhir internal VPC instans sumber, bukan titik akhir publik.
PentingPort 3306 dan 9000 adalah nilai tetap.
-
Instans Edisi Komunitas:
-
Format titik akhir:
Alamat internal VPC:3306. -
Contoh:
cc-2zeqhh5v7y6q*****.clickhouse.ads.aliyuncs.com:3306
-
-
Instans Perusahaan:
-
Format titik akhir:
Alamat internal VPC:9000. -
Contoh:
cc-bp1anv7jo84ta*****clickhouse.clickhouseserver.rds.aliyuncs.com:9000
-
old_database
Nama database kluster yang dikelola sendiri.
old_table
Nama tabel kluster yang dikelola sendiri.
username
Akun untuk kluster yang dikelola sendiri.
password
Kata sandi untuk akun kluster yang dikelola sendiri.
max_execution_time
Waktu eksekusi maksimum untuk kueri. Atur ke 0 untuk tanpa batas waktu.
max_bytes_to_read
Jumlah byte maksimum yang dapat dibaca kueri dari data sumber. Atur ke 0 untuk tanpa batas.
log_query_threads
Menentukan apakah akan mencatat informasi thread selama eksekusi kueri. Atur ke 0 untuk menonaktifkan pencatatan.
max_result_rows
Jumlah baris maksimum dalam hasil kueri. Atur ke 0 untuk tanpa batas.
min_insert_block_size_rows
Jumlah baris minimum per bagian data dalam satu penulisan. Atur ke 4294967296 (maksimum) untuk menonaktifkan batas baris. Pengaturan ini bekerja bersama min_insert_block_size_bytes untuk mencegah part kecil berlebihan.
min_insert_block_size_bytes
Ukuran minimum dalam byte per bagian data dalam satu penulisan. Atur ke 1073741824 (1 GB) untuk mencegah part kecil berlebihan dan menghindari kesalahan "Too many partitions for a single INSERT block".
_partition_id
ID partisi data.
-
Ekspor dan impor file
Ekspor data dari database kluster yang dikelola sendiri ke file, lalu impor file tersebut ke instans ApsaraDB for ClickHouse tujuan.
-
Ekspor dan impor CSV
-
Ekspor data dari database kluster yang dikelola sendiri ke file CSV.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="select * from <database_name>.<table_name> FORMAT CSV" > table.csv -
Impor file CSV ke instans ApsaraDB for ClickHouse tujuan.
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" --query="insert into <database_name>.<table_name> FORMAT CSV" < table.csv
-
-
Stream dengan pipe Linux
clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>" --query="select * from <database_name>.<table_name> FORMAT CSV" | clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>" --query="INSERT INTO <database_name>.<table_name> FORMAT CSV"
Kesalahan pemeriksaan migrasi dan solusinya
|
Pesan kesalahan |
Deskripsi |
Solusi |
|
Missing unique distributed table or sharding_key not set. |
|
Buat |
|
The corresponding distributed table is not unique. |
|
Hapus |
|
MergeTree table on a multi-replica cluster. |
|
|
|
Data reserved table on destination cluster. |
Tabel yang akan dimigrasikan sudah ada dan berisi data di |
Hapus tabel yang sesuai dari |
|
Columns of distributed table and local table conflict |
Kolom |
Bangun ulang |
|
Insufficient storage space. |
|
Tingkatkan |
|
Missing system table. |
|
Modifikasi file konfigurasi |
|
The table is incomplete across different nodes. |
Tabel tidak ada di beberapa |
Buat tabel dengan nama yang sama di |
Menghitung waktu merge pasca-migrasi
Setelah migrasi, kluster tujuan sementara melakukan operasi merge secara intensif. Hal ini meningkatkan penggunaan I/O dan dapat menyebabkan latensi lebih tinggi untuk permintaan layanan. Jika layanan Anda sensitif terhadap latensi baca dan tulis, pertimbangkan untuk meningkatkan tipe instans dan tingkat performa ESSD untuk memperpendek periode penggunaan I/O tinggi ini. Untuk informasi lebih lanjut, lihat Penskalaan vertikal, skala-keluar, dan skala-masuk kluster kompatibel komunitas.
Gunakan rumus berikut untuk menghitung waktu merge setelah migrasi:
Rumus ini berlaku untuk kluster single-replika maupun master-replika.
-
Perkiraan total waktu untuk operasi merge intensif =
MAX(waktu merge data panas, waktu merge data dingin)-
Waktu merge data panas =
jumlah data panas pada satu node * 2 / MIN(bandwidth tipe instans, bandwidth disk * n) -
Waktu merge data dingin =
(jumlah data dingin / jumlah node) / MIN(bandwidth tipe instans, bandwidth baca OSS) + (jumlah data dingin / jumlah node) / MIN(bandwidth tipe instans, bandwidth tulis OSS)
-
Daftar berikut menjelaskan parameter yang digunakan dalam rumus:
-
Jumlah data panas pada satu node: Anda dapat melihat nilai ini di baris Disk Usage - Single-Node Statistics. Untuk informasi lebih lanjut, lihat Melihat informasi pemantauan kluster.
-
Bandwidth tipe instans
CatatanNilai bandwidth ini tidak mutlak dan bervariasi tergantung jenis mesin yang digunakan oleh backend ApsaraDB for ClickHouse. Nilai yang diberikan adalah minimum dan hanya untuk referensi.
Spesifikasi
Bandwidth (MB/s)
Standard 8-core 32 GB
250
Standard 16-core 64 GB
375
Standard 24-core 96 GB
500
Standard 32-core 128 GB
625
Standard 64-core 256 GB
1250
Standard 80-core 384 GB
2000
Standard 104-core 384 GB
2000
-
Bandwidth disk: Temukan nilai ini di baris Throughput maksimum per disk (MB/detik) pada tabel Tingkat performa ESSD.
-
n: Jumlah disk pada satu node. Jalankan perintah berikut untuk mendapatkan nilai ini:
SELECT count() FROM system.disks WHERE type = 'local'; -
Jumlah data dingin: Anda dapat melihat nilai ini di baris clickhouse_cold_storage_data. Untuk informasi lebih lanjut, lihat Melihat informasi pemantauan kluster.
-
Jumlah node: Jumlah node dalam kluster. Jalankan perintah berikut untuk mendapatkan nilai ini:
SELECT count() FROM system.clusters WHERE cluster = 'default' and replica_num=1; -
Bandwidth baca OSS: Temukan nilai ini di kolom Total Bandwidth Unduh Intranet dan Internet pada tabel Bandwidth OSS.
-
Bandwidth tulis OSS: Temukan nilai ini di kolom Total Bandwidth Unggah Intranet dan Internet pada tabel Bandwidth OSS.
FAQ
-
T: Bagaimana cara mengatasi kesalahan "Too many partitions for single INSERT block (more than 100)"?
J: Kesalahan ini terjadi karena operasi INSERT tunggal melebihi batas max_partitions_per_insert_block, yang secara default adalah 100. Di ClickHouse, setiap operasi tulis membuat bagian data, dan partisi dapat berisi satu atau beberapa bagian data. Jika operasi INSERT tunggal menulis data ke terlalu banyak partisi, akan tercipta jumlah bagian data yang berlebihan. Hal ini dapat menurunkan kinerja merge dan kueri secara signifikan. ClickHouse memberlakukan batas ini untuk mencegah penurunan kinerja.
Untuk mengatasi masalah ini, Anda dapat menyesuaikan jumlah partisi atau memodifikasi parameter max_partitions_per_insert_block.
-
Atur ulang skema tabel dan metode partisi, atau hindari memasukkan data ke terlalu banyak partisi berbeda dalam satu operasi.
-
Jika Anda harus memasukkan data ke banyak partisi sekaligus, Anda dapat menaikkan batas dengan memodifikasi parameter max_partitions_per_insert_block. Sintaksnya sebagai berikut:
SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;CatatanKomunitas ClickHouse merekomendasikan menggunakan nilai default 100. Jangan atur nilai ini terlalu tinggi, karena dapat menurunkan kinerja. Setelah impor data batch, kami menyarankan Anda mengatur kembali nilai ke default.
-
-
T: Mengapa koneksi dari instans ApsaraDB for ClickHouse tujuan saya ke database ClickHouse yang dikelola sendiri gagal?
J: Masalah ini terjadi jika database ClickHouse yang dikelola sendiri berada di belakang firewall atau menggunakan daftar putih. Untuk mengatasinya, tambahkan Blok CIDR IPv4 vSwitch untuk kluster ApsaraDB for ClickHouse ke daftar putih database yang dikelola sendiri. Untuk informasi tentang cara mendapatkan Blok CIDR IPv4 vSwitch untuk kluster ApsaraDB for ClickHouse, lihat Lihat Blok CIDR IPv4.
-
T: Saat saya melakukan penskalaan atau migrasi instans multi-replika, mengapa tabel non-Replicated tidak diizinkan? Jika ada, bagaimana cara mengatasinya?
J: Alasan pembatasan ini dan solusinya adalah sebagai berikut:
-
Alasan: Instans multi-replika memerlukan tabel Replicated untuk menyinkronkan data antar replika. Tanpa tabel Replicated, pengaturan multi-replika tidak efektif. Alat migrasi secara acak memilih satu replika sebagai sumber data dan memigrasikan datanya ke instans tujuan.
Jika tabel non-Replicated ada, data tidak disinkronkan antar replika, artinya setiap replika menyimpan data terisolasi. Karena alat migrasi hanya memigrasikan dari satu replika, proses ini menyebabkan kehilangan data. Misalnya, seperti yang ditunjukkan pada gambar berikut, tabel MergeTree pada replika 0 (r0) berisi data 1, 2, dan 3. Tabel MergeTree pada replika 1 (r1) berisi data 4 dan 5. Jika alat migrasi memilih r0 sebagai sumber, hanya data 1, 2, dan 3 yang dimigrasikan ke instans tujuan.
-
Solusi: Jika Anda dapat menghapus tabel non-Replicated di instans sumber, kami menyarankan untuk melakukannya. Jika tidak, Anda harus mengganti tabel non-Replicated dengan tabel Replicated. Ikuti langkah-langkah berikut:
-
Login ke instans sumber.
-
Buat tabel Replicated. Skema tabel harus identik dengan tabel non-Replicated yang ingin Anda ganti, kecuali mesinnya.
-
Migrasikan data secara manual dari tabel non-Replicated ke tabel Replicated baru. Pernyataan migrasinya sebagai berikut:
PentingAnda harus melakukan migrasi ini untuk setiap replika. Misalnya, Anda harus menjalankan pernyataan di r0 dan r1.
Anda dapat mendapatkan alamat IP node untuk pernyataan dengan menjalankan
SELECT * FROM system.clusters;.INSERT INTO <destination_database>.<new_replicated_table> SELECT * FROM remote('<node_IP_address>:3003', '<source_database>', '<non_replicated_table_to_replace>', '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824; -
Tukar nama tabel non-Replicated dan tabel Replicated.
EXCHANGE TABLES <source_database>.<non_replicated_table_to_replace> AND <destination_database>.<new_replicated_table> ON CLUSTER default; -
-