Instans ClickHouse yang dikelola sendiri sering menimbulkan risiko stabilitas, tantangan operasional seperti skalabilitas kluster yang terbatas dan pembaruan versi yang sulit, serta kemampuan disaster recovery yang lemah. Oleh karena itu, banyak pelanggan memilih untuk memindahkan kluster ClickHouse yang mereka kelola sendiri ke solusi cloud Platform as a Service (PaaS). Topik ini menjelaskan cara migrasi data dari instans ClickHouse yang dikelola sendiri ke kluster ApsaraDB for ClickHouse edisi Community-Compatible.
Prasyarat
Kluster tujuan:
Kluster tersebut merupakan kluster edisi Community-Compatible.
Anda memiliki akun database dan kata sandi. Untuk informasi selengkapnya tentang cara membuat akun ClickHouse, lihat Manajemen akun untuk kluster edisi Community-Compatible.
Akun tersebut harus memiliki izin tertinggi. Untuk informasi selengkapnya tentang cara memberikan izin, lihat Ubah izin.
Kluster yang dikelola sendiri:
Anda memiliki akun database dan kata sandi.
Akun tersebut harus memiliki izin baca pada database dan tabel, serta izin untuk menjalankan perintah SYSTEM.
Kluster tujuan dan kluster yang dikelola sendiri dapat berkomunikasi satu sama lain melalui jaringan.
Jika kluster yang dikelola sendiri dan kluster tujuan berada dalam VPC yang sama, tambahkan alamat IP semua node di kluster tujuan dan IPv4 CIDR Block dari VSwitch ID-nya ke daftar putih kluster yang dikelola sendiri.
Untuk informasi selengkapnya tentang cara mengonfigurasi daftar putih di ApsaraDB for ClickHouse, lihat Konfigurasi daftar putih.
Untuk informasi tentang cara menambahkan alamat IP ke daftar putih kluster yang dikelola sendiri, lihat dokumentasi produk terkait.
Untuk melihat alamat IP semua node di kluster ApsaraDB for ClickHouse, jalankan pernyataan
SELECT * FROM system.clusters;.Untuk mendapatkan IPv4 CIDR yang terkait dengan VSwitch ID kluster ApsaraDB for ClickHouse, ikuti langkah-langkah berikut:
Di Konsol ApsaraDB for ClickHouse, buka halaman Cluster Information kluster tujuan dan dapatkan VSwitch ID dari bagian Network Information.
Di daftar vSwitch, cari vSwitch tujuan berdasarkan VSwitch ID-nya dan lihat IPv4 CIDR-nya.
Jika kluster yang dikelola sendiri dan kluster cloud berada di VPC yang berbeda, atau jika kluster yang dikelola sendiri berada di pusat data lokal atau platform cloud lain, Anda harus terlebih dahulu menyelesaikan masalah konektivitas jaringan. Untuk informasi selengkapnya, lihat Bagaimana cara membuat koneksi jaringan antara kluster tujuan dan sumber data?.
Validasi migrasi
Sebelum memulai migrasi data, kami sangat menyarankan Anda membuat lingkungan pengujian. Di lingkungan ini, Anda dapat memverifikasi kompatibilitas bisnis dan performa, serta memastikan bahwa migrasi dapat diselesaikan dengan sukses. Setelah validasi migrasi selesai, Anda dapat melakukan migrasi data di lingkungan produksi. Langkah ini penting untuk mengidentifikasi dan menyelesaikan potensi masalah lebih awal, sehingga memastikan proses migrasi berjalan lancar dan mencegah dampak yang tidak diinginkan pada lingkungan produksi.
Buat tugas migrasi untuk melakukan migrasi data. Untuk petunjuk detail, lihat bagian Prosedur dalam topik ini.
Untuk informasi tentang kompatibilitas migrasi ke cloud, analisis bottleneck performa, dan cara menentukan apakah migrasi dapat diselesaikan, lihat Analisis dan solusi untuk kompatibilitas dan bottleneck performa saat memindahkan ClickHouse yang dikelola sendiri ke cloud.
Pilih solusi
Solusi migrasi | Kelebihan | Kekurangan | Skenario |
Menyediakan antarmuka visualisasi. Anda tidak perlu melakukan migrasi metadata secara manual. | Hanya mendukung migrasi penuh dan inkremental untuk seluruh data kluster. Anda tidak dapat memigrasikan hanya database, tabel, atau data historis tertentu. | Memigrasikan data dari seluruh kluster. | |
Memungkinkan Anda mengontrol data database dan tabel mana yang akan dimigrasikan. | Operasinya kompleks. Anda perlu melakukan migrasi metadata secara manual. |
|
Prosedur
Migrasi Konsol
Batasan
Versi kluster tujuan harus 21.8 atau lebih baru.
Catatan
Selama migrasi:
Proses merge untuk database dan tabel yang sedang dimigrasikan di kluster tujuan dijeda. Proses merge di kluster yang dikelola sendiri tidak dijeda.
CatatanJika migrasi data memakan waktu terlalu lama, jumlah metadata yang menumpuk di kluster tujuan akan berlebihan. Kami menyarankan agar tugas migrasi tidak berjalan lebih dari 5 hari.
Kluster tujuan harus menggunakan kluster default. Jika kluster yang dikelola sendiri menggunakan nama berbeda, definisi kluster di tabel terdistribusi akan dikonversi secara otomatis menjadi default.
Konten migrasi:
Konten yang didukung untuk migrasi:
Database, kamus data, dan materialized view.
Skema tabel: Semua skema tabel kecuali tabel engine Kafka dan RabbitMQ.
Data: Migrasi inkremental data dari tabel keluarga MergeTree.
Konten yang tidak didukung untuk migrasi:
Tabel dan data tabel engine Kafka dan RabbitMQ.
Data dari tabel non-MergeTree, seperti tabel eksternal dan tabel Log.
PentingSelama proses migrasi, Anda harus menangani konten yang tidak didukung secara manual sesuai langkah yang disediakan.
Volume data untuk migrasi:
Data dingin: Migrasi data dingin relatif lambat. Kami menyarankan Anda membersihkan sebanyak mungkin data dingin dari kluster yang dikelola sendiri agar volume total tidak melebihi 1 TB. Jika tidak, waktu migrasi yang lama dapat menyebabkan tugas gagal.
Data panas: Jika volume data panas melebihi 10 TB, kemungkinan besar tugas migrasi akan gagal. Kami tidak menyarankan menggunakan solusi ini untuk migrasi dalam kasus tersebut.
Jika volume data Anda melebihi batas ini, gunakan solusi Migrasi manual sebagai gantinya.
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.
Operasi DDL tidak diizinkan pada database dan tabel yang sedang dimigrasikan. Pembatasan ini tidak berlaku untuk database dan tabel lainnya.
Proses merge dihentikan untuk database dan tabel yang sedang dimigrasikan. Proses merge tidak dihentikan untuk database dan tabel lainnya.
Kluster melakukan restart sebelum tugas migrasi dimulai dan melakukan restart lagi setelah tugas selesai.
Setelah migrasi selesai, kluster mengalami periode operasi merge berfrekuensi tinggi. Hal ini meningkatkan penggunaan I/O dan latensi permintaan bisnis. Kami menyarankan Anda merencanakan potensi dampak peningkatan latensi permintaan bisnis. Anda harus menghitung durasi spesifik operasi merge. Untuk informasi selengkapnya tentang perhitungan ini, lihat Hitung waktu merge setelah migrasi.
Prosedur
Langkah 1: Periksa kluster yang dikelola sendiri dan aktifkan tabel sistem
Sebelum memigrasikan data, Anda harus memodifikasi file config.xml di kluster yang dikelola sendiri untuk mengaktifkan migrasi inkremental. Modifikasi tergantung pada apakah tabel system.part_log dan system.query_log sudah diaktifkan atau belum.
Jika system.part_log dan system.query_log belum 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>system.part_log dan system.query_log telah diaktifkan
Bandingkan konfigurasi
system.part_logdansystem.query_logdi file config.xml dengan konten berikut. Jika ada ketidaksesuaian, modifikasi konfigurasinya agar sesuai. Jika tidak, migrasi dapat 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. Tabelsystem.part_logdansystem.query_logakan dibuat ulang secara otomatis saat Anda memasukkan data ke tabel bisnis.
Langkah 2: Konfigurasikan kluster tujuan agar kompatibel dengan versi kluster yang dikelola sendiri.
Konfigurasikan kluster tujuan agar kompatibel dengan kluster yang dikelola sendiri. Hal ini meminimalkan modifikasi bisnis yang diperlukan setelah migrasi.
Dapatkan nomor versi kluster tujuan dan kluster yang dikelola sendiri, lalu bandingkan.
Login ke kluster tujuan dan kluster yang dikelola sendiri, lalu jalankan pernyataan berikut untuk mendapatkan nomor versinya. Untuk informasi selengkapnya tentang cara login ke ApsaraDB for ClickHouse, lihat Hubungkan ke database.
SELECT version();Jika versinya berbeda, login ke kluster tujuan dan modifikasi parameter kompatibilitas agar sesuai dengan nomor versi kluster yang dikelola sendiri. Hal ini memastikan fitur-fiturnya se-konsisten mungkin. Berikut contohnya.
SET GLOBAL compatibility = '22.8';
(Opsional) Langkah 3: Aktifkan engine MaterializedMySQL pada kluster tujuan.
Jika kluster yang dikelola sendiri Anda berisi tabel yang menggunakan engine MaterializedMySQL, jalankan pernyataan berikut untuk mengaktifkan engine ini.
SET GLOBAL allow_experimental_database_materialized_mysql = 1;Komunitas ClickHouse tidak lagi memelihara engine MaterializedMySQL. Setelah migrasi ke cloud, kami menyarankan Anda menggunakan DTS untuk menyinkronkan data MySQL.
Untuk mengatasi masalah engine MaterializedMySQL yang tidak dipelihara, DTS menggunakan tabel ReplacingMergeTree sebagai pengganti tabel MaterializedMySQL saat menyinkronkan data MySQL ke ApsaraDB for ClickHouse. Untuk informasi selengkapnya, lihat Kompatibilitas MaterializedMySQL.
Untuk informasi selengkapnya tentang cara menggunakan DTS untuk memigrasikan data MySQL ke ApsaraDB for ClickHouse, lihat dokumen berikut.
Langkah 4: Buat tugas migrasi
Login ke Konsol ApsaraDB for ClickHouse.
Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.
Di panel navigasi sebelah kiri, klik .
Di halaman Tugas Migrasi, klik Create Migration Task.
Konfigurasikan instans sumber dan tujuan.
Konfigurasikan pengaturan koneksi berikut dan klik Test Connection and Proceed.
CatatanJika pengujian koneksi berhasil, lanjutkan ke langkah berikutnya. Jika pengujian koneksi gagal, konfigurasi ulang instans sumber dan tujuan berdasarkan petunjuk yang muncul.

