All Products
Search
Document Center

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

Last Updated:Jul 03, 2026

Kluster ClickHouse yang dikelola sendiri sering mengalami ketidakstabilan, skalabilitas terbatas, kesulitan dalam peningkatan versi, dan kemampuan pemulihan bencana yang lemah. Akibatnya, semakin banyak pelanggan memigrasikan kluster ClickHouse yang mereka kelola sendiri ke layanan PaaS cloud. Topik ini menjelaskan cara melakukan migrasi dari 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 mengeksekusi 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 di 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 lebih lanjut, 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 berjalan lancar dan mencegah gangguan pada lingkungan produksi.

  1. Buat tugas migrasi untuk memindahkan 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 Kompatibilitas dan Bottleneck 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 untuk 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 berlebih 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 merupakan 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 yang di-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 tersebut 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 mungkin gagal setelah migrasi karena perubahan alamat IP. Anda harus mengonfirmasi ulang HOST kluster ClickHouse saat ini dan membuat kamus data secara manual.

    • Skema tabel: Semua skema tabel kecuali tabel engine Kafka dan RabbitMQ.

    • Data: Migrasi inkremental data dari tabel keluarga MergeTree.

  • Objek dan data yang tidak didukung

    • Tabel engine 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: Migrasi data dingin lambat. Untuk mencegah kegagalan akibat waktu migrasi yang 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 untuk 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 lainnya.

    • 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 yang 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. Ketidaksesuaian 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 engine MaterializedMySQL

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 menggunakan Data Transmission Service (DTS) untuk menyinkronkan data MySQL.

Karena engine MaterializedMySQL tidak lagi 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-topik berikut:

Langkah 4: Catat dan bersihkan tabel engine Kafka/RabbitMQ

Sebelum memulai migrasi, catat definisi semua tabel engine 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 engine 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 engine Kafka/RabbitMQ dan tampilan materialisasi downstream-nya.

    -- Drop tampilan materialisasi terlebih dahulu
    DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>;
    -- Lalu drop tabel engine Kafka/RabbitMQ
    DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Penting

Pastikan untuk 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.

      image

      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:

        Gambar berikut menunjukkan halaman yang muncul setelah pemeriksaan awal berhasil.

        image

        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 Running. 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 tulis 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 solusi.

        Item pemeriksaan

        Persyaratan

        Instance Status Detection

        Tugas migrasi data tidak dapat dimulai jika tugas manajemen (seperti scale-out, upgrade, atau downgrade) sedang berjalan di kluster sumber atau tujuan.

        Storage Space Detection

        Ruang penyimpanan yang tersedia di kluster tujuan harus minimal 1,2 kali ruang penyimpanan 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 memiliki lebih dari satu tabel terdistribusi, pemeriksaan gagal. Untuk mengatasinya, hapus tabel terdistribusi yang berlebih atau buat satu 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 sebanding dengan 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 besar akan berhasil. Lanjutkan ke Langkah 7.

    2. Jika kecepatan tulis kluster tujuan kurang dari kluster sumber: Migrasi kemungkinan besar akan gagal. Kami menyarankan Anda membatalkan tugas migrasi dan menggunakan migrasi manual.

Langkah 7: Pantau migrasi dan hentikan tulis

  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 Data Migration (yaitu, migrasi skema tabel selesai), segera lanjutkan ke Langkah 8 untuk membangun ulang tabel engine Kafka/RabbitMQ di kluster yang dikelola sendiri dan melanjutkan injeksi data inkremental.

      • Pantau dengan cermat Running Information tugas target. Berdasarkan perkiraan waktu tersisa di kolom Running Information, ikuti Langkah 9 untuk menghentikan tulis 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 tulis ke instans sumber.

    Completed

    Tugas migrasi selesai.

    Canceled

    Tugas migrasi dibatalkan.

Langkah 8: Bangun ulang tabel engine 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 engine 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 engine 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 peralihan

