全部产品
Search
文档中心

ApsaraDB for ClickHouse:Migrasi data dari instans ClickHouse yang dikelola sendiri ke kluster ApsaraDB for ClickHouse edisi Community-Compatible

更新时间:Dec 27, 2025

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:

      1. Di Konsol ApsaraDB for ClickHouse, buka halaman Cluster Information kluster tujuan dan dapatkan VSwitch ID dari bagian Network Information.

      2. 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.

  1. Buat tugas migrasi untuk melakukan migrasi data. Untuk petunjuk detail, lihat bagian Prosedur dalam topik ini.

  2. 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

Migrasi Konsol

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.

Migrasi manual

Memungkinkan Anda mengontrol data database dan tabel mana yang akan dimigrasikan.

Operasinya kompleks. Anda perlu melakukan migrasi metadata secara manual.

  • Memigrasikan data dari beberapa database dan tabel.

  • Data dingin melebihi 1 TB.

  • Data panas melebihi 10 TB.

  • Memigrasikan data dari seluruh kluster yang tidak memenuhi persyaratan migrasi melalui konsol.

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.

      Catatan

      Jika 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.

      Penting

      Selama 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

  1. Bandingkan konfigurasi system.part_log dan system.query_log di 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>
  2. Setelah memodifikasi konfigurasi, jalankan pernyataan drop table system.part_log dan drop table system.query_log. Tabel system.part_log dan system.query_log akan 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.

  1. 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();
  2. 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;
Catatan

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

  1. Login ke Konsol ApsaraDB for ClickHouse.

  2. Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.

  3. Di panel navigasi sebelah kiri, klik Data Migration and Synchronization > Migrate from ClickHouse.

  4. Di halaman Tugas Migrasi, klik Create Migration Task.

    1. Konfigurasikan instans sumber dan tujuan.

      Konfigurasikan pengaturan koneksi berikut dan klik Test Connection and Proceed.

      Catatan

      Jika pengujian koneksi berhasil, lanjutkan ke langkah berikutnya. Jika pengujian koneksi gagal, konfigurasi ulang instans sumber dan tujuan berdasarkan petunjuk yang muncul.

      image

      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.

      Penting

      Jangan 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******

    2. Konfirmasi konten migrasi.

      Tinjau dengan cermat informasi migrasi data, lalu klik Next: Pre-detect and Start Synchronization.

    3. 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.

        image

        1. Baca dengan cermat petunjuk di halaman tentang dampak pada instans selama migrasi.

        2. Klik Completed.

          Penting
          • Setelah 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:

  1. 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.

  2. Tentukan hubungan antara kecepatan tulis kluster tujuan dan sumber.

    1. Jika kecepatan tulis Kluster tujuan lebih besar dari kecepatan tulis Kluster sumber, migrasi kemungkinan besar akan berhasil. Lanjutkan ke Langkah 6.

    2. 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

  1. Login ke Konsol ApsaraDB for ClickHouse.

  2. Di daftar Instans Edisi Komunitas, klik ID kluster tujuan.

  3. Di panel navigasi sebelah kiri, klik Data Migration and Synchronization > Migrate from ClickHouse.

  4. Di halaman daftar migrasi instans, Anda dapat melakukan operasi berikut:

    • Lihat status dan informasi fase berjalan tugas migrasi.

      Penting

      Pantau 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:

      Catatan

      Jika 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:

  1. 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');
  2. Anda dapat melihat pernyataan pembuatan tabel untuk tabel target.

    SHOW CREATE TABLE <target_table_name>;
  3. 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.

  4. Login ke kluster yang dikelola sendiri dan hapus tabel engine Kafka dan RabbitMQ yang telah dimigrasikan.

    Penting

    Saat 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.

