Apakah Anda harus menjalankan perbaikan nodetool pada setiap node?

12

Apakah Anda harus menjalankan nodetool repairsetiap node dalam sebuah cluster, atau apakah Anda hanya perlu menjalankannya pada satu node, dan dari sana Cassandra akan mengurus sisanya?

2rs2ts
sumber

Jawaban:

9

Dalam melihat-lihat dokumentasi, saya mengalami kesulitan menemukan referensi untuk ini, tetapi jawaban singkatnya adalah "ya" Anda perlu menjalankan nodetool repairpada setiap node di cluster Anda. Yang paling dekat yang bisa saya temukan adalah dokumentasi tentang perbaikan node yang menunjukkan bahwa Anda tidak harus menjalankan perbaikan pada lebih dari satu node di cluster Anda sekaligus.

Anda juga dapat menjalankan perbaikan dengan -prflag, yang membatasi operasi perbaikan hingga rentang token pertama yang menjadi tanggung jawab node saat ini. Ini mengurangi duplikasi pekerjaan ketika dijalankan pada node yang tersisa.

Harun
sumber
Jadi jika saya menjalankan dengan -prpada setiap node, apakah itu akan mencakup seluruh keyspace?
2rs2ts
1
@ 2rs2ts Ya, jika Anda menjalankannya -prdi setiap node, itu akan mencakup seluruh ruang tombol.
Aaron
1
Oke ... Saya akan berasumsi, bahwa Anda seharusnya menjalankannya di setiap node tetapi Anda dapat menghemat waktu dengan -prflag.
2rs2ts
1
Saya menambahkan beberapa sumber ke jawaban lain. Sumber ini cukup jelas: "Persyaratan keras untuk frekuensi perbaikan rutin adalah nilai gc_grace_seconds. Jalankan operasi perbaikan setidaknya sekali pada setiap node dalam periode waktu ini." Repairing Nodes
Carl G
5

Bagaimana perilakunya tergantung pada konfigurasi Anda, apa versi Cassandra yang Anda gunakan, dan bagaimana Anda menjalankan perintah perbaikan.

Jika Anda hanya menjalankan nodetool repairpada satu node dalam sebuah cluster, ia akan memperbaiki semua data (rentang token) yang menjadi tanggung jawab node dan juga node lain yang bertanggung jawab atas data tersebut.

Jadi misalnya, jika Anda menjalankan nodetool repairperintah pada satu node di cluster yang diberikan:

  • Jika Anda menjalankan tiga node cluster dengan faktor replikasi tiga semua node akan memiliki semua data dan dengan demikian perbaikan akan dilakukan untuk semua node.
  • Jika Anda menjalankan enam node cluster dengan faktor replikasi 2 data hanya akan diperbaiki pada dua dari enam node. Perbaikan akan perlu dimulai pada dua lagi dari empat node yang tersisa.

Yang mengatakan, adalah mungkin untuk menentukan host apa dan pusat data untuk melakukan perbaikan pada penggunaan -hostsdan -dcflag. Selain itu jika Anda menggunakan -prbendera (yang hanya akan memilih berbagai tanda pertama node bertanggung jawab untuk) Anda akan harus menjalankan nodetool repair -prpada semua node di cluster.

Satu bendera lain yang perlu diingat adalah -incbendera, yang termasuk dalam Cassandra 2.1. Opsi ini hanya akan memperbaiki data baru (data yang belum pernah diperbaiki sebelumnya). Hati-hati saat mengandalkan ini, terutama jika Anda sering menghapus data. ( lebih lanjut tentang ini )

Hal lain yang perlu diingat adalah bahwa cara perbaikan standar dilakukan di Cassandra dapat bervariasi. Pada Cassandra 2.1 saat menjalankannya nodetool repairia melakukan perbaikan sekuensial penuh secara default. Anda akan ingin melihat apa yang versi Anda lakukan.

Untuk lebih banyak membaca tentang topik:

https://www.datastax.com/dev/blog/repair-in-cassandra

Gene
sumber
2
satu-satunya jawaban yang baik di sini
ruruskyi
2

Tidak, Anda tidak harus berjalan di setiap node individual. nodetool repairberjalan pada set node, yang secara jelas dinyatakan dalam dokumentasi .

Anda dapat membatasi node atau bagian dari data yang ingin Anda jalankan perbaikannya. Misalnya, Anda bisa memberikan -propsi untuk rentang partisi, rentang simpul mana yang bertanggung jawab, tetapi ini harus dijalankan di seluruh kluster. Tetapi jika Anda memilih -local, maka node di pusat data lokal node akan diperbaiki.

nkzscorpion
sumber
4
Berjalan nodetool repairpada satu node tidak cukup untuk memperbaiki semua data yang direplikasi pada semua node di semua konfigurasi. Berjalan nodetool repairdi satu simpul hanya akan memperbaiki data yang direplikasi pada simpul itu. (Menambahkan -propsi membatasi perbaikan ke data yang simpul ini merupakan replika pertama.) Tetapi jika Anda memiliki data di cluster Anda yang tidak direplikasi pada simpul ini, maka Anda harus menjalankan nodetool repairnode tambahan.
Carl G
2
"Jika opsi -pr tidak ditentukan, Cassandra memperbaiki semua rentang replika yang berada dalam tanggung jawab node." nodetool repair docs (Yaitu tidak memperbaiki data yang node ini tidak bertanggung jawab untuk mereplikasi.) "Persyaratan keras untuk frekuensi perbaikan rutin adalah nilai gc_grace_seconds. Jalankan operasi perbaikan setidaknya sekali pada setiap node dalam periode waktu ini." Repairing Nodes
Carl G