All Products
Search
Document Center

ApsaraDB for ClickHouse:Skalabilitas vertikal dan horizontal untuk kluster Edisi Kompatibel Komunitas

Last Updated:Jul 04, 2026

Untuk menyesuaikan dengan kebutuhan bisnis yang berubah, Anda dapat menyesuaikan konfigurasi atau ukuran kluster Alibaba Cloud ClickHouse Community-Compatible Edition. Anda dapat melakukan skalabilitas vertikal dan horizontal pada kluster Alibaba Cloud ClickHouse guna mencapai keseimbangan optimal antara biaya dan performa.

Ikhtisar skalabilitas vertikal dan horizontal

Skalabilitas vertikal lebih cepat dan kurang mengganggu bisnis dibandingkan skalabilitas horizontal. Jika performa kluster tidak mencukupi, pertimbangkan terlebih dahulu skalabilitas vertikal.

Metode penskalaan

Kasus Penggunaan

Cara kerja

Dampak

Tindakan

Skalabilitas vertikal

Menyesuaikan resource node ketika kapasitas CPU, memori, atau disk tidak mencukupi atau berlebih.

Meningkatkan atau mengurangi spesifikasi node, kapasitas penyimpanan, dan spesifikasi ZooKeeper untuk kluster Alibaba Cloud ClickHouse Community-Compatible Edition, sehingga menyesuaikan daya komputasi, kapasitas penyimpanan, dan kemampuan koordinasi terdistribusi kluster tersebut.

Catatan

Anda tidak dapat menggunakan penskalaan vertikal untuk mengurangi kapasitas penyimpanan. Solusi berikut tersedia untuk mengurangi kapasitas penyimpanan:

  • Untuk instans multi-node, Anda dapat melakukan scale-in pada satu node untuk mengurangi kapasitas penyimpanan sesuai kebutuhan bisnis Anda.

  • Untuk instans single-node, Anda dapat membuat instans baru dan melakukan migrasi data untuk mengurangi kapasitas penyimpanan.

Upgrade tipe penyimpanan atau peningkatan kapasitas penyimpanan untuk kluster Alibaba Cloud ClickHouse Community-Compatible Edition tidak memengaruhi instans (berlaku hanya untuk instans yang dibuat setelah 1 Desember 2021). Namun, perubahan spesifikasi kluster atau ZooKeeper akan me-restart kluster.

Penting
  • Penskalaan vertikal memerlukan waktu 5 hingga 10 menit. Waktu yang diperlukan untuk me-restart kluster bergantung pada volume data. Semakin banyak database, tabel, dan data dingin yang dimiliki kluster, semakin lama proses restart berlangsung.

  • Untuk kluster dual-replika, penskalaan dapat menyebabkan gangguan koneksi sementara saat permintaan beralih antar replika. Lakukan penskalaan selama jam sepi dan pastikan aplikasi Anda memiliki mekanisme retry.

  • Kluster single-replika tidak tersedia selama proses penskalaan. Lakukan operasi ini selama jam sepi atau saat operasi write dihentikan sementara, serta pastikan aplikasi Anda memiliki mekanisme retry.

  • Jika Anda mengubah spesifikasi ZooKeeper selama jam sibuk, ketidaksesuaian dapat terjadi antara metadata tabel dan data aktual. Lakukan operasi ini selama jam sepi atau saat operasi write dihentikan sementara.

Scale up atau scale down

Scale-out

  • Scale-out dengan migrasi data: Gunakan metode ini ketika data kluster perlu didistribusikan ulang setelah scale-out.

  • Simple scale-out:

    Gunakan metode ini ketika kluster Anda memenuhi kondisi berikut:

    • Sebelum kluster di-scale-out, data ditulis langsung ke tabel lokal atau ke tabel terdistribusi yang kunci sharding-nya diatur ke rand.

    • Penyeimbangan ulang data antar node tidak diperlukan.

Penting