Item konfigurasi kluster sumber
Item konfigurasi
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.
Hanya boleh berisi angka dan huruf kecil.
source
Source Cluster Name
Jalankan
SELECT * FROM system.clusters;untuk mendapatkan Source Instance Name.default
VPC IP Address
Alamat IP dan PORT (alamat TCP) setiap shard di kluster, dipisahkan dengan koma.
PentingJangan gunakan nama domain VPC atau alamat SLB ApsaraDB for ClickHouse.
Format:
IP:PORT,IP:PORT,......Metode untuk mendapatkan alamat IP dan PORT kluster berbeda-beda tergantung skenario migrasi instans yang dikelola sendiri ke cloud.
Migrasi cross-account, cross-region instans ClickHouse 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 = 'default' and replica_num = 1;Di sini, replica_num=1 berarti memilih set replika pertama. Anda juga dapat memilih set replika lain atau memilih satu replika dari setiap shard sendiri.
Migrasi instans ClickHouse non-Alibaba Cloud
Jika alamat IP tidak 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;Deskripsi parameter:
cluster_name: Nama kluster tujuan.
replica_num=1 berarti memilih set replika pertama. Anda juga dapat memilih set replika lain atau memilih satu replika dari setiap shard sendiri.
Jika alamat IP dan port dikonversi lalu dipetakan ke Alibaba Cloud, Anda perlu mengonfigurasi alamat IP dan PORT yang sesuai berdasarkan koneksi jaringan.
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******
Item konfigurasi kluster tujuan
Item Konfigurasi
Deskripsi
Contoh
Database Account
Akun database dari kluster tujuan.
test
Database Password
Password untuk akun database kluster tujuan.
test******
Konfirmasi konten migrasi.
Tinjau dengan cermat informasi migrasi data, lalu klik Next: Pre-detect and Start Synchronization.
Sistem melakukan pra-periksa pada tautan migrasi lalu memulai tugas.
Sistem menjalankan Instance Status Detection, Storage Space Detection, dan Local Table and Distributed Table Detection pada kluster tujuan dan kluster yang dikelola sendiri.
Jika pemeriksaan berhasil:
Gambar berikut menunjukkan antarmuka setelah pemeriksaan berhasil.