Penting
  • 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.

  1. Login ke Konsol ApsaraDB for ClickHouse.

  2. Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.

  3. Di panel navigasi sebelah kiri, klik Data Migration and Synchronization > Migrate from ClickHouse.

  4. Di kolom Actions untuk tugas migrasi tujuan, klik Complete Migration.

  5. 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:

  1. 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')
    ))
  2. 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.

  • Kluster tujuan melakukan restart.

  • Tugas migrasi dihentikan secara paksa. Skema database dan tabel serta konfigurasi instans tujuan mungkin tidak lengkap dan tidak dapat digunakan untuk operasi bisnis normal.

  • Sebelum memulai ulang migrasi, Anda harus menghapus data yang telah dimigrasikan dari kluster tujuan untuk menghindari duplikasi data.

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

  1. Login ke Konsol ApsaraDB for ClickHouse.

  2. Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster target.

  3. Di panel navigasi sebelah kiri, klik Data Migration and Synchronization > Migrate from ClickHouse.

  4. Di kolom Actions untuk tugas migrasi tujuan, klik Stop Migration.

  5. Di kotak dialog Stop Migration, klik OK.

Batalkan Migrasi

  1. Login ke Konsol ApsaraDB for ClickHouse.

  2. Di halaman Clusters, pilih Clusters of Community-compatible Edition dan klik ID kluster tujuan.

  3. Di panel navigasi sebelah kiri, klik Data Migration and Synchronization > Migrate from ClickHouse.

  4. Untuk tugas migrasi tujuan, klik Cancel Migration di kolom Actions.

  5. 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.

  1. 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.list

    Parameter:

    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.

    Catatan

    Database `system` adalah database sistem dan tidak perlu dimigrasikan. Anda dapat menyaringnya selama proses ini.

  2. 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.list

    Parameter:

    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';
    Catatan

    Jika ada nama tabel yang dikueri diawali dengan `.inner.`, itu adalah representasi internal materialized view dan tidak perlu dimigrasikan. Anda dapat menyaringnya.

  3. 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.sql
  4. Impor DDL pembuatan tabel ke instans ApsaraDB for ClickHouse tujuan.

    Catatan

    Sebelum 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.sql

    Parameter:

    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

  1. (Opsional) Saat memigrasikan data ke ApsaraDB for ClickHouse, Anda dapat menyesuaikan parameter `network_compression_method` untuk memilih algoritma kompresi yang sesuai. Hal ini membantu mengurangi penggunaan traffic jaringan.

    • Untuk memodifikasi sementara atau melihat parameter `network_compression_method` di instans ApsaraDB for ClickHouse tujuan, gunakan contoh berikut.

    • SET network_compression_method = 'ZSTD';
    • Untuk melihat nilai parameter `network_compression_method` di instans ApsaraDB for ClickHouse tujuan, gunakan contoh berikut.

    • SELECT * FROM system.settings WHERE name = 'network_compression_method';
  2. 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;
    Catatan

    Untuk 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:

    Penting

    Menyaring data berdasarkan `partition_id` dapat mengurangi penggunaan resource. Kami menyarankan Anda menggunakan parameter ini.

    (Opsional) Jika Anda tidak tahu cara mendapatkan `partition_id` dan jumlah part, Anda dapat mengkuerinya dari tabel `system.parts` menggunakan pernyataan SQL berikut.

    SELECT partition_id, count(*) AS part_count from clusterAllReplicas(default, system, parts) WHERE `database` = '<old_database>' AND `table` = '<old_table>' GROUP BY partition_id ;

    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.

    Penting

    Port di sini adalah port TCP.

    ApsaraDB for ClickHouse

    Titik akhir instans sumber adalah titik akhir internal VPC, bukan titik akhir publik.

    Penting

    Port 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
    1. 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.csv
    2. 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
  • 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:

Catatan

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

    Catatan

    Nilai 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;
      Catatan

      Komunitas 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.

      image
    • 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:

      1. Login ke instans sumber.

      2. Buat tabel Replicated. Skema tabel harus identik dengan tabel non-Replicated yang ingin Anda ganti, kecuali engine-nya.

      3. Migrasikan data secara manual dari tabel non-Replicated ke tabel Replicated baru. Pernyataan migrasinya sebagai berikut.

        Penting

        Anda 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;
      4. 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;