Jangan gunakan simple scale-out untuk kluster yang berisi tabel dengan engine seperti ReplacingMergeTree, CollapsingMergeTree, atau VersionedCollapsingMergeTree. Data dalam jenis tabel tersebut hanya dapat digabungkan (merge) pada node yang sama. Simple scale-out menyebarkan data yang perlu digabungkan ke node berbeda, sehingga mencegah proses merge.

Scale-out dengan migrasi data: Menambah jumlah node dalam kluster Alibaba Cloud ClickHouse Community-Compatible Edition untuk melakukan skalabilitas horizontal daya komputasi. Data yang sudah ada dimigrasikan dan didistribusikan ulang.

Simple scale-out: Menambah jumlah node dalam kluster Alibaba Cloud ClickHouse Community-Compatible Edition untuk melakukan skalabilitas horizontal daya komputasi. Metode ini digunakan ketika data ditulis langsung ke tabel lokal dan penyeimbangan ulang data antar node tidak diperlukan.

  • Operasi DDL dilarang selama seluruh proses scale-out.

  • Penggunaan CPU dan memori kluster meningkat selama proses scale-out. Perkiraan overhead resource kurang dari 5 core CPU dan 20 GB memori per node.

  • Setelah scale-out selesai, akan terjadi periode operasi merge berfrekuensi tinggi. Hal ini meningkatkan penggunaan I/O dan dapat menyebabkan latensi yang lebih tinggi pada permintaan bisnis.

Scale out dan scale in

Scale-in

  • Scale-in standar:

    • Mengurangi jumlah node untuk menghemat biaya.

    • Node di-offline secara acak. Anda tidak dapat menentukan node mana yang akan dihapus.

  • Scale in dengan menentukan node: Meng-offline node tertentu untuk kluster dengan spesifikasi penyimpanan besar.

Mengurangi jumlah node dalam kluster Alibaba Cloud ClickHouse Community-Compatible Edition untuk menekan biaya.

  • Operasi DDL dilarang selama seluruh proses scale-in.

  • Penggunaan CPU dan memori kluster meningkat selama proses scale-in. Perkiraan overhead resource kurang dari 5 core CPU dan 20 GB memori per node.

  • Setelah scale-in selesai, akan terjadi periode operasi merge berfrekuensi tinggi. Hal ini meningkatkan penggunaan I/O dan dapat menyebabkan latensi yang lebih tinggi pada permintaan bisnis.

Scale out dan scale in

Prasyarat

  • Kluster merupakan kluster Alibaba Cloud ClickHouse Community-Compatible Edition.

  • Status kluster adalah Running.

  • Kluster tidak memiliki pesanan perpanjangan yang belum dibayar.

    Catatan

    Login ke Konsol Alibaba Cloud ClickHouse. Di pojok kanan atas halaman, pilih Fee > Expenses and Costs. Di panel navigasi kiri, klik Order Management dan selesaikan pembayaran atau batalkan pesanan.

