All Products
Search
Document Center

ApsaraDB for ClickHouse:Migrasi dari ClickHouse yang dikelola sendiri ke Cloud ClickHouse

Last Updated:Jul 30, 2026

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

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

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

  1. Buat tugas migrasi untuk memigrasikan data. Untuk langkah-langkah detail, lihat topik ini.

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

Migrasi konsol

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.

Migrasi manual

Memungkinkan Anda mengontrol database dan tabel mana yang akan dimigrasikan.

Melibatkan langkah-langkah kompleks dan migrasi metadata manual.

  • Memigrasikan database dan tabel tertentu.

  • Data dingin melebihi 1 TB.

  • Data panas melebihi 10 TB.

  • Memigrasikan seluruh kluster yang tidak memenuhi persyaratan migrasi konsol.

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.

    Catatan

    Jika 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 definisi cluster di tabel terdistribusi menjadi default.

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 HOST dalam definisinya adalah alamat IP, akses ke kamus tersebut dapat gagal setelah migrasi karena perubahan alamat IP. Anda harus mengonfirmasi ulang HOST kluster 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.

    Penting

    Anda 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

  1. Pastikan konfigurasi system.part_log dan system.query_log dalam 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>
  2. Setelah memodifikasi konfigurasi, jalankan pernyataan drop table system.part_log dan drop table system.query_log. Menyisipkan data ke tabel bisnis secara otomatis membuat ulang tabel system.part_log dan system.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.

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

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.

  1. 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');
  2. 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>';
  3. 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>;
  4. 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>;
Penting

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

  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 kiri, pilih Data Migration and Synchronization > Migration from ClickHouse.

  4. Di halaman tugas migrasi, klik Create Migration Task.

    1. Konfigurasikan instans sumber dan tujuan.

      Konfigurasikan pengaturan berikut dan klik Test Connectivity and Proceed.

      Catatan

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

      Penting

      Anda 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=1 memilih 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=1 memilih 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******

    2. Konfirmasi konten migrasi.

      Tinjau dengan cermat informasi tentang data yang akan dimigrasikan di halaman, lalu klik Next: Pre-detect and Start Synchronization.

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

        1. Tinjau dengan cermat bagaimana proses migrasi data memengaruhi instans.

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

  1. Lihat TairPDBShardingIOBandwidth kluster tujuan untuk menentukan kecepatan tulis aktualnya. Untuk informasi tentang cara melihat TairPDBShardingIOBandwidth, lihat Melihat data pemantauan kluster.

  2. Bandingkan kecepatan tulis kluster tujuan dan sumber.

    1. Jika kecepatan tulis kluster tujuan lebih besar dari kluster sumber: Migrasi kemungkinan berhasil. Lanjutkan ke Langkah 7.

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

  1. Login ke Konsol ApsaraDB for ClickHouse.

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

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

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

      Catatan

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

Penting

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:

  1. 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>;
  2. Tunggu hingga progres migrasi mencapai 100% dan migrasi selesai sepenuhnya.

  3. Hubungkan ke kluster tujuan dan gunakan pernyataan DDL yang disimpan sebelumnya untuk membangun ulang tabel mesin Kafka/RabbitMQ dan tampilan materialisasi downstream-nya.

    Penting

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

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

  1. Login ke Konsol ApsaraDB for ClickHouse.

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

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

  4. Untuk tugas migrasi target, klik Complete Migration di kolom Actions.

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

  1. 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')
    ))
  2. Login ke kluster tujuan dan gunakan fungsi remote untuk 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.

  • Migrasi dihentikan paksa. Skema database dan tabel di instans tujuan mungkin tidak lengkap dan tidak dapat digunakan.

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

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

  1. Login ke Konsol ApsaraDB for ClickHouse.

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

  3. Di panel navigasi kiri, pilih Data Migration and Synchronization > Migration from ClickHouse.

  4. Di kolom Actions untuk tugas migrasi target, 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, lalu klik ID kluster target.

  3. Di panel navigasi kiri, pilih Data Migration and Synchronization > Migration from ClickHouse.

  4. Di kolom Actions untuk tugas migrasi target, klik Cancel Migration.

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

  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 harus memiliki izin baca/tulis DML, izin pengaturan, dan izin DDL.

    old password

    Kata sandi untuk akun tersebut.

    Catatan

    Database system adalah database sistem dan tidak perlu dimigrasikan. Filter database 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.

    Atau, Anda dapat langsung mengkueri semua nama database dan tabel dari tabel sistem.

    SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';
    Catatan

    Jika nama tabel yang dikueri diawali dengan .inner., itu adalah representasi internal tampilan materialisasi dan tidak perlu dimigrasikan. Filter tabel ini.

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

    Catatan

    Sebelum 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.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 harus memiliki izin baca/tulis DML, izin pengaturan, dan izin DDL.

    new password

    Kata sandi untuk akun tersebut.

