หากต้องการเพิ่มทาสมากขึ้นในการตั้งค่าการจำลองแบบ MySQL โดยไม่ทำให้เกิดปัญหาด้านประสิทธิภาพให้พิจารณาใช้สถาปัตยกรรมการจำลองแบบหลายชั้นแทนที่จะเชื่อมต่อทาสทั้งหมดโดยตรงกับแหล่งหลัก เมื่อทาสจำนวนมากเชื่อมต่อโดยตรงกับแหล่งเดียวมันจะเพิ่มการโหลดบนแหล่งที่มาเนื่องจากทาสแต่ละคนที่รักษาการเชื่อมต่อและแหล่งที่จำเป็นในการส่งข้อมูลบันทึกไบนารีไปยังแต่ละอันซึ่งอาจกลายเป็นเครือข่ายและคอขวดประสิทธิภาพ แต่ให้กำหนดค่าการจำลองแบบตามลำดับชั้นโดยให้แหล่งที่มาหลักทำซ้ำกับหนึ่งหรือสองสามแบบจำลองกลางซึ่งจะทำซ้ำไปยังส่วนที่เหลือของทาส วิธีนี้จะช่วยลดจำนวนการเชื่อมต่อโดยตรงไปยังหลักและกระจายโหลดการจำลองแบบเท่า ๆ กันทั่วทั้งเซิร์ฟเวอร์
แบบจำลองกลางจะต้องกำหนดค่าให้บันทึกการอัปเดตไบนารีด้วยตนเอง (ด้วย `log_slave_updates` ที่เปิดใช้งาน) ดังนั้นพวกเขาจึงสามารถใช้เป็นแหล่งสำหรับการจำลองแบบดาวน์สตรีม การตั้งค่านี้สร้างห่วงโซ่การจำลองแบบหรือต้นไม้อย่างมีประสิทธิภาพซึ่งสามารถปรับปรุงประสิทธิภาพและความสามารถในการปรับขนาดได้อย่างมีนัยสำคัญ
นอกจากนี้โหมดการจำลองแบบมีบทบาทสำคัญในประสิทธิภาพและความสอดคล้องของข้อมูล MySQL รองรับโหมดการจำลองแบบแบบอะซิงโครนัสและกึ่งซิงโครนัส การจำลองแบบแบบอะซิงโครนัสช่วยให้เซิร์ฟเวอร์หลักดำเนินการกับธุรกรรมโดยไม่ต้องรอทาสปรับปรุงการเขียนปริมาณงาน แต่อาจทำให้เกิดความล่าช้าในการจำลองแบบ การจำลองแบบกึ่งซิงโครนัสช่วยให้มั่นใจได้ว่าอย่างน้อยหนึ่งทาสยอมรับการทำธุรกรรมก่อนที่จะทำการบังคับให้เพิ่มความสอดคล้องของข้อมูลด้วยค่าใช้จ่ายเล็กน้อยเพื่อเวลาแฝง ปรับการตั้งค่าเหล่านี้ตามข้อกำหนดความสอดคล้องและความหน่วงของแอปพลิเคชัน
เพื่อเพิ่มประสิทธิภาพเพิ่มเติมให้ปรับเธรดการจำลองแบบบนทาส จาก MySQL 5.6 เป็นต้นไปรองรับการจำลองแบบแบบหลายเธรดซึ่งช่วยให้เธรด SQL หลายตัวสามารถใช้เหตุการณ์บันทึกรีเลย์แบบขนาน สิ่งนี้สามารถลดความล่าช้าในการจำลองแบบโดยเฉพาะอย่างยิ่งเมื่อภาระงานเกี่ยวข้องกับฐานข้อมูลหรือตารางที่แตกต่างกันมากมายที่สามารถประมวลผลได้อย่างอิสระโดยหลายเธรด
การกำหนดค่าดิสก์ I/O ก็มีความสำคัญเช่นกัน: วางบันทึกรีเลย์และไฟล์ฐานข้อมูลบนไดรฟ์ทางกายภาพแยกต่างหากเพื่อลดการโต้แย้ง I/O สิ่งนี้สามารถช่วยให้ทาสทันกับกระแสการจำลองแบบได้อย่างมีประสิทธิภาพมากขึ้น
ในสภาพแวดล้อมที่มีขนาดใหญ่ให้พิจารณาการแยกความรับผิดชอบโดยการมอบหมายฐานข้อมูลหรือตารางต่าง ๆ ให้กับแบบจำลองที่แตกต่างกันเพื่อปรับสมดุลการโหลดและป้องกันการโต้แย้งในแบบจำลองเดียว
เมื่อเพิ่มทาสใหม่เป็นสิ่งสำคัญที่จะต้องจัดเตรียมอย่างถูกต้อง:
- กำหนด `server_id` ที่ไม่ซ้ำกันเพื่อหลีกเลี่ยงความขัดแย้ง
- เริ่มต้นทาสด้วยสแน็ปช็อตหรือการสำรองข้อมูลของข้อมูลหลักเพื่อให้แน่ใจว่าเริ่มทำซ้ำจากจุดที่สอดคล้องกัน
- กำหนดค่าทาสด้วยรายละเอียดการเชื่อมต่อของแหล่งที่มาและการตั้งค่าการจำลองแบบ
-ใช้ตัวเลือกเช่น `--skip-slave-start` ในระหว่างการเริ่มต้นเพื่อป้องกันการจำลองแบบเริ่มต้นก่อนกำหนด
- เริ่มการจำลองแบบเมื่อการตั้งค่าเสร็จสมบูรณ์และตรวจสอบความล่าช้าหรือข้อผิดพลาดใด ๆ
การสำรองข้อมูลและกู้คืนข้อมูลเกี่ยวกับทาสใหม่สามารถทำได้โดยใช้เครื่องมือเช่น `mysqldump`, percona xtrabackup หรือปลั๊กอิน mysql clone ขึ้นอยู่กับขนาดและความทนทานต่อการหยุดทำงาน ยูทิลิตี้ Xtrabackup สามารถสร้างการสำรองข้อมูลร้อนได้โดยไม่ต้องล็อคฐานข้อมูลต้นฉบับลดเวลาหยุดทำงาน
สำหรับการซิงโครไนซ์และการปรับสมดุลการโหลดเริ่มต้นเครื่องมือเช่น PT-TABLE-SYNC สามารถช่วยให้มั่นใจว่าข้อมูลความสอดคล้องระหว่างมาสเตอร์และทาสหลังจากการฟื้นฟู
เพื่อสรุปกลยุทธ์สำคัญในการเพิ่มทาสมากขึ้นโดยไม่ลดลงประสิทธิภาพรวมถึง:
- ใช้โทโพโลยีการจำลองแบบแบบลำดับชั้นกับแบบจำลองกลาง
- เปิดใช้งาน `log_slave_updates` บนแบบจำลองระดับกลาง
- เลือกระหว่างโหมดการจำลองแบบแบบอะซิงโครนัสและกึ่งซิงโครนัสตามความต้องการความสอดคล้องและความหน่วงแฝง
- ใช้การจำลองแบบหลายเธรดบนทาส
- เพิ่มประสิทธิภาพ I/O โดยแยกบันทึกรีเลย์และไฟล์ข้อมูลทางร่างกาย
- แจกจ่ายเวิร์กโหลดการจำลองแบบโดยฐานข้อมูลหรือการแยกตาราง
- จัดเตรียมทาสใหม่อย่างระมัดระวังด้วยรหัสเซิร์ฟเวอร์ที่ไม่ซ้ำกันและสแน็ปช็อตที่สอดคล้องกัน
- ใช้เครื่องมือสำรองและการซิงโครไนซ์ที่เหมาะสมสำหรับการตั้งค่าเริ่มต้น
- ตรวจสอบความล่าช้าในการจำลองแบบและการวัดประสิทธิภาพอย่างต่อเนื่อง
วิธีการนี้ช่วยรักษาสถาปัตยกรรมการจำลองแบบที่ปรับขนาดได้และมีประสิทธิภาพเมื่อจำนวนทาสเพิ่มขึ้นหลีกเลี่ยงปัญหาคอขวดบนแหล่งหลักและทำให้มั่นใจถึงปริมาณงานการจำลองแบบที่มีประสิทธิภาพ
ขั้นตอนการปฏิบัติโดยละเอียดสำหรับการตั้งค่าและการจัดการสิ่งนี้สามารถพบได้ในเอกสาร MySQL อย่างเป็นทางการและจากผู้ให้บริการ MySQL ที่มีประสบการณ์ซึ่งเชี่ยวชาญด้านความพร้อมใช้งานสูงและสถาปัตยกรรมการจำลองแบบ