Saat perkiraan waktu migrasi tersisa kurang dari 10 menit atau progres migrasi mencapai 99%, lakukan langkah cutover berikut:

  1. Hentikan tulis bisnis. Di kluster yang dikelola sendiri, hapus tabel engine 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 engine 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 engine 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 engine 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, serta memigrasikan skema database dan tabel yang belum diproses. Anda dapat melihat konten yang telah 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 berlebih 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, dan 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 tugas secara paksa dan melewati pemeriksaan volume data, tanpa memigrasikan skema database dan tabel yang tersisa.

  • Migrasi dihentikan secara 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 ketika 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 akan tidak 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 mencadangkan dan memulihkan data.

Metode 2: Gunakan pernyataan INSERT FROM SELECT

Langkah 1: Migrasi metadata

Migrasi metadata ClickHouse terutama tentang migrasi 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 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 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 jarak jauh

  1. (Opsional) Saat Anda memigrasikan data ke instans ApsaraDB for ClickHouse, pertimbangkan untuk 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-tama gunakan fungsi remoteRaw untuk migrasi data. Jika migrasi gagal, Anda dapat meminta peningkatan 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 merupakan 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"

Galat pemeriksaan migrasi dan solusinya

Pesan galat

Deskripsi

Solusi

Missing unique distributed table or sharding_key not set.

Tabel local table di self-managed cluster tidak memiliki distributed table unik yang sesuai.

Buat distributed table yang sesuai untuk local table di self-managed cluster.

The corresponding distributed table is not unique.

local table di self-managed cluster berkorespondensi dengan beberapa distributed tables.

Hapus distributed tables yang berlebih di self-managed cluster dan pertahankan hanya satu saja.

MergeTree table on a multi-replica cluster.

self-managed cluster merupakan multi-replica cluster, tetapi berisi non-replicated table. Migrasi tidak didukung karena data tidak konsisten di seluruh replicas.

Mengapa tabel non-replikasi tidak diperbolehkan saat Anda melakukan scaling atau migrasi instans multi-replika?

Data reserved table on destination cluster.

Tabel yang akan dimigrasikan sudah ada dan berisi data di destination cluster.

Hapus tabel yang bersangkutan dari destination cluster.

Columns of distributed table and local table conflict

Kolom pada distributed table dan local table di self-managed cluster tidak konsisten.

Buat ulang distributed table di self-managed cluster agar skemanya konsisten dengan local table.

Insufficient storage space.

destination cluster memiliki storage space yang tidak mencukupi.

Tingkatkan storage space disk pada destination cluster. Pastikan total storage space destination cluster minimal 1,2 kali ruang yang digunakan oleh self-managed cluster. Untuk informasi lebih lanjut, lihat Vertical and horizontal scaling of community-compatible clusters.

Missing system table.

system table tidak tersedia di self-managed cluster.

Ubah file konfigurasi config.xml pada self-managed cluster untuk membuat system tables yang diperlukan. Untuk informasi lebih lanjut, lihat Step 1: Check the self-managed cluster and enable system tables.

The table is incomplete across different nodes.

Tabel tidak tersedia di beberapa nodes.

Buat tabel dengan nama yang sama di shards yang berbeda. Untuk tabel internal dari materialized view, ubah nama tabel internal tersebut, lalu bangun ulang materialized view agar mengarah ke tabel yang telah diganti namanya. Untuk informasi lebih lanjut, lihat The inner table of a materialized view is inconsistent across shards.

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 yang lebih tinggi pada permintaan layanan. Jika layanan Anda sensitif terhadap latensi baca dan tulis, pertimbangkan untuk meningkatkan tipe instans dan tingkat performa ESSD guna memperpendek periode penggunaan I/O tinggi ini. Untuk informasi selengkapnya, lihat Vertical scaling, scale-out, dan scale-in kluster yang kompatibel dengan komunitas.

Gunakan rumus berikut untuk menghitung waktu merge setelah migrasi:

Catatan

Rumus ini berlaku baik untuk kluster single-replica maupun master-replica.

  • Perkiraan total waktu operasi merge intensif = MAX(hot data merge time, cold data merge time)

    • Waktu merge hot data = jumlah hot data pada satu node * 2 / MIN(instance type bandwidth, disk bandwidth * n)

    • Waktu merge cold data = (jumlah cold data / jumlah node) / MIN(instance type bandwidth, OSS read bandwidth) + (jumlah cold data / jumlah node) / MIN(instance type bandwidth, OSS write bandwidth)