Langkah 2: Migrasi data

Fungsi remote

  1. (Opsional) Saat memigrasikan data ke instans ApsaraDB for ClickHouse, pertimbangkan menyesuaikan parameter network_compression_method untuk mengurangi lalu lintas jaringan.

    • Untuk memodifikasi sementara network_compression_method di instans ApsaraDB for ClickHouse tujuan, jalankan perintah berikut.

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

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

    Untuk versi 20.8, pertama gunakan 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, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;

    Parameter:

    Penting

    Gunakan parameter _partition_id untuk memfilter data. Ini mengurangi penggunaan resource.

    (Opsional) Untuk mendapatkan partition_id dan jumlah part, kueri dari tabel system.parts dengan menjalankan 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 harus port TCP.

    ApsaraDB for ClickHouse

    Gunakan titik akhir internal VPC instans sumber, bukan titik akhir publik.

    Penting

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

Tabel lokal di kluster yang dikelola sendiri tidak memiliki tabel terdistribusi unik.

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 sesuai dengan beberapa tabel terdistribusi.

Hapus tabel terdistribusi yang berlebihan di kluster yang dikelola sendiri dan simpan hanya satu.

MergeTree table on a multi-replica cluster.

Kluster yang dikelola sendiri adalah kluster multi-replika tetapi berisi tabel non-replikasi. Migrasi tidak didukung karena data tidak konsisten di seluruh replika.

Mengapa tabel non-replikasi tidak diizinkan saat Anda melakukan penskalaan atau migrasi instans multi-replika?

Data reserved table on destination cluster.

Tabel yang akan dimigrasikan sudah ada dan berisi data di kluster tujuan.

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

Bangun ulang tabel terdistribusi di kluster yang dikelola sendiri untuk memastikan skemanya konsisten dengan tabel lokal.

Insufficient storage space.

Kluster tujuan memiliki ruang penyimpanan yang tidak mencukupi.

Tingkatkan ruang penyimpanan disk kluster tujuan. Pastikan kluster tujuan memiliki total ruang penyimpanan minimal 1,2 kali ruang yang digunakan kluster yang dikelola sendiri. Untuk informasi lebih lanjut, lihat Penskalaan vertikal dan horizontal kluster kompatibel komunitas.

Missing system table.

Tabel sistem tidak ada di kluster yang dikelola sendiri.

Modifikasi file konfigurasi config.xml kluster yang dikelola sendiri untuk membuat tabel sistem yang diperlukan. Untuk informasi lebih lanjut, lihat Langkah 1: Periksa kluster yang dikelola sendiri dan aktifkan tabel sistem.

The table is incomplete across different nodes.

Tabel tidak ada di beberapa node.

Buat tabel dengan nama yang sama di shard berbeda. Untuk tabel internal tampilan materialisasi, ganti nama tabel internal, lalu bangun ulang tampilan materialisasi untuk mengarah ke tabel yang diganti namanya. Untuk informasi lebih lanjut, lihat Tabel internal tampilan materialisasi tidak konsisten di seluruh shard.

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:

Catatan

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

    Catatan

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

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

      1. Login ke instans sumber.

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

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

        Penting

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