Catatan penggunaan

  • Skalabilitas vertikal: Anda hanya dapat mengubah spesifikasi ZooKeeper untuk kluster Alibaba Cloud ClickHouse Community-Compatible Edition yang dibuat setelah 1 Desember 2021. Untuk informasi harga spesifikasi ZooKeeper, lihat Harga spesifikasi ZooKeeper untuk Edisi Kompatibel Komunitas.

  • Skalabilitas horizontal:

    • Saat Anda melakukan scale-out pada kluster yang memiliki tabel dengan engine keluarga MergeTree, sistem akan memigrasikan data yang ada ke kluster baru dan mendistribusikannya secara otomatis.

      Konten yang didukung untuk migrasi:

      • Database, kamus data, dan materialized view.

      • skema tabel: semua skema tabel kecuali yang menggunakan engine Kafka atau RabbitMQ.

      • Data: Data dari tabel yang menggunakan engine keluarga MergeTree dimigrasikan secara inkremental.

      Konten yang tidak didukung untuk migrasi:

      • Skema tabel dan data untuk tabel engine Kafka dan RabbitMQ.

        Penting

        Selama perubahan konfigurasi, data dimigrasikan ke instans baru, dan traffic akhirnya dialihkan ke instans baru tersebut. Untuk mencegah data terpecah antara Kafka dan RabbitMQ, hapus terlebih dahulu tabel engine Kafka dan RabbitMQ dari kluster sumber. Buat ulang setelah perubahan konfigurasi selesai.

      • Data dalam tabel non-MergeTree, seperti tabel eksternal dan tabel keluarga Log.

      Penting

      Selama proses penskalaan, Anda harus menangani konten yang tidak didukung secara manual sesuai prosedur yang dijelaskan.

    • Operasi DDL dilarang selama seluruh proses penskalaan horizontal. Jika aturan ini dilanggar, validasi data dapat gagal dan menyebabkan penskalaan gagal.

    • Setelah scale-out, alamat IP internal node berubah. Jika aplikasi Anda bergantung pada alamat IP node untuk menulis dan mengakses data, Anda harus memperoleh Blok CIDR VPC baru dari kluster tersebut. Untuk informasi lebih lanjut, lihat Peroleh Blok CIDR VPC kluster.

    • Hanya kluster berbasis disk lokal yang mendukung scale-in dengan menentukan node. Dalam mode ini, data pada node yang di-offline akan hilang. Dalam mode scale-in standar, sistem tidak kehilangan data tetapi mendistribusikannya ulang.

  • Setelah konfigurasi kluster diubah, akan terjadi periode operasi merge berfrekuensi tinggi. Hal ini meningkatkan penggunaan I/O dan dapat menyebabkan latensi yang lebih tinggi pada permintaan bisnis. Rencanakan terlebih dahulu untuk memitigasi potensi dampak latensi permintaan. Untuk informasi cara menghitung durasi merge, lihat Hitung durasi merge setelah migrasi.

  • Selama perubahan konfigurasi kluster, penggunaan CPU dan memori meningkat. Perkiraan overhead resource kurang dari 5 core CPU dan 20 GB memori per node.

Penagihan

Setelah Anda mengubah konfigurasi kluster, biayanya berubah. Biaya aktual yang ditampilkan di konsol berlaku. Untuk informasi lebih lanjut, lihat Penagihan untuk perubahan konfigurasi.

Scale up dan scale down

Penting

Untuk informasi tentang dampak penskalaan vertikal, lihat Ikhtisar skalabilitas vertikal dan horizontal dan Catatan penggunaan.

  1. Login ke Konsol Alibaba Cloud ClickHouse. Di pojok kiri atas halaman, pilih wilayah tempat kluster Anda berada.

  2. Di halaman Clusters, klik Clusters of Community-compatible Edition.

  3. Pada kolom Actions untuk kluster target, klik Change Configurations.

  4. Pada dialog Change Configurations, pilih Scale Up atau Scale Down, lalu klik OK.

  5. Di halaman Change Specification atau Scale Down, pilih konfigurasi yang diinginkan sesuai kebutuhan bisnis Anda.

    Catatan
    • Anda tidak dapat mengubah Storage Capacity atau Storage Type dan Specification secara bersamaan saat Anda Change Specification.

    • Secara default, kluster dilengkapi spesifikasi ZooKeeper 4 core CPU dan 8 GB memori. Di halaman Monitoring and Alerting, lihat metrik ZooKeeper pada panel Cluster Monitoring untuk memeriksa bottleneck resource. Jika spesifikasi default tidak mencukupi, segera lakukan scale-up.

  6. Klik Buy and Start dan selesaikan pembayaran sesuai petunjuk.

  7. Di halaman Paid, klik Console.

  8. Di halaman Clusters of Community-compatible Edition, lihat status kluster target di kolom Status.

    Catatan
    • Setelah Anda mengubah Storage Capacity, perubahan berlaku segera dan status kluster tetap Running.

    • Setelah Anda mengubah Specification dan ZooKeeper Specifications, tunggu sekitar 10 hingga 15 menit. Operasi scale-up atau scale-down berhasil jika status kluster berubah dari Changing Specification menjadi Running.