Daftar berikut menjelaskan parameter yang digunakan dalam rumus tersebut:

  • Jumlah hot data pada satu node: Anda dapat melihat nilai ini pada baris Disk Usage - Single-Node Statistics. Untuk informasi selengkapnya, lihat Melihat informasi pemantauan kluster.

  • Instance type bandwidth

    Catatan

    Nilai bandwidth ini tidak mutlak dan bervariasi tergantung pada tipe mesin yang digunakan oleh backend ApsaraDB for ClickHouse. Nilai yang diberikan merupakan nilai 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

  • Disk bandwidth: Temukan nilai ini pada baris Maximum throughput per disk (MB/s) dalam tabel ESSD performance level.

  • n: Jumlah disk pada satu node. Jalankan perintah berikut untuk mendapatkan nilai ini: SELECT count() FROM system.disks WHERE type = 'local';

  • Jumlah cold data: Anda dapat melihat nilai ini pada baris clickhouse_cold_storage_data. Untuk informasi selengkapnya, 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;

  • OSS read bandwidth: Temukan nilai ini pada kolom Total Intranet and Internet Download Bandwidth dalam tabel OSS bandwidth.

  • OSS write bandwidth: Temukan nilai ini pada kolom Total Intranet and Internet Upload Bandwidth dalam tabel OSS bandwidth.

FAQ

  • T: Bagaimana cara mengatasi error "Too many partitions for single INSERT block (more than 100)"?

    J: Error ini terjadi karena operasi INSERT tunggal melebihi batas max_partitions_per_insert_block, yang secara default bernilai 100. Di ClickHouse, setiap operasi penulisan membuat satu data part, dan satu partisi dapat berisi satu atau lebih data part. Jika operasi INSERT tunggal menulis data ke terlalu banyak partisi, jumlah data part yang dihasilkan menjadi berlebihan. Hal ini dapat menurunkan performa merge dan kueri secara signifikan. ClickHouse menerapkan batas ini untuk mencegah degradasi performa.

    Untuk mengatasi masalah ini, Anda dapat menyesuaikan jumlah partisi atau mengubah parameter max_partitions_per_insert_block.

    • Sesuaikan 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 tersebut dengan mengubah parameter max_partitions_per_insert_block. Sintaksnya adalah sebagai berikut:

      SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;
      Catatan

      Komunitas ClickHouse merekomendasikan penggunaan nilai default 100. Jangan mengatur nilai ini terlalu tinggi karena dapat menurunkan performa. Setelah impor data batch selesai, kami menyarankan agar Anda mengembalikan nilai tersebut ke nilai default-nya.

  • 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 balik firewall atau menggunakan daftar putih. Untuk mengatasinya, tambahkan Blok CIDR IPv4 dari vSwitch untuk kluster ApsaraDB for ClickHouse ke daftar putih database yang dikelola sendiri. Informasi tentang cara memperoleh Blok CIDR IPv4 dari vSwitch untuk kluster ApsaraDB for ClickHouse tersedia di View IPv4 CIDR block.

  • T: Saat melakukan scaling atau migrasi instans multi-replika, mengapa tabel non-Replicated tidak diizinkan? Jika sudah 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, konfigurasi multi-replika menjadi tidak efektif. Tool migrasi memilih satu replika secara acak sebagai sumber data dan memigrasikan datanya ke instans tujuan.

      Jika terdapat tabel non-Replicated, data tidak disinkronkan antar replika, sehingga setiap replika menyimpan data yang terisolasi. Karena tool migrasi hanya mengambil data dari satu replika, proses ini menyebabkan kehilangan data. Sebagai contoh, 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 tool migrasi memilih r0 sebagai sumber, hanya data 1, 2, dan 3 yang dimigrasikan ke instans tujuan.

    • Solusi: Jika memungkinkan, hapus tabel non-Replicated di instans sumber. Jika tidak, Anda harus mengganti tabel non-Replicated tersebut 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 mesin (engine)-nya.

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

        Penting

        Anda harus melakukan migrasi ini pada setiap replika. Misalnya, Anda harus menjalankan pernyataan tersebut baik di r0 maupun r1.

        Anda dapat memperoleh alamat IP node untuk pernyataan tersebut 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;