การจำลองแบบ MySQL ข้ามเซิร์ฟเวอร์ที่แยกทางภูมิศาสตร์


11

องค์กรของฉันกำลังมองหาวิธีกระจายเซิร์ฟเวอร์ของเราไปทั่วบริเวณทางภูมิศาสตร์ในขณะที่สำรองข้อมูลให้ทันสมัยอยู่เสมอและกระจายการโหลดอย่างสมบูรณ์แบบ

สิ่งแรกที่ฉันมีในใจคือ Rails บน MySQL อัตราการเขียนไม่สูงเกินไป (บทความ / ความคิดเห็นถูกทิ้งไว้ที่น้อยกว่า 1 ต่อนาทีแม้ว่าบางคนจะมีไฟล์แนบขนาดใหญ่)

ดังนั้น,

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

คำตอบ:


6

เราใช้การจำลองแบบข้ามศูนย์ข้อมูลในหลายประเทศในยุโรป (เพื่อให้พวกเขาไม่ได้ทั่วโลกจากกันและกัน แต่พวกเขาไม่ได้อยู่ในพื้นที่) และมันทำงานได้โดยไม่มีปัญหาใด ๆ

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

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

ฉันขอแนะนำให้คุณตรวจสอบให้แน่ใจว่าคุณกำลังจำลองข้อมูลผ่าน SSL (เช่นตั้งค่าผู้ใช้การจำลองแบบให้ต้องใช้การเชื่อมต่อ SSL)


4

การจำลองแบบเปลี่ยนไปอย่างมากใน MySQL 5.1 ใน 5.0 เท่านั้นใช้การจำลองแบบตามคำชี้แจง ขณะนี้คุณมีตัวเลือกในการจำลองแบบตามแถวหรือจำลองแบบผสม สิ่งนี้จะมีผลอย่างมากกับวิธีที่คุณทำซ้ำผ่าน WAN

หากคุณมีความสามารถในการ: A) ทำ IP เข้าครอบครอง (ถ้าเซิร์ฟเวอร์ของคุณจะถูกแยกทางภูมิศาสตร์นี้ไม่น่าจะเป็น) B) ทำการเปลี่ยนแปลง DNS เปรียวคุณสามารถหลีกเลี่ยงการแก้ไขรหัสแอพ / การกำหนดค่าเพื่อเปลี่ยนต้นแบบ เราใช้ DNS ภายในที่มีแคชระยะสั้นและโดเมน. ภายในปลอม หากเราต้องการเปลี่ยน masterdb.internal ให้เป็นเซิร์ฟเวอร์อื่น ๆ ภายใน 5 วินาทีการเปลี่ยนแปลงจะเกิดขึ้น

ภายในศูนย์ข้อมูลเดียวเราใช้ IP เข้าครอบครอง เซิร์ฟเวอร์ฐานข้อมูลทั้งหมดมีอินเทอร์เฟซเสมือน (eth0: 1, eth0: 2, eth0: 3) ซึ่งไม่ใช่ ifup'ed เมื่อบูต หากทาสคนใดคนหนึ่งต้องการครอบครองคุณเพียงแค่ ifup eth0: 2 และเป็นนาย ในสถานการณ์นี้ eth0 คือ 'if' ที่เราใช้เพื่อเชลล์ในและเช่นนั้น แอพเชื่อมต่อกับ eth0: 1 ซึ่งจะไม่เปิดใช้งานเมื่อบู๊ตหากสคริปต์ของฉันตรวจพบว่ามีการใช้งาน IP (วิกิพีเดียสโตนิท) อีกสิ่งหนึ่งสำหรับการเข้ายึด IP ของปรมาจารย์ที่อาจต้องล้มเหลว


3

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

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