คุณต้องทำการซ่อมแซม nodetool ในทุก ๆ โหนดหรือไม่


12

คุณต้องรันnodetool repairบนทุก ๆ โหนดในคลัสเตอร์หรือไม่คุณเพียงแค่เรียกใช้บนโหนดเดียวและจากที่นั่น Cassandra จะดูแลส่วนที่เหลือหรือไม่

คำตอบ:


9

ในการดูเอกสารฉันมีเวลายากในการค้นหาการอ้างอิงสำหรับเรื่องนี้ แต่คำตอบสั้น ๆ คือ "ใช่" คุณต้องรันnodetool repairบนแต่ละโหนดในคลัสเตอร์ของคุณ ที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คือเอกสารเกี่ยวกับการซ่อมแซมโหนดซึ่งแนะนำว่าคุณไม่ควรเรียกใช้การซ่อมแซมมากกว่าหนึ่งโหนดในคลัสเตอร์ของคุณในแต่ละครั้ง

คุณยังสามารถรันการซ่อมแซมด้วยการ-prตั้งค่าสถานะซึ่ง จำกัด การดำเนินการซ่อมแซมให้อยู่ในช่วงโทเค็นแรกที่โหนดปัจจุบันรับผิดชอบ สิ่งนี้จะช่วยลดความซ้ำซ้อนของงานเมื่อทำงานบนโหนดที่เหลือ


ดังนั้นถ้าฉันทำงานกับ-prทุก ๆ โหนดมันจะครอบคลุมทั้ง keyspace หรือไม่?
2rs2ts

1
@ 2rs2ts ใช่ถ้าคุณใช้กับ-prทุก ๆ โหนดมันจะครอบคลุมทั้ง keyspace (s)
แอรอน

1
ตกลง ... ฉันจะสมมติว่าคุณควรจะเรียกใช้มันในทุกโหนด แต่คุณสามารถประหยัดเวลาด้วยการ-prตั้งค่าสถานะ
2rs2ts

1
ฉันเพิ่มแหล่งข้อมูลลงในคำตอบอื่น แหล่งที่มานี้ค่อนข้างชัดเจน: "ความต้องการฮาร์ดสำหรับความถี่ในการซ่อมตามปกติคือค่าของ gc_grace_seconds เรียกใช้การดำเนินการซ่อมแซมอย่างน้อยหนึ่งครั้งในแต่ละโหนดภายในช่วงเวลานี้" การซ่อมแซมโหนด
Carl G

5

ลักษณะการทำงานขึ้นอยู่กับการกำหนดค่าของคุณรุ่นของคาสซานดราที่คุณใช้และวิธีการเรียกใช้คำสั่งการซ่อมแซม

หากคุณเพียงแค่เรียกใช้nodetool repairบนโหนดเดียวในคลัสเตอร์มันจะซ่อมแซมข้อมูลทั้งหมด (ช่วงโทเค็น) ที่โหนดนั้นรับผิดชอบและโหนดอื่น ๆ ที่รับผิดชอบข้อมูลนั้น

ตัวอย่างเช่นหากคุณต้องรันnodetool repairคำสั่งบนโหนดเดียวในคลัสเตอร์ที่กำหนด:

  • หากคุณใช้คลัสเตอร์สามโหนดที่มีปัจจัยการจำลองแบบของสามโหนดทั้งหมดจะเป็นเจ้าของข้อมูลทั้งหมดและจะทำการซ่อมแซมสำหรับโหนดทั้งหมด
  • หากคุณกำลังรันคลัสเตอร์หกโหนดที่มีปัจจัยการเรพลิเคทเป็น 2 ข้อมูลจะถูกซ่อมแซมบนสองโหนดหกโหนดเท่านั้น การซ่อมแซมจะต้องเริ่มในสองโหนดที่เหลืออีกสองโหนด