Scale out dan scale in

Penting

Untuk informasi tentang dampak penskalaan horizontal, lihat Ikhtisar skalabilitas vertikal dan horizontal dan Catatan penggunaan.

Langkah 1: Catat dan hapus tabel Kafka/RabbitMQ

Fitur penskalaan di konsol tidak dapat langsung memigrasikan tabel engine Kafka dan RabbitMQ. Sebelum menskala kluster, Anda harus mencatat statement DDL untuk tabel-tabel tersebut dan menghapusnya dari kluster agar tidak mengganggu tugas penskalaan.

  1. Login ke kluster dan jalankan statement berikut untuk mengkueri semua tabel engine Kafka dan RabbitMQ beserta dependensi downstream-nya.

    /*
    create_table_query: Statement definisi tabel.
    dependencies_database: Database yang bergantung pada tabel tersebut.
    dependencies_table: Nama tabel yang bergantung pada tabel tersebut.
    Anda dapat menggunakan dependencies_database dan dependencies_table untuk mengidentifikasi materialized view yang bergantung pada tabel Kafka/RabbitMQ.
    */
    SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');
  2. Lihat definisi materialized view untuk memeriksa apakah tabel target-nya merupakan tabel implisit.

    /*
    Lihat definisi materialized view.
    Jika tabel target materialized view adalah tabel implisit, perhatikan hal berikut:
    Saat Anda menghapus materialized view, tabel implisit juga dihapus, sehingga menyebabkan kehilangan data.
    Contoh: Jika klausa TO tidak ditentukan dalam CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name],
    sistem secara otomatis membuat tabel implisit dengan format '.inner_id.<TABLE_UUID>' atau '.inner.<TABLE>'.
    */
    SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>';
  3. Jika materialized view dibuat tanpa klausa TO, sistem secara otomatis menghasilkan tabel target implisit dengan awalan .inner atau .inner_id. Tabel implisit ini dimigrasikan ke node baru selama penskalaan, tetapi karena mekanisme penamaan internal, membuat ulang materialized view asli secara langsung dapat menyebabkan konflik penamaan. Oleh karena itu, Anda harus terlebih dahulu mengganti nama tabel target implisit tersebut menjadi nama tabel biasa.

    -- Ganti nama tabel target implisit menjadi nama tabel biasa (jalankan di semua node).
    RENAME TABLE <database>.`.inner_id.<uuid>` TO <database>.<new_target_table_name> ON CLUSTER default;
  4. Hapus materialized view dan tabel engine Kafka/RabbitMQ.

    Penting

    Anda harus menghapus materialized view yang mereferensi tabel Kafka/RabbitMQ sebelum menghapus tabel engine Kafka/RabbitMQ. Jika tidak, operasi penskalaan akan gagal.

    -- Hapus materialized view terlebih dahulu.
    DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;
    
    -- Lalu, hapus tabel engine Kafka/RabbitMQ.
    DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;
Penting

Pastikan untuk menyimpan semua statement DDL yang telah dicatat. Anda akan memerlukannya untuk membuat ulang tabel-tabel tersebut di kluster yang telah diskala nanti. Jika Anda melakukan operasi RENAME, gunakan klausa TO untuk mengarahkan ke tabel target yang telah diganti namanya saat membuat ulang materialized view. Untuk informasi lebih lanjut, lihat CREATE MATERIALIZED VIEW.

Jika kluster tidak berisi tabel engine Kafka/RabbitMQ, Anda dapat melewati Langkah 1, Langkah 4, Langkah 5, dan Langkah 6, serta mulai dari Langkah 2.

