DB auto failover ใน c # ไม่ทำงานเมื่อเซิร์ฟเวอร์หลักหมดไปทางกายภาพ


9

ฉันติดตั้ง DB auto failover ใน C # กับ SQL Server 2008 และฉันมี 'ความปลอดภัยสูงพร้อมกระจก failover อัตโนมัติ' โดยใช้การตั้งค่าพยานและสตริงการเชื่อมต่อของฉันดูเหมือน

"Server=tcp:DC01; Failover Partner=tcp:DC02; database=dbname; uid=sewebsite;pwd=somerndpwd;Connect Timeout=10;Pooling=True;"

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

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

ฉันขาดอะไรไปเพื่อให้ DB ทำงานอัตโนมัติล้มเหลว


จำเป็นต้องใช้แท็ก [C #] หรือไม่ ดูเหมือนจะไม่เฉพาะเจาะจงกับ C # แต่อย่างใด
Gabe

คำตอบ:


6

หลังจากทำงานกับ MS เป็นเวลาหนึ่งสัปดาห์เราจึงได้ทราบสาเหตุว่าเกิดอะไรขึ้น

โดยพื้นฐานแล้วแอปพลิเคชันไม่ได้ล้มเหลวเนื่องจากต้องการตรวจสอบให้แน่ใจว่าฐานข้อมูลล้มเหลว - และการเชื่อมต่อ sql หมดเวลาก่อนที่การเชื่อมต่อจะพิจารณาว่า db ล้มเหลว

กระบวนการในการยืนยันว่าฐานข้อมูลล้มเหลว (ด้วยการตั้งค่ารีจิสทรี tcp เริ่มต้นทั้งหมด) คือ:

  1. พยายามสื่อสารกับอาจารย์ใหญ่ดูว่าไม่ใช่อาจารย์ใหญ่อีกต่อไป
  2. สื่อสารกับ failover เพื่อให้แน่ใจว่าล้มเหลวและตอนนี้เป็นตัวการใหม่

เมื่อตัวการไม่ทำงานการสื่อสารนี้ใช้เวลาประมาณ 21 วินาทีเพราะจะ:

  1. พยายามสื่อสารกับอาจารย์ใหญ่รอ 3 วินาทีหมดเวลา
  2. ลองสื่อสารกับอาจารย์ใหญ่อีกครั้งรอ 6 วินาทีหมดเวลา
  3. ลองสื่อสารกับอาจารย์ใหญ่อีกครั้งรอ 12 วินาทีหมดเวลา
  4. พยายามสื่อสารกับคู่ค้าที่ล้มเหลวดูว่าล้มเหลวดังนั้นล้มเหลวในแอปพลิเคชัน

ดังนั้นหากการเชื่อมต่อ sql ของคุณไม่รอ 21 วินาที (อาจจะมากกว่าในความเป็นจริง) แล้วมันจะหมดเวลาก่อนที่มันจะเสร็จสิ้นการเต้นครั้งนี้และจะไม่ล้มเหลวเลย

วิธีแก้ไขคือการตั้งค่าไทม์เอาต์ในสตริงการเชื่อมต่อของคุณให้มีค่ามากเราใช้ 60 วินาทีเพื่อความปลอดภัย

ไชโย


0

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

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

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

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