Baca dengan cermat petunjuk di halaman tentang dampak pada instans selama migrasi.
Klik Completed.
PentingSetelah Anda mengklik Selesai, tugas dibuat dan dimulai, serta statusnya berubah menjadi Berjalan. Anda dapat melihat tugas tersebut di daftar tugas.
Setelah membuat tugas, Anda juga harus memantaunya. Pada tahap akhir migrasi, Anda harus menghentikan operasi tulis ke kluster yang dikelola sendiri dan memigrasikan skema database dan tabel yang tersisa. Untuk informasi selengkapnya tentang cara memantau tugas migrasi, lihat Pantau tugas migrasi dan hentikan penulisan ke kluster yang dikelola sendiri.
Jika pemeriksaan gagal: Anda harus mengikuti petunjuk dan melakukan migrasi data lagi. Item pemeriksaan dan persyaratannya sebagai berikut. Untuk pesan kesalahan dan solusinya, lihat Pesan kesalahan dan solusi untuk pemeriksaan migrasi.
Item pemeriksaan
Periksa persyaratan
Instance Status Detection
Saat migrasi dimulai, tidak boleh ada tugas manajemen yang sedang berjalan (seperti scale-out, upgrade atau downgrade) di kluster yang dikelola sendiri dan kluster tujuan. Jika ada tugas manajemen yang sedang berjalan, tugas migrasi tidak dapat dimulai.
Storage Space Detection
Sebelum migrasi, dilakukan pemeriksaan ruang penyimpanan. Pastikan ruang penyimpanan kluster tujuan minimal 1,2 kali ruang yang digunakan di 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 jika tabel terdistribusinya tidak unik, pemeriksaan gagal. Hapus tabel terdistribusi tambahan atau buat tabel terdistribusi yang unik.
Langkah 5: Evaluasi apakah migrasi dapat diselesaikan
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, kecepatan tulis teoretis satu node di kluster tujuan juga harus lebih dari 20 MB/detik. Untuk memastikan kecepatan tulis kluster tujuan dapat mengimbangi kecepatan tulis kluster sumber dan migrasi dapat berhasil, Anda harus memeriksa kecepatan tulis aktual kluster tujuan untuk mengevaluasi kelayakan migrasi. Ikuti langkah-langkah berikut:
Anda dapat melihat Disk throughput kluster tujuan untuk menentukan kecepatan tulis aktualnya. Untuk informasi selengkapnya tentang cara melihat Disk throughput, lihat Lihat informasi pemantauan kluster.
Tentukan hubungan antara kecepatan tulis kluster tujuan dan sumber.
Jika kecepatan tulis Kluster tujuan lebih besar dari kecepatan tulis Kluster sumber, migrasi kemungkinan besar akan berhasil. Lanjutkan ke Langkah 6.
Jika kecepatan tulis kluster tujuan kurang dari kecepatan tulis kluster sumber: Migrasi memiliki kemungkinan tinggi untuk gagal. Kami menyarankan Anda membatalkan tugas migrasi dan menggunakan migrasi manual untuk memigrasikan data.
Langkah 6: Pantau tugas migrasi dan perkirakan kapan harus menghentikan penulisan ke kluster yang dikelola sendiri
Login ke Konsol ApsaraDB for ClickHouse.
Di daftar Instans Edisi Komunitas, klik ID kluster tujuan.
Di panel navigasi sebelah kiri, klik .
Di halaman daftar migrasi instans, Anda dapat melakukan operasi berikut:
Lihat status dan informasi fase berjalan tugas migrasi.
PentingPantau dengan cermat Running Information tugas tujuan. Berdasarkan perkiraan waktu tersisa di kolom Running Information, ikuti Langkah 7 untuk menghentikan penulisan ke kluster yang dikelola sendiri dan menangani tabel engine Kafka dan RabbitMQ.
Klik View Details di kolom Tindakan untuk membuka halaman detail tugas. Halaman ini mencakup detail berikut:
CatatanJika tugas migrasi berakhir (statusnya Selesai atau Dibatalkan), konten di halaman Lihat Detail di konsol akan 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 keberhasilan migrasinya.
Semua struktur database yang dimigrasikan dan status keberhasilan migrasinya.
Semua pesan kesalahan untuk migrasi database dan tabel yang gagal.
Tabel berikut menjelaskan status tugas migrasi dan fungsinya masing-masing.
Status Tugas
Deskripsi Fungsi
Sedang berjalan
Menyiapkan lingkungan dan resource untuk migrasi.
Inisialisasi
Menginisialisasi tugas migrasi.
Migrasi Konfigurasi
Memigrasikan konfigurasi kluster.
Migrasi Skema
Memigrasikan semua database, bersama tabel keluarga MergeTree dan tabel Distributed.
Migrasi Data
Memigrasikan data secara inkremental dari tabel keluarga MergeTree.
Migrasi Skema Lainnya
Memigrasikan materialized view dan skema tabel non-MergeTree.
Pemeriksaan Data
Memeriksa apakah volume data tabel yang telah selesai di kluster tujuan konsisten dengan volume data di kluster yang dikelola sendiri. Jika tidak, tugas mungkin tidak selesai. Kami menyarankan untuk memulai ulang migrasi.
Pasca-konfigurasi
Konfigurasi sistem kluster tujuan setelah migrasi selesai, seperti membersihkan situs migrasi dan mengaktifkan penulisan ke instans sumber.
Selesai
Tugas migrasi selesai.
Dibatalkan
Tugas migrasi telah dibatalkan.
Langkah 7: Hentikan penulisan ke kluster yang dikelola sendiri dan tangani tabel engine Kafka dan RabbitMQ
Sebelum mengalihkan layanan bisnis Anda ke kluster baru, Anda harus memastikan tidak ada data baru yang ditulis ke instans yang dikelola sendiri untuk menjamin integritas data setelah migrasi. Untuk melakukannya, Anda harus menghentikan operasi tulis bisnis dan menghapus tabel Kafka dan RabbitMQ. Ikuti langkah-langkah berikut:
Masuk ke kluster yang dikelola sendiri dan jalankan pernyataan berikut untuk mengkueri tabel yang perlu diproses.
SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');Anda dapat melihat pernyataan pembuatan tabel untuk tabel target.
SHOW CREATE TABLE <target_table_name>;Login ke kluster tujuan dan eksekusi pernyataan pembuatan tabel yang Anda dapatkan pada langkah sebelumnya. Untuk informasi selengkapnya tentang cara login ke kluster tujuan, lihat Hubungkan ke kluster ClickHouse menggunakan DMS.
Login ke kluster yang dikelola sendiri dan hapus tabel engine Kafka dan RabbitMQ yang telah dimigrasikan.
PentingSaat menghapus tabel Kafka, Anda juga harus menghapus materialized view yang mereferensinya. Jika tidak, migrasi materialized view tidak dapat diselesaikan, yang menyebabkan seluruh tugas migrasi gagal.
Langkah 8: Selesaikan tugas migrasi
Operasi Complete menyelesaikan migrasi setelah Anda menghentikan penulisan ke kluster yang dikelola sendiri. Operasi ini menyelesaikan migrasi data yang tersisa, melakukan pemeriksaan volume data, dan memigrasikan skema database dan tabel yang tersisa. Anda dapat melihat data yang dimigrasikan di detail tugas.
Jika pemeriksaan gagal, tugas migrasi tetap berada di fase pemeriksaan volume data. Kami menyarankan Anda membatalkan migrasi dan membuat tugas migrasi baru. Untuk informasi selengkapnya tentang cara membatalkan tugas migrasi, lihat Operasi lainnya.
Migrasi data yang lama dapat menyebabkan akumulasi metadata berlebihan di kluster tujuan, yang dapat memengaruhi kecepatan migrasi. Kami menyarankan Anda menyelesaikan operasi ini dalam waktu 5 hari setelah membuat tugas migrasi.
Login ke Konsol ApsaraDB for ClickHouse.
Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.
Di panel navigasi sebelah kiri, klik .
Di kolom Actions untuk tugas migrasi tujuan, klik Complete Migration.
Di kotak dialog Complete Migration, klik OK.
Langkah 9: Migrasikan data bisnis dari tabel non-MergeTree
Tugas migrasi hanya mendukung migrasi skema tabel non-MergeTree, seperti tabel eksternal dan tabel Log. Setelah tugas migrasi selesai, tabel-tabel ini di kluster tujuan hanya berisi skema tabel tanpa data bisnis. Anda harus memigrasikan data bisnis secara manual. Ikuti langkah-langkah berikut:
Login ke kluster yang dikelola sendiri dan jalankan pernyataan berikut untuk melihat tabel non-MergeTree yang datanya perlu dimigrasikan.
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 migrasikan data tabel menggunakan fungsi
remote. Untuk informasi selengkapnya, lihat Migrasi data menggunakan fungsi remote.
Operasi lainnya
Saat tugas migrasi selesai, Migration Status berubah menjadi Selesai. Namun, daftar tugas tidak langsung diperbarui. Kami menyarankan Anda memperbarui halaman secara berkala untuk memeriksa status tugas.
Operasi | Fungsi | Dampak | Skenario |
Batalkan Migrasi | Membatalkan tugas secara paksa, melewati pemeriksaan volume data, dan tidak memigrasikan skema database dan tabel yang tersisa. |
| Tugas migrasi telah memengaruhi kluster yang dikelola sendiri, dan Anda ingin mengakhiri migrasi serta mengaktifkan penulisan sesegera mungkin. |
Hentikan Migrasi | Segera menghentikan migrasi data, melewati pemeriksaan volume data, dan memigrasikan skema database dan tabel yang tersisa. | Kluster tujuan melakukan restart. | Anda ingin menguji setelah memigrasikan sebagian data tetapi tidak ingin menghentikan penulisan ke kluster yang dikelola sendiri. |
Hentikan Migrasi
Login ke Konsol ApsaraDB for ClickHouse.
Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.
Di panel navigasi sebelah kiri, klik .
Di kolom Actions untuk tugas migrasi tujuan, 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 dan klik ID kluster tujuan.
Di panel navigasi sebelah kiri, klik .
Untuk tugas migrasi tujuan, klik Cancel Migration di kolom Actions.
Di kotak dialog Cancel Migration, klik OK.
Migrasi manual
Metode 1: Migrasi menggunakan perintah BACKUP dan RESTORE
Untuk informasi selengkapnya, lihat Gunakan perintah BACKUP dan RESTORE untuk backup dan restore data.
Metode 2: Migrasi menggunakan pernyataan INSERT FROM SELECT
Langkah 1: Migrasi metadata (DDL untuk pembuatan tabel)
Migrasi metadata ClickHouse terutama mengacu pada migrasi DDL untuk pembuatan tabel.
Untuk menginstal clickhouse-client, pastikan versi client sesuai dengan versi kluster ApsaraDB for ClickHouse tujuan. Untuk petunjuk unduhan, lihat 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 ini harus memiliki izin baca/tulis DML dan pengaturan, serta mengizinkan izin DDL.
old password
Kata sandi untuk akun tersebut.
CatatanDatabase `system` adalah database sistem dan tidak perlu dimigrasikan. Anda dapat menyaringnya selama proses 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.
Anda juga dapat langsung mengkueri semua nama database dan tabel dari tabel sistem.
SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';CatatanJika ada nama tabel yang dikueri diawali dengan `.inner.`, itu adalah representasi internal materialized view dan tidak perlu dimigrasikan. Anda dapat menyaringnya.
Ekspor DDL pembuatan tabel untuk semua tabel di 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.sqlImpor DDL pembuatan tabel ke instans ApsaraDB for ClickHouse tujuan.
CatatanSebelum mengimpor DDL pembuatan tabel, Anda harus membuat database yang sesuai di 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 ini harus memiliki izin baca/tulis DML dan pengaturan, serta mengizinkan izin DDL.
new password
Kata sandi untuk akun tersebut.
Langkah 2: Migrasi data
Migrasi data menggunakan fungsi remote
Di instans ApsaraDB for ClickHouse tujuan, migrasikan data menggunakan pernyataan SQL berikut.
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;CatatanUntuk versi 20.8, kami menyarankan Anda terlebih dahulu mencoba menggunakan fungsi `remoteRaw` untuk 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;Parameter:
PentingMenyaring data berdasarkan `partition_id` dapat mengurangi penggunaan resource. Kami menyarankan Anda menggunakan parameter ini.
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 di sini adalah port TCP.
ApsaraDB for ClickHouse
Titik akhir instans sumber adalah titik akhir internal VPC, bukan titik akhir publik.
PentingPort berikut, 3306 dan 9000, adalah bidang statis.
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 kluster yang dikelola sendiri.
max_execution_time
Waktu eksekusi maksimum untuk kueri. Atur ke 0 untuk tanpa batas waktu.
max_bytes_to_read
Jumlah maksimum byte yang dapat dibaca kueri dari data sumber. Atur ke 0 untuk tanpa batas.
log_query_threads
Apakah akan mencatat informasi thread untuk eksekusi kueri. Atur ke 0 untuk tidak mencatat informasi thread.
max_result_rows
Jumlah maksimum baris dalam hasil kueri. Atur ke 0 untuk tanpa batas.
_partition_id
ID partisi data.
Migrasi data dengan mengekspor dan mengimpor file
Ekspor data dari database kluster yang dikelola sendiri dan impor ke instans ApsaraDB for ClickHouse tujuan menggunakan file.
Ekspor dan impor menggunakan file CSV
Ekspor data dari database kluster yang dikelola sendiri ke file format 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.csvImpor 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
Ekspor dan impor streaming menggunakan 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"
Pesan kesalahan pemeriksaan migrasi dan solusinya
Pesan kesalahan | Deskripsi | Solusi |
Missing unique distributed table or sharding_key not set. | Tabel lokal di kluster yang dikelola sendiri tidak memiliki tabel terdistribusi yang unik. | Sebelum migrasi, buat tabel terdistribusi yang sesuai untuk tabel lokal di kluster yang dikelola sendiri. |
The corresponding distributed table is not unique. | Tabel lokal di kluster yang dikelola sendiri memiliki beberapa tabel terdistribusi yang sesuai. | Di kluster yang dikelola sendiri, hapus tabel terdistribusi tambahan dan simpan hanya satu. |
MergeTree table on multiple replica cluster. | Kluster yang dikelola sendiri adalah kluster multi-replika yang berisi tabel non-replikasi. Migrasi tidak didukung karena data tidak konsisten antar replika. | Untuk informasi selengkapnya, lihat Mengapa tabel non-replikasi tidak diizinkan saat Anda melakukan scale atau migrasi instans multi-replika? |
Data reserved table on destination cluster. | Tabel yang sesuai di kluster tujuan sudah berisi data. | Hapus tabel yang sesuai dari kluster tujuan. |
Columns of distributed table and local table conflict | Kolom tabel terdistribusi dan tabel lokal di kluster yang dikelola sendiri tidak cocok. | Di kluster yang dikelola sendiri, bangun ulang tabel terdistribusi agar sesuai dengan tabel lokal. |
Storage is not enough. | Kluster tujuan memiliki ruang penyimpanan yang tidak mencukupi. | Upgrade ruang disk kluster tujuan. Ruang total kluster tujuan harus lebih dari 1,2 kali ruang yang digunakan di kluster yang dikelola sendiri. Untuk informasi selengkapnya, lihat Upgrade/Downgrade dan scale-out/scale-in kluster kompatibel komunitas. |
Missing system table. | Tabel sistem hilang di kluster yang dikelola sendiri. | Modifikasi file config.xml kluster yang dikelola sendiri untuk membuat tabel sistem yang diperlukan. Untuk informasi selengkapnya, lihat Langkah 1: Periksa kluster yang dikelola sendiri dan aktifkan tabel sistem. |
The table is incomplete across different nodes. | Tabel tersebut hilang di beberapa node. | Buat tabel dengan nama yang sama di shard yang berbeda. Untuk tabel internal materialized view, ubah nama tabel internal tersebut, lalu bangun ulang materialized view agar mengarah ke tabel internal yang telah diubah namanya. Untuk informasi selengkapnya, lihat Tabel internal materialized view tidak konsisten di seluruh shard. |
Hitung waktu merge setelah migrasi
Setelah migrasi, kluster tujuan sering melakukan operasi merge. Hal ini meningkatkan penggunaan I/O dan latensi permintaan layanan. Jika bisnis Anda sensitif terhadap latensi baca dan tulis data, Anda dapat meningkatkan tipe instans dan Tingkat performa ESSD untuk memperpendek durasi penggunaan I/O tinggi akibat merge. Untuk informasi selengkapnya, lihat Scaling vertikal, scale-out, dan scale-in kluster kompatibel komunitas.
Rumus untuk waktu merge setelah migrasi adalah sebagai berikut:
Rumus ini berlaku untuk edisi single-replica maupun kluster master-replika.
Total waktu untuk operasi merge frekuensi tinggi =
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)
Parameter dijelaskan sebagai berikut.
Jumlah data panas pada satu node: Anda dapat melihat datanya di baris Disk Usage - Single-Node Statistics. Untuk informasi selengkapnya, lihat Lihat informasi pemantauan kluster.
Bandwidth tipe instans
CatatanNilai bandwidth tipe instans tidak mutlak. Parameter ini berbeda jika backend ApsaraDB for ClickHouse menggunakan tipe mesin yang berbeda. Nilai yang diberikan adalah bandwidth minimum dan hanya sebagai 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: Lihat baris Throughput maksimum per disk (MB/detik) di 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 datanya di baris Cold storage usage. Untuk informasi selengkapnya, lihat Lihat informasi pemantauan kluster.
Jumlah node: Jumlah node di kluster. Jalankan perintah berikut untuk mendapatkan nilai ini:
SELECT count() FROM system.clusters WHERE cluster = 'default' and replica_num=1;Bandwidth baca OSS: Lihat nilai di kolom Total Bandwidth Unduh Intranet dan Internet di tabel Bandwidth OSS.
Bandwidth tulis OSS: Lihat nilai di kolom Total Bandwidth Unggah Intranet dan Internet di tabel Bandwidth OSS.
FAQ
Q: Bagaimana cara mengatasi error "Too many partitions for single INSERT block (more than 100)"?
A: Error ini terjadi karena operasi INSERT tunggal melebihi batas max_partitions_per_insert_block. Nilai default parameter ini adalah 100. Di ClickHouse, setiap operasi tulis membuat satu bagian data, dan satu partisi dapat berisi satu atau beberapa bagian data. Jika operasi INSERT tunggal menulis data ke terlalu banyak partisi, jumlah bagian data yang dibuat akan berlebihan. Hal ini dapat berdampak signifikan pada performa merge dan kueri. ClickHouse memberlakukan batas ini untuk mencegah degradasi performa.
Solusi: Anda dapat mengatasi masalah ini dengan menyesuaikan jumlah partisi atau memodifikasi parameter max_partitions_per_insert_block.
Sesuaikan skema tabel dan metode partisi, atau hindari memasukkan data ke banyak partisi berbeda dalam satu operasi.
Jika Anda tidak dapat menghindari memasukkan data ke banyak partisi sekaligus, Anda dapat meningkatkan batas dengan memodifikasi parameter max_partitions_per_insert_block berdasarkan volume data Anda. Sintaksnya sebagai berikut:
SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;CatatanKomunitas ClickHouse merekomendasikan menggunakan nilai default 100. Jangan mengatur nilai ini terlalu tinggi karena dapat berdampak negatif pada performa. Setelah selesai mengimpor data batch, ubah kembali nilainya ke default.
Q: Mengapa koneksi dari instans ApsaraDB for ClickHouse tujuan ke database ClickHouse yang dikelola sendiri saya gagal?
A: Masalah ini dapat terjadi jika kluster ClickHouse yang dikelola sendiri dikonfigurasi dengan firewall atau daftar putih. Untuk mengatasinya, Anda harus menambahkan IPv4 CIDR dari VSwitch ID untuk kluster ApsaraDB for ClickHouse ke daftar putih kluster ClickHouse yang dikelola sendiri Anda. Untuk informasi tentang cara mendapatkan IPv4 CIDR dari VSwitch ID untuk kluster ApsaraDB for ClickHouse, lihat Lihat Blok CIDR IPv4.
Q: Saat saya melakukan scale atau migrasi instans multi-replika, mengapa tabel non-Replicated tidak diizinkan? Jika ada, bagaimana cara mengatasinya?
A: Alasan pembatasan ini dan solusinya 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 dapat disinkronkan antar replika, artinya data hanya ada di satu replika. Karena alat migrasi hanya memigrasikan data dari satu replika, proses ini menyebabkan kehilangan data. Misalnya, seperti yang ditunjukkan pada gambar berikut, tabel MergeTree di replika 0 (r0) berisi data 1, 2, dan 3. Tabel MergeTree di 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, hapus saja. Jika tidak, Anda harus mengganti tabel non-Replicated dengan tabel Replicated dengan melakukan langkah-langkah berikut:
Login ke instans sumber.
Buat tabel Replicated. Skema tabel harus identik dengan tabel non-Replicated yang ingin Anda ganti, kecuali engine-nya.
Migrasikan data secara manual dari tabel non-Replicated ke tabel Replicated baru. Pernyataan migrasinya sebagai berikut.
PentingAnda harus memigrasikan setiap replika. Artinya, Anda perlu menjalankan pernyataan ini di r0 dan r1.
Anda dapat mendapatkan alamat IP node untuk pernyataan tersebut dengan menjalankan
SELECT * FROM system.clusters;.INSERT INTO <destination_database>.<new_replicated_table> SELECT * FROM remote('<node_IP>: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;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;