Langkah 2: Backup data tabel non-MergeTree

  1. Login ke kluster dan jalankan statement berikut untuk mengidentifikasi tabel non-MergeTree yang perlu dimigrasikan datanya.

    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. Backup data tersebut.

    Backup data bisnis dalam tabel non-MergeTree. Untuk informasi lebih lanjut, lihat Backup data ke OSS.

Langkah 3: Scale in di konsol

  1. Login ke Konsol Alibaba Cloud ClickHouse. Di pojok kiri atas halaman, pilih wilayah tempat kluster Anda berada.

  2. Di halaman Clusters, klik Clusters of Community-compatible Edition.

  3. Pada kolom Actions untuk kluster target, klik Change Configurations.

  4. Pada dialog Change Configurations, pilih Scale Out atau Scale In, lalu klik OK.

  5. Di jendela pemeriksaan scale-out atau scale-in, lihat status pemeriksaan.

    Catatan

    Saat Anda memasuki jendela pemeriksaan untuk Scale Out, Migration Expansion dipilih secara default. Untuk memilih Simple Expansion, klik Previous di halaman ini. Di dialog Scale-out, pilih Simple Expansion dan klik Next untuk menuju halaman Change Specification.

    Jika kluster berisi tabel engine Kafka/RabbitMQ, lakukan Langkah 4 untuk membuat ulang tabel engine Kafka/RabbitMQ di kluster saat tugas penskalaan memasuki tahap Data Migration (setelah migrasi skema tabel selesai). Hal ini memungkinkan data inkremental kembali mengalir dan disinkronkan ke node baru.

    Sebelum jendela penangguhan write yang dikonfigurasi dimulai, lakukan Langkah 5 untuk menghapus tabel engine Kafka/RabbitMQ dan materialized view downstream-nya dari kluster. Hal ini mencegah backlog pesan selama jendela penangguhan write yang dapat menyebabkan ketidakkonsistenan data.

    • Jika pemeriksaan berhasil, klik Next.

    • Jika pemeriksaan gagal, perbaiki masalah sesuai petunjuk di halaman tersebut dan klik Retry Detection. Setelah pemeriksaan berhasil, klik Next.

      Alasan umum kegagalan pemeriksaan scale-out meliputi:

      • Tabel terdistribusi unik tidak ditemukan: Tabel lokal tidak memiliki tabel terdistribusi yang sesuai. Anda harus membuatnya.

      • Tabel terdistribusi yang sesuai tidak unik: Tabel lokal memiliki lebih dari satu tabel terdistribusi. Hapus tabel terdistribusi tambahan dan simpan hanya satu.

      • Tabel engine Kafka/RabbitMQ tidak didukung: Kluster berisi tabel engine Kafka atau RabbitMQ. Anda harus menghapusnya.

      • Tabel MergeTree non-replikasi dalam instans multi-replika: Data tidak konsisten antar replika, yang menyebabkan error migrasi data selama penskalaan.

      • Kolom tabel terdistribusi dan tabel lokal tidak konsisten: Anda harus menyamakan kolom-kolom tersebut. Jika tidak, akan terjadi error migrasi data selama penskalaan.

      • Tabel tidak ada di beberapa node: Anda harus membuat tabel dengan nama yang sama di shard berbeda. Untuk tabel inner materialized view, kami sarankan Anda mengganti nama tabel inner tersebut lalu membuat ulang materialized view untuk mengarah ke tabel inner yang telah diganti namanya. Untuk informasi lebih lanjut, lihat Tabel inner materialized view tidak konsisten di seluruh shard.

  6. Di halaman Change Specification atau Scale Down, konfigurasikan jumlah Server Nodes dan jendela penangguhan write.

    Catatan

    Jendela penangguhan write adalah periode waktu yang dikonfigurasi oleh pelanggan di mana kernel diizinkan untuk menghentikan penulisan. Logika migrasi internal menentukan apakah akan menangguhkan penulisan berdasarkan logika berikut: Jika waktu saat ini berada dalam jendela penangguhan write dan data yang tersisa dapat dimigrasikan dalam waktu 10 menit, sistem secara otomatis memasuki status penangguhan write. Selama penangguhan, backend terus memigrasikan data hingga semua data tersinkronisasi. Setelah migrasi selesai, sistem secara otomatis keluar dari status penangguhan write.

    Migrasi data terjadi selama penskalaan kluster. Untuk memastikan migrasi berhasil, jendela penangguhan write harus memenuhi persyaratan berikut:

    • Kami menyarankan Anda mengatur jendela penangguhan write minimal 30 menit.

    • Penskalaan harus selesai dalam waktu 5 hari setelah perubahan konfigurasi dibuat. Oleh karena itu, waktu akhir jendela penangguhan write untuk kluster sumber tidak boleh lebih dari tanggal saat ini + 5 hari.

    • Untuk meminimalkan dampak pada bisnis Anda, kami menyarankan Anda mengatur jendela penangguhan write pada jam sepi.

  7. Klik Buy and Start dan selesaikan pembayaran sesuai petunjuk.

  8. Di halaman Purchase successful, klik Console.

  9. Di halaman Clusters of Community-compatible Edition, lihat status kluster target di kolom Status.

