Saya mengatur DB auto failover di C # dengan SQL Server 2008 dan saya memiliki 'keamanan tinggi dengan mirror failover otomatis' menggunakan pengaturan saksi dan string koneksi saya terlihat seperti
"Server=tcp:DC01; Failover Partner=tcp:DC02; database=dbname; uid=sewebsite;pwd=somerndpwd;Connect Timeout=10;Pooling=True;"
Selama pengujian, ketika saya mematikan layanan SQL Server pada server utama failover otomatis berfungsi seperti pesona, tetapi jika saya mengambil server utama offline (dengan mematikan server atau mematikan kartu jaringan) failover otomatis tidak berfungsi dan saya situs web hanya kali.
Saya menemukan artikel ini di mana posting terakhir kedua menunjukkan bahwa itu karena kami menggunakan pipa bernama yang tidak berfungsi ketika prinsipal offline, tetapi kami memaksa TCP dalam string koneksi kami.
Apa yang saya lewatkan agar kegagalan otomatis DB ini berfungsi?
sumber
Jawaban:
Setelah bekerja dengan MS selama seminggu, kami telah mengetahui mengapa ini terjadi.
Pada dasarnya, aplikasi tidak gagal karena perlu memastikan bahwa database telah gagal - dan koneksi sql adalah waktu sebelum koneksi menentukan bahwa db telah gagal.
Proses untuk mengonfirmasi bahwa basis data telah gagal (dengan semua pengaturan registri tcp default) adalah untuk:
Ketika kepala sekolah turun, komunikasi ini memakan waktu sekitar 21 detik karena akan:
Jadi jika koneksi sql Anda tidak menunggu 21 detik (mungkin lebih dalam kenyataan) maka akan habis sebelum menyelesaikan tarian ini dan itu tidak akan gagal sama sekali.
Solusi adalah mengatur batas waktu dalam string koneksi Anda ke nilai besar, kami menggunakan 60 detik hanya untuk aman.
Bersulang
sumber
Saya ingin tahu apakah kondisi kegagalan otomatis tidak terpenuhi pada saat pengujian Anda? Khususnya - jika database tidak disinkronkan dengan mirror (periksa keadaan mirroring dari sys.database_mirroring) pada saat kegagalan DAN / ATAU jika saksi dan mirror tidak terhubung pada waktu itu (uji melalui ping antara peran yang berpartisipasi).
Anda juga dapat memiliki situasi di mana Mitra dan Mirror Anda tidak terhubung satu sama lain - tetapi database mitra dan mirror masih terhubung ke saksi secara independen. Dalam hal itu saksi melihat tidak ada yang salah (dan karenanya tidak ada kegagalan). Tetapi Anda menyebutkan bahwa Anda menutup server itu sendiri, jadi ini sepertinya kurang mungkin.
Atau apakah Anda mengatakan bahwa failover pada akhirnya terjadi tetapi koneksi ulang Anda gagal? Dalam hal ini, waktu deteksi dan kegagalan bervariasi tergantung pada bagaimana prinsipal gagal dan total waktu untuk memulihkan mirror db.
sumber