ที่กล่าวมาเป็นไปได้ที่จะกำหนดว่าโฮสต์และดาต้าเซ็นเตอร์ใดทำการซ่อมแซมโดยใช้-hostsและตั้ง-dcค่าสถานะ นอกจากนี้หากคุณใช้-prแฟล็ก (ซึ่งจะเลือกช่วงโทเค็นแรกที่โหนดรับผิดชอบเท่านั้น) คุณจะต้องทำงานnodetool repair -prบนโหนดทั้งหมดในคลัสเตอร์

โปรดจำไว้ว่าอีกหนึ่งธงคือ-incธงซึ่งรวมอยู่ในคาสซานดรา 2.1 ตัวเลือกนี้จะซ่อมแซมข้อมูลใหม่เท่านั้น (ข้อมูลที่ไม่ได้รับการซ่อมแซมก่อนหน้านี้) ระวังเมื่อใช้สิ่งนี้โดยเฉพาะอย่างยิ่งถ้าคุณลบข้อมูลบ่อยครั้ง ( เพิ่มเติมเกี่ยวกับเรื่องนี้ )

สิ่งอื่นที่ต้องจำไว้คือวิธีการซ่อมแซมเริ่มต้นใน Cassandra นั้นอาจแตกต่างกันไป ตั้งแต่ Cassandra 2.1 เมื่อใช้งานnodetool repairจะทำการซ่อมแซมตามลำดับเต็มตามค่าเริ่มต้น คุณจะต้องค้นหาว่าเวอร์ชั่นของคุณทำอะไร

สำหรับการอ่านเพิ่มเติมในหัวข้อ:

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


2
คำตอบเดียวที่ดีที่นี่
ruruskyi

2

ไม่คุณไม่ต้องทำงานบนแต่ละโหนด nodetool repairทำงานบนชุดของโหนดซึ่งจะระบุไว้อย่างชัดเจนในเอกสาร

คุณสามารถ จำกัด โหนดหรือส่วนของข้อมูลที่คุณต้องการเรียกใช้การซ่อมแซม ตัวอย่างเช่นคุณสามารถให้-prตัวเลือกสำหรับช่วงพาร์ทิชันช่วงที่โหนดรับผิดชอบ แต่สิ่งนี้จะต้องทำงานในทั้งคลัสเตอร์ แต่ถ้าคุณเลือก-localแล้วโหนดในศูนย์ข้อมูลท้องถิ่นของโหนดจะได้รับการซ่อมแซม


4
การรันnodetool repairบนโหนดเดียวนั้นไม่เพียงพอที่จะซ่อมแซมข้อมูลที่จำลองแบบแล้วทั้งหมดในโหนดทั้งหมดในการกำหนดค่าทั้งหมด การรันnodetool repairบนโหนดเดียวจะซ่อมแซมข้อมูลที่จำลองแบบบนโหนดนั้นเท่านั้น (การเพิ่ม-prตัวเลือกจะ จำกัด การซ่อมแซมข้อมูลที่โหนดนี้เป็นแบบจำลองแรก) แต่ถ้าคุณมีข้อมูลในคลัสเตอร์ที่ไม่ได้จำลองแบบบนโหนดนี้คุณต้องรันnodetool repairบนโหนดเพิ่มเติม
Carl G

2
"หากไม่ได้ระบุตัวเลือก -pr คาสซานดราจะซ่อมแซมช่วงเรพลิกาทั้งหมดที่อยู่ในความรับผิดชอบของโหนด" เอกสารการซ่อมแซมของ nodetool (เช่นไม่ซ่อมแซมข้อมูลที่โหนดนี้จะไม่รับผิดชอบในการทำซ้ำ) "ความต้องการฮาร์ดสำหรับความถี่ในการซ่อมแซมตามปกติคือค่าของ gc_grace_seconds ดำเนินการซ่อมแซมอย่างน้อยหนึ่งครั้งในแต่ละโหนดภายในช่วงเวลานี้" การซ่อมแซมโหนด
Carl G
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.