วิธีที่ดีที่สุดในการโยกย้ายฐานข้อมูล SQL Server ขนาดใหญ่ที่มีการหยุดทำงานต่ำผ่านเครือข่าย


22

นิยามปัญหา

เซิร์ฟเวอร์ฐานข้อมูลของเราต้องถูกถ่ายโอนไปยังดาต้าเซ็นเตอร์อื่น มันรันบน Microsoft SQL Server 2012 Enterprise (64 บิต) และมีฐานข้อมูลสองแห่งประมาณ 2TB และ 1TB

การหยุดทำงานเพียงเล็กน้อยหรือไม่มีเลยก็เหมาะ

จำนวนงาน

ฐานข้อมูลเหล่านั้นใช้สำหรับเว็บไซต์. NET และมีการอัพเดทอยู่ตลอดเวลา

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

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

นอกจากนี้เวลาที่ใช้ในการดำเนินการนี้ไม่สำคัญตราบใดที่สวิตช์จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น (หยุดทำงาน) ยังคงอยู่ในระดับต่ำ

แนวทางการพิจารณา

  • สำรองและเรียกคืน

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

  • บันทึกการจัดส่ง

    เท่าที่ฉันเข้าใจวิธีการนี้จะลดเวลาหยุดทำงานโดยกำหนดค่า master / slave และถ่ายโอนสำเนาของ master DB ที่แน่นอนไปยังทาสที่ถูกอ่านเท่านั้น ดังที่ได้กล่าวมาแล้วการเข้าถึงทาสนั้นไม่จำเป็นและเราก็ต้องการวิธีที่จะมีการจำลองฐานข้อมูลหลักโดยไม่มีข้อมูลเสียหาย

    ดูเหมือนว่าจะค่อนข้างมีประสิทธิภาพในแง่ของการใช้ทรัพยากรและจะไม่ส่งผลกระทบต่อประสิทธิภาพของต้นแบบมากนัก

    ฉันอาจผิดเกี่ยวกับวิธีการนี้ดังนั้นโปรดแก้ไขฉัน

  • การทำมิเรอร์ฐานข้อมูล

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

  • ตัวเลือกอื่น?

    เซิร์ฟเวอร์นั้นทำงานโดยตรงบนฮาร์ดแวร์โลหะเปลือยดังนั้นโซลูชันระดับล่างจึงไม่ใช่ตัวเลือก อาจจะมีวิธีที่ดีกว่าในการทำสิ่งนี้ให้สำเร็จ

ข้อ จำกัด

ตามที่อธิบายไว้ฐานข้อมูลเหล่านั้นค่อนข้างใหญ่จนถึงจุดที่ยากต่อการบำรุงรักษา แต่นั่นเป็นปัญหาอื่น

เวอร์ชันของ SQL Server จะเหมือนกัน (Microsoft SQL Server 2012 Enterprise 64 บิต)

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

นั่นควรจะให้ภาพรวมที่ค่อนข้างดีเกี่ยวกับความต้องการของเราสำหรับงานนี้และหวังว่าบางท่านต้องเผชิญกับสถานการณ์นั้นมาก่อน

คำตอบ:


20

สำรองข้อมูลและเรียกคืนได้อย่างชัดเจน ฉันจะไม่พิจารณาการจำลองแบบใด ๆ

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

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

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


16

ฉันเพิ่งย้าย 15tb ข้าม 6 ฐานข้อมูลโดยใช้การมิเรอร์ ง่ายมากและทำงานได้อย่างสมบูรณ์แบบโดยใช้เวลาไม่กี่วินาที

การแก้ไข:

ฉันมีเซิร์ฟเวอร์ SQL แบบเสมือนใหม่สองตัว ฐานข้อมูลมาจากเซิร์ฟเวอร์ 3 เครื่องที่เพิ่งมีการเติบโตและมีผลกระทบต่อประสิทธิภาพของฐานข้อมูลขนาดเล็กที่โฮสต์อยู่

กระบวนการนี้ง่ายมาก

  1. รอการสำรองข้อมูลทั้งหมดในสุดสัปดาห์
  2. กู้คืนโดยไม่มีการกู้คืนไปยังเซิร์ฟเวอร์ใหม่
  3. เมื่อการกู้คืนเสร็จสมบูรณ์ให้หยุดการสำรองข้อมูลชั่วคราว
  4. เรียกใช้การกู้คืนเพิ่มเติมหนึ่งรายการจนถึงการสำรองข้อมูลบันทึกล่าสุดจากต้นฉบับโดยไม่มีการกู้คืน
  5. เริ่มการทำมิรเรอร์กับทั้งหก
  6. ทำการสำรองข้อมูลต่อ

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

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

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

ขอบคุณ

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