Catatan

Penskalaan horizontal diperkirakan memerlukan waktu 30 menit atau lebih. Durasi tergantung pada volume data. Status kluster di konsol menunjukkan status eksekusi tugas aktual.

Langkah 4: Buat ulang tabel Kafka/RabbitMQ

Saat tugas penskalaan memasuki tahap Data Migration (setelah migrasi skema tabel selesai), gunakan statement DDL yang telah Anda simpan untuk membuat ulang tabel engine Kafka/RabbitMQ dan materialized view downstream-nya. Setelah dibuat ulang, data inkremental kembali mengalir dan secara otomatis disinkronkan ke node kluster baru.

Penting

Jika Anda melakukan operasi RENAME pada tabel target implisit di Langkah 1, gunakan klausa TO untuk mengarah ke tabel target yang telah diganti namanya saat membuat ulang materialized view. Untuk informasi lebih lanjut tentang klausa TO, lihat CREATE MATERIALIZED VIEW.

-- Buat ulang tabel engine Kafka/RabbitMQ.
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;

-- Buat ulang materialized view (gunakan klausa TO untuk mengarah ke tabel target yang telah 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 5: Hapus tabel Kafka/RabbitMQ sebelum penangguhan write

Sebelum jendela penangguhan write yang dikonfigurasi dimulai, hapus tabel engine Kafka/RabbitMQ dan materialized view downstream-nya untuk menghentikan penulisan data inkremental dan memastikan konsistensi sinkronisasi data akhir.

-- Hapus materialized view terlebih dahulu.
DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;

-- Lalu, hapus tabel engine Kafka/RabbitMQ.
DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;

Langkah 6: Buat ulang tabel Kafka/RabbitMQ setelah penskalaan

Setelah tugas penskalaan selesai, gunakan statement DDL yang telah Anda simpan untuk membuat ulang tabel engine Kafka/RabbitMQ dan materialized view downstream-nya di kluster yang telah diskala guna memulihkan pipeline konsumsi data inkremental.

Penting

Jika Anda melakukan operasi RENAME pada tabel target implisit di Langkah 1, gunakan klausa TO untuk mengarah ke tabel target yang telah diganti namanya saat membuat ulang materialized view. Untuk informasi lebih lanjut tentang klausa TO, lihat CREATE MATERIALIZED VIEW.

-- Buat ulang tabel engine Kafka/RabbitMQ.
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;

-- Buat ulang materialized view (gunakan klausa TO untuk mengarah ke tabel target yang telah 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 7: Migrasikan data tabel non-MergeTree

Login ke kluster dan gunakan OSS untuk memigrasikan data yang telah Anda backup di Langkah 2. Untuk informasi lebih lanjut, lihat Impor data dari OSS.