Redis Cluster เป็นโซลูชันยอดนิยมสำหรับการปรับขนาดการปรับใช้ Redis เพื่อให้ได้ความพร้อมใช้งานที่สูงขึ้นความทนทานต่อความผิดพลาดและข้อมูลที่ให้ข้อมูลในหลายโหนด การกำหนดค่าที่เหมาะสมของ Redis Cluster เกี่ยวข้องกับแนวทางปฏิบัติที่ดีที่สุดหลายประการที่ทำให้มั่นใจได้ว่าประสิทธิภาพความน่าเชื่อถือและการจัดการที่ดีที่สุด
สถาปัตยกรรมคลัสเตอร์และการกำหนดค่าโหนด
Redis Cluster ต้องการอย่างน้อยสามโหนดหลักในการทำงานอย่างน่าเชื่อถือ ตามหลักการแล้วคลัสเตอร์การผลิตควรมีอย่างน้อยหกโหนดโดยแต่ละต้นแบบแต่ละคนมีแบบจำลองหนึ่งหรือมากกว่า การตั้งค่านี้ช่วยให้มั่นใจได้ว่ามีความพร้อมใช้งานสูงช่วยให้การล้มเหลวอัตโนมัติในกรณีที่โหนดต้นแบบใด ๆ ล้มเหลว แต่ละโหนดทำงานในโหมดคลัสเตอร์และต้องเปิดใช้งานการกำหนดค่าเฉพาะรวมถึง::
- `เปิดใช้งานคลัสเตอร์ใช่ 'เพื่อเปิดใช้งานโหมดคลัสเตอร์ในแต่ละอินสแตนซ์ Redis
-`cluster-config-file` ระบุไฟล์ที่บันทึกสถานะโหนดคลัสเตอร์ (เช่น` nodes.conf`)
-`cluster-node-timeout` การกำหนดเวลาสูงสุดที่โหนดสามารถไม่สามารถเข้าถึงได้ก่อนที่จะพิจารณาล้มเหลว (โดยทั่วไปตั้งค่าเป็น 5,000 ถึง 15,000 มิลลิวินาที)
`cluster-config-file` ได้รับการจัดการโดย Redis โดยอัตโนมัติและจะต้องไม่ได้รับการแก้ไขด้วยตนเองเนื่องจากจะรักษาข้อมูลสถานะที่สำคัญเช่นรหัสโหนดการแมปและความเป็นเจ้าของสล็อต แต่ละโหนดกำหนด ID โหนดที่ไม่ซ้ำกันเมื่อเริ่มต้นซึ่งยังคงมีอยู่ตลอดอายุการใช้งานแม้ว่า IP หรือพอร์ตจะเปลี่ยนไป
ฮาร์ดแวร์และการตั้งค่าเครือข่าย
โหนดควรปรับใช้กับเครื่องทางกายภาพหรือเสมือนจริงเพื่อหลีกเลี่ยงจุดล้มเหลวเดียว การเชื่อมต่อเครือข่ายระหว่างโหนดจะต้องอนุญาตทั้งพอร์ตการสื่อสารไคลเอนต์ (โดยทั่วไปแล้ว TCP 6379 หรือพอร์ตบริการที่ใช้งาน) และพอร์ตบัสคลัสเตอร์ (พอร์ตที่สองโดยทั่วไปพอร์ตบริการ TCP + 10,000, เช่น 16379) สำหรับการสื่อสารคลัสเตอร์ internode
กำหนดค่าอินเทอร์เฟซเครือข่ายและไฟร์วอลล์อย่างระมัดระวังเพื่อให้การรับส่งข้อมูลระหว่างโหนดและทางเลือกระหว่างไคลเอนต์และโหนดคลัสเตอร์ การตั้งค่าคำสั่ง `bind` เป็น IP ส่วนตัวเฉพาะแทนที่จะผูกพันกับอินเทอร์เฟซทั้งหมดช่วยเพิ่มความปลอดภัย
การคงอยู่และความทนทานของข้อมูล
เปิดใช้งานกลไกการคงอยู่เช่น Snapshots RDB หรือ AOF (ผนวกไฟล์เท่านั้น) ขึ้นอยู่กับความทนทานของข้อมูลที่ต้องการและการแลกเปลี่ยนประสิทธิภาพ AOF ให้ความทนทานที่ดีขึ้นโดยการบันทึกการดำเนินการเขียนทุกครั้ง แต่อาจเพิ่มเวลาแฝงและค่าใช้จ่ายของ IO การรวมสแนปชอต RDB เข้ากับ AOF สามารถช่วยสมดุลประสิทธิภาพและความทนทาน
คำสั่ง `ภาคผนวกใช่ 'เปิดใช้งานโหมด AOF การตั้งค่าเหล่านี้ควรได้รับการปรับแต่งอย่างรอบคอบตามรูปแบบเวิร์กโหลดและหน้าต่างการสูญเสียข้อมูลที่ยอมรับได้
การจัดการหน่วยความจำและนโยบายการขับไล่
กำหนดค่าการตั้งค่า `maxmemory` เพื่อให้แน่ใจว่า Redis พอดีกับหน่วยความจำที่มีอยู่บนโหนด เลือกนโยบายการขับไล่ที่เหมาะสมโดยใช้ `maxmemory-policy` เช่น` allkeys-lru` เพื่อใช้อัลกอริทึมที่ใช้อย่างน้อยเมื่อเร็ว ๆ นี้ในทุกปุ่มเมื่อถึงขีด จำกัด ของหน่วยความจำ การตรวจสอบการใช้หน่วยความจำที่สอดคล้องกันและอัตราส่วน Hit/Miss เป็นสิ่งสำคัญ
Redis Cluster ทำงานได้ดีที่สุดเมื่อชุดข้อมูลเหมาะกับหน่วยความจำในแต่ละโหนด หลีกเลี่ยงการแลกเปลี่ยนหรือหน่วยความจำที่มากเกินไป
การจัดการสล็อตและการกระจายข้อมูล
คลัสเตอร์แบ่งคีย์สเปซออกเป็น 16,384 แฮชสล็อตซึ่งกระจายไปทั่วโหนดหลักทั้งหมด เมื่อสร้างคลัสเตอร์ให้แน่ใจว่าช่องทั้งหมดจะถูกปกคลุมด้วยโหนดหลัก ไคลเอนต์จะต้องทราบถึงการสอบถามเส้นทางไปยังโหนดที่ถูกต้องตามการคำนวณสล็อตแฮช
หลีกเลี่ยงการดำเนินการที่เกี่ยวข้องกับหลายปุ่มที่แมปกับช่องที่แตกต่างกันเนื่องจากสิ่งเหล่านี้ต้องการคำสั่งข้ามช่องที่มี จำกัด หรือมีประสิทธิภาพน้อยกว่า
ใช้เครื่องมือเช่น `redis-cli-คลัสเตอร์ create` เพื่อ bootstrap clusters พร้อมการจัดสรรสล็อตที่เหมาะสมและการกำหนดแบบจำลองโดยอัตโนมัติ
การกำหนดค่าไคลเอนต์สำหรับการรับรู้คลัสเตอร์
กำหนดค่าไลบรารีไคลเอ็นต์เพื่อจัดการการเปลี่ยนแปลงโทโพโลยีของคลัสเตอร์ Redis อย่างสง่างาม ไลบรารีไคลเอนต์หลายแห่งให้การสนับสนุนคลัสเตอร์รวมถึงการค้นพบอัตโนมัติและการกำหนดค่าใหม่ของโหนดคลัสเตอร์เมื่อล้มเหลวหรือเปลี่ยนสล็อต สิ่งนี้จะช่วยป้องกันข้อผิดพลาดของลูกค้าและปรับปรุงความน่าเชื่อถือในระหว่างการล้มเหลวของโหนดหรือการดำเนินการปรับขนาด
ไคลเอนต์ควรกำหนดค่าให้ลองอีกครั้งในการย้ายหรือถามการเปลี่ยนเส้นทางและรักษามุมมองที่อัปเดตของสถานะคลัสเตอร์
ข้อควรพิจารณาด้านความปลอดภัย
Secure คลัสเตอร์โหนดโดยการเปิดใช้งานการรับรองความถูกต้องด้วยรหัสผ่าน (คำสั่ง `` ต้องการ `คำสั่ง) จำกัด การเข้าถึงเครือข่ายผ่านกฎไฟร์วอลล์และ จำกัด อินเตอร์เฟสที่เปิดเผยผ่านการกำหนดค่า` bind` ใช้การเข้ารหัส TLS หากเป็นไปได้เพื่อปกป้องข้อมูลระหว่างการขนส่ง
ปิดใช้งานโหมดที่ได้รับการป้องกันเมื่อเรียกใช้ REDIS ในโหมดคลัสเตอร์ แต่ตรวจสอบให้แน่ใจว่าการกำหนดค่าเครือข่ายแยกคลัสเตอร์ออกจากไคลเอนต์ที่ไม่น่าเชื่อถือ
การตรวจสอบและบำรุงรักษา
ใช้การตรวจสอบที่ครอบคลุมของสุขภาพคลัสเตอร์รวมถึงความพร้อมใช้งานของโหนดเวลาแฝงการใช้หน่วยความจำการหน่วงเวลาการจำลองแบบและการเปลี่ยนแปลงสถานะของคลัสเตอร์ เครื่องมือเช่น Redis Sentinel แพลตฟอร์มการตรวจสอบของบุคคลที่สามหรือโซลูชันผู้ให้บริการคลาวด์ควรเป็นส่วนหนึ่งของกลยุทธ์การดำเนินงาน
ทดสอบกลไกการล้มเหลวอย่างสม่ำเสมอและดำเนินการรีสตาร์ทโหนดควบคุมหรือปรับขนาดแบบฝึกหัดเพื่อตรวจสอบความยืดหยุ่นของคลัสเตอร์
การปรับแต่งประสิทธิภาพ
ปรับแต่ง Redis และการกำหนดค่าคลัสเตอร์ตามข้อมูลเฉพาะเวิร์กโหลด:
- ลดคำสั่งปิดกั้นและใช้สคริปต์ pipelining หรือ Lua เพื่อเพิ่มประสิทธิภาพการทำงาน
-ปรับ `cluster-node-timeout 'ตามลักษณะเวลาแฝงเครือข่ายเพื่อหลีกเลี่ยงการล้มเหลวที่ผิดพลาด
- ใช้การแฮมที่สอดคล้องกันและการตั้งชื่อคีย์อัจฉริยะเพื่อเพิ่มประสิทธิภาพการแจกแจงสล็อต
- หลีกเลี่ยงกุญแจหรือค่าขนาดใหญ่และพิจารณาการทำลายวัตถุขนาดใหญ่เป็นชิ้นเล็ก ๆ
- ใช้กลไกดั้งเดิมของ Redis Cluster ในการปรับขนาดในแนวนอนโดยการเพิ่มหรือลบโหนดและการปรับสมดุลสล็อต
การสำรองและการกู้คืน
การออกแบบกลยุทธ์การสำรองข้อมูลที่สอดคล้องกับการตั้งค่าคลัสเตอร์ ใช้สแน็ปช็อต RDB เป็นระยะจากโหนดหลักหรือแบบจำลองและจัดเก็บการสำรองข้อมูลภายนอก หลีกเลี่ยงการกู้คืนการสำรองข้อมูลโดยตรงบนคลัสเตอร์สดโดยไม่มีช่องเสียบที่เหมาะสมและการซิงโครไนซ์สถานะโหนด
สำหรับการกู้คืนขั้นตอนการใช้งานที่ Redis แนะนำสำหรับการสร้างกลุ่มใหม่จากการกำหนดค่าและการสำรองข้อมูลที่บันทึกไว้
สรุป
แนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดค่าการกำหนดค่าคลัสเตอร์ Redis:
- การตั้งค่าอย่างน้อยสามโหนดหลักพร้อมแบบจำลองสำหรับการล้มเหลว
-สร้างความมั่นใจในคำสั่งการกำหนดค่าที่เกี่ยวข้องกับคลัสเตอร์ที่เหมาะสม (`` enabled-enabled ', `cluster-config-file`,` cluster-node-timeout')
- การปรับใช้โหนดบนฮาร์ดแวร์ที่เหมาะสมพร้อมการตั้งค่าเครือข่ายที่ถูกต้องสำหรับการสื่อสารกับไคลเอนต์และคลัสเตอร์บัส
- การเปิดใช้งานการคงอยู่และการปรับแต่งนโยบายและนโยบายการขับไล่เพื่อให้ตรงกับความต้องการภาระงาน
- การจัดการสล็อตแฮชได้อย่างมีประสิทธิภาพและทำให้ลูกค้ามั่นใจว่าเป็นกลุ่ม
- การรักษาความปลอดภัยคลัสเตอร์ด้วยการรับรองความถูกต้องและการควบคุมเครือข่าย
- การตรวจสอบสุขภาพของคลัสเตอร์และประสิทธิภาพเป็นประจำ
- การวางแผนสำหรับการสำรองข้อมูลการกู้คืนและการปรับขนาดการดำเนินงานอย่างระมัดระวัง