มันไม่ฉลาดที่จะเรียกใช้การจำลองแบบบนเซิร์ฟเวอร์จริงหรือไม่?


13

ฉันใคร่ครวญการตั้งค่าการจำลองแบบ Master-Slave สำหรับฐานข้อมูลของฉัน เซิร์ฟเวอร์ทาสจะใช้สำหรับความซ้ำซ้อนและอาจเป็นเซิร์ฟเวอร์รายงาน อย่างไรก็ตามหนึ่งในปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเราได้ใช้พลังงานอย่างเต็มประสิทธิภาพที่ดาต้าเซ็นเตอร์แล้ว ดังนั้นการเพิ่มเซิร์ฟเวอร์ทางกายภาพอื่นไม่ใช่ตัวเลือก

เซิร์ฟเวอร์ฐานข้อมูลที่มีอยู่ของเรานั้นมีการใช้งานไม่เพียงพอเท่าที่ cpu (ค่าเฉลี่ยการโหลดไม่เคยสูงกว่า 1 ใน quad-core) ดังนั้นแนวคิดที่สำคัญคือการโยนในไดรฟ์ใหม่และเพิ่มหน่วยความจำเป็นสองเท่า (จาก 8GB ถึง 16) และเรียกใช้อินสแตนซ์ mysql ที่สองบนเครื่องทางกายภาพเดียวกัน แต่ละอินสแตนซ์จะมีดิสก์แยกต่างหากสำหรับฐานข้อมูล

มีอะไรผิดปกติกับความคิดนี้หรือไม่?

แก้ไข (ข้อมูลเพิ่มเติม): ฉัน (โชคดี) ไม่เคยมีอะไรเลวร้ายเกิดขึ้นพอที่จะลงเซิร์ฟเวอร์ แต่พยายามวางแผนล่วงหน้า แน่นอนว่าเรามีการสำรองข้อมูลทุกคืนที่เราสามารถกู้คืนได้ แต่ฉันคิดว่าการมีข้อมูลที่ซ้ำซ้อนในดิสก์แยกต่างหากจะให้วิธีแก้ปัญหาที่รวดเร็วกว่าถ้าไดรฟ์ของเซิร์ฟเวอร์หลักล้มเหลว (เห็นได้ชัดว่าไม่ใช่ถ้าเครื่องทั้งหมดหายไป)

สำหรับด้านการรายงานตารางใด ๆ ที่เราจะรายงานออกมาก็คือ MyIsam ดังนั้นการอ่านแพง ๆ บนโต๊ะเดียวกันกับที่เขียนไว้สามารถทำให้ชะงักเซิร์ฟเวอร์ได้ การสันนิษฐานของฉันคือการมีเซิร์ฟเวอร์ทาสเพื่อรายงานว่าจะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์หลักตราบใดที่เราขว้าง RAM เพียงพอ (เพราะ cpu โหลดยังไม่มีปัญหา)

คำตอบ:


11

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

สำหรับการแยกผู้ใช้ด้วยเหตุผลด้านสิทธิ์การเข้าถึงอย่างแท้จริง RDBMS ที่ดีจะเสนอวิธีการที่มีประสิทธิภาพมากขึ้น

การรันฐานข้อมูลทั้งสองบนเครื่องเดียวกันจะต้องใช้ RAM มากขึ้นเพื่อให้ทำงานได้อย่างมีประสิทธิภาพเท่ากันเนื่องจากฐานข้อมูลทั้งสองจะแข่งขันกันเพื่อให้มีพื้นที่ว่างเพื่อเก็บบัฟเฟอร์และแคชต่างๆไว้ อาจมีประโยชน์ด้านประสิทธิภาพแม้ว่าผ่านการแยกการโหลด IO หากดาต้าไฟล์สำหรับสลาฟอยู่บนไดรฟ์ฟิสิคัลที่แตกต่างจากต้นแบบ ในกรณีนี้คุณสามารถเรียกใช้รายงานที่ซับซ้อนที่ต้องใช้ดิสก์จำนวนมากอ่านกับสลาฟโดยไม่ต้องแข่งขันกับมาสเตอร์สำหรับแบนด์วิดท์ IO ของไดรฟ์

แก้ไข: ตามที่ DTest ระบุไว้ในความคิดเห็นของเขาด้านล่างประโยชน์อื่น ๆ ที่เป็นไปได้อีกประการหนึ่งของ DB DB (แม้ว่าจะอยู่บนไดรฟ์เดียวกันกับมาสเตอร์) คือข้อความค้นหาที่ซับซ้อนที่ใช้เวลานานในทาสซึ่งอาจทำให้เกิดปัญหาการล็อค คำสั่งที่ทำงานกลางวันในต้นแบบนั้นปลอดภัยกว่า แม้ว่าคุณจะยังดีกว่าการมีทาสในไดรฟ์ที่แตกต่างกันเช่นการค้นหาที่สำคัญเช่นนั้นอาจทำให้เกิดปัญหาการขัดแย้งของ IO


1
ความคิดของฉันคือทาสจะไม่แข่งขันกับการล็อกตารางบน myIsam เมื่อเจ้านายถูกเขียนไป (สำหรับรายงานที่ซับซ้อน)
Derek Downey

@DTest: นั่นจะเป็นโบนัสอย่างแน่นอนใช่ (+1) สำหรับประเภทตารางอื่น ๆ เช่นกันเมื่อมีการล็อกขนาดใหญ่ (เช่นล็อคตาราง) อาจได้รับการร้องขอจากแบบสอบถามรายงานที่ซับซ้อน ฉันจะเพิ่มบันทึกย่อในคำตอบของฉันดังนั้นจึงมีโอกาสน้อยที่จะได้รับการแสดงแบบตัดหากมีความคิดเห็นเพิ่มเติมปรากฏขึ้น
David Spillett

7

ยังไม่ชัดเจนสำหรับฉันว่าวิธีนี้ช่วยแก้ปัญหาของคุณได้อย่างไร ไม่มีความซ้ำซ้อนเนื่องจากมันอยู่บนฮาร์ดแวร์ทางกายภาพเดียวกันเคอร์เนลระบบปฏิบัติการเดียวกันไบนารีของ MySQL ที่เหมือนกันอาจเป็นดิสก์ที่แตกต่างกัน แต่อยู่ในคอนโทรลเลอร์หน่วยเก็บข้อมูลเดียวกัน ฯลฯ และเหตุผลสำหรับการรายงาน DB คือเพื่อลดการสืบค้นจาก OLTP DB และ ทุกอย่างอยู่ในชุดเดียวกันพลังพิเศษมาจากไหน? หรือมีอย่างอื่นที่คุณพยายามรับจากการตั้งค่านี้หรือไม่?

หนึ่งใช้ไปได้สำหรับเรื่องนี้จะเป็นกับผู้ใช้งานแยกอย่างใดบางที GRANTแต่อีกครั้งผมจะมีความคิดที่จะได้รับการดำเนินการกับ


เพิ่มหมายเหตุเพิ่มเติมลงในคำถามของฉัน การแยกผู้ใช้ไม่ใช่สิ่งที่ฉันพยายามทำให้สำเร็จ
Derek Downey

2

มันถือว่าไม่ฉลาดคุณแค่พยายามจะใช้ประโยชน์จากแกนเพิ่มเติมหรือไม่? อะไรคือเป้าหมายของการพิจารณาการออกแบบใหม่?

(โพสต์เป็นคำตอบไม่ใช่ความคิดเห็นเพื่อเน้นเธรดการสนทนาไว้)


เสนอการป้องกันเล็กน้อยจากความล้มเหลวของไดรฟ์และในขณะเดียวกันก็จัดหาเซิร์ฟเวอร์สำหรับรายงานที่ซับซ้อนซึ่งจะไม่ทำให้ไซต์ที่ใช้งานจริงเข้าถึงเจ้านายได้ช้าลง
Derek Downey

พวกเขาจะใช้ดิสก์คอนโทรลเลอร์เดียวกันหรือคุณจะสามารถติดตั้งดิสก์คอนโทรลเลอร์ใหม่นอกเหนือจากแกนหมุนใหม่ได้หรือไม่?
jcolebrand

1
ฉันเพิ่งเจอสิ่งนี้ ฉันสังเกตเห็นคำถามเชิงโวหารของคุณที่กล่าวถึงการใช้ประโยชน์จากหลายแกน จริง ๆ แล้วฉันได้พูดคุยกันว่าในคำตอบของฉันสองเดือนหลังจากคุณพูดสิ่งนี้ +1 สำหรับความเข้าใจของคุณก่อนฉัน BTW ต่อไปนี้เป็นวิดีโอที่ดีเกี่ยวกับการใช้งาน MySQL หลายครั้ง: youtu.be/5uKBg9prA1A
RolandoMySQLDBA

BTW นายจ้างของฉันมีลูกค้าที่ฉันจัดสถาปัตยกรรมนี้ให้ มันมีสามทาสอ่านในเครื่องเดียว (ทั้งหมดใน MyISAM) ในขณะที่ต้นแบบคือ InnoDB ทั้งหมด
RolandoMySQLDBA

1

นี่อาจเป็นดาบสองคม

คุณสามารถเรียกใช้ mysql หลายอินสแตนซ์เป็นทาสแบบอ่านอย่างเดียวบนเซิร์ฟเวอร์เดียวกับมาสเตอร์โดยที่แต่ละอินสแตนซ์ของ MySQL อยู่ในดิสก์อื่น สิ่งนี้เป็นที่พึงประสงค์หากคุณใช้ MySQL เวอร์ชั่นเก่าที่ไม่ได้ใช้ประโยชน์จากหลายคอร์ (CPU) MySQL รุ่นล่าสุดสามารถปรับให้ใช้ CPU หลายตัวได้จริงทำให้ไม่จำเป็นสำหรับการเข้าถึงหลายคอร์โดยใช้หลายอินสแตนซ์ของ MySQL

ในขณะเดียวกันก็เป็นความคิดที่แย่มาก ลูกค้าจำนวนมากของฉันได้ทำเช่นนี้เพื่อประหยัดเงินในการซื้อโลหะเปลือยหรือเซิร์ฟเวอร์ VM spikes ใด ๆ ในการโหลดเซิร์ฟเวอร์สามารถส่งผลกระทบต่ออินสแตนซ์ MySQL ที่ใช้งานอยู่ทั้งหมดเนื่องจากการสอบถามที่ไม่ดี, การสอบถามที่ช้า, การเชื่อมต่อมากเกินไป, การใช้หน่วยความจำที่มากเกินไป, หน่วยความจำเซิร์ฟเวอร์ไม่เพียงพอ, นอกจากนี้ยังเพิ่มความซับซ้อนของแอปพลิเคชันด้วยการเข้าถึงอินสแตนซ์ MySQL ต่าง ๆ ผ่านหมายเลขพอร์ตของพวกเขาและคุณก็จะอยู่ในความเมตตาของ TCP / IP


0

ฉันจะข้ามการจำลองแบบบนเซิร์ฟเวอร์ที่แตกต่างกันเช่นทาสของ A ในทาสของ B และ B ใน A. เราทำงานหลายครั้งบนเซิร์ฟเวอร์ของเราและไม่มีปัญหาเพราะเซิร์ฟเวอร์ MySQL ของเราไม่ได้มีความจุ การล้มเหลวไปยังเซิร์ฟเวอร์ที่ทำงานอยู่นั้นเร็วกว่าการกู้คืนจากข้อมูลสำรอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.