Replika ketersediaan terputus dalam grup ketersediaan AlwaysOn
Berlaku untuk: SQL Server
Pendahuluan
- Nama Kebijakan: Status Koneksi Replika Ketersediaan
- Masalah: Replika ketersediaan terputus
- Kategori: Kritis
- Faset: Replika ketersediaan
Deskripsi
Kebijakan ini memeriksa status koneksi antara replika ketersediaan. Kebijakan dalam keadaan tidak sehat ketika status koneksi replika ketersediaan adalah DISCONNECTED
. Kebijakan tersebut dinyatakan lain dalam keadaan sehat.
Kemungkinan penyebab
Replika sekunder tidak terhubung ke replika utama. Status tersambung adalah DISCONNECTED
. Masalah ini dapat disebabkan oleh salah satu alasan berikut:
- Port koneksi mungkin berkonflik dengan aplikasi lain.
- Jenis enkripsi atau algoritma tidak cocok.
- Titik akhir koneksi dihapus atau tidak dimulai.
- Ada masalah jaringan/konektivitas atau Port diblokir di firewall.
- Akun layanan/startup bukan pengguna domain dan tidak dapat tersambung ke DC dan ke node dan port jarak jauh (misalnya, 5022).
Solusi yang memungkinkan
Periksa konfigurasi titik akhir pencerminan database untuk instans replika primer dan sekunder dan perbarui konfigurasi yang tidak cocok. Selain itu, periksa apakah port bertentangan, dan jika demikian, ubah nomor port.
Berikut ini adalah solusi yang mungkin untuk masalah ini:
Port koneksi mungkin berkonflik dengan aplikasi lain
Jalankan perintah berikut untuk mendiagnosis masalah port:
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "
Perintah sebelumnya mengembalikan nomor port yang harus Anda gunakan dalam perintah berikut.
$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id
Jenis enkripsi atau algoritma tidak cocok
Jalankan perintah ini di kedua server dan bandingkan enkripsi dan pastikan keduanya sama.
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"
Titik akhir koneksi dihapus atau tidak dimulai
Jalankan perintah berikut jika titik akhir pencerminan keluar dan dimulai.
$server_name = "server_instance" #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"
Jalankan perintah berikut jika Anda mencurigai bahwa titik akhir tidak merespons koneksi, atau tidak berjalan.
$server_name = "server_instance" #use your SQL Server instance here
$server_name = "hadr_endpoint" #replace with your endpoint name
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"
Peringatan
Menjalankan perintah dengan STATE = stopped
akan menghentikan titik akhir Anda dan mengganggu arus lalu lintas AlwaysOn untuk sementara.
Masalah jaringan atau konektivitas, atau port diblokir di firewall
Gunakan perintah berikut untuk menguji konektivitas di kedua arah dari Node1
ke Node2
dan Node2
ke Node1
:
$computer = "remote_node" # replace with node name in your environment
$port = "5022" # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port
Akun bukan pengguna domain dan tidak dapat tersambung ke DC, dan ke simpul jarak jauh
Untuk menguji apakah akun layanan dapat tersambung ke simpul jarak jauh, ikuti langkah-langkah ini. Langkah-langkah mengasumsikan bahwa Anda tidak masuk dengan akun layanan.
Pilih Mulai>Windows PowerShell> klik kanan ikon.
Pilih Lainnya>Jalankan sebagai Pengguna>Lain Gunakan akun lain.
Ketik nama akun layanan dan kata sandi.
Setelah Windows PowerShell terbuka, ketik perintah berikut untuk memverifikasi bahwa Anda masuk dengan akun layanan:
whoami
Kemudian Anda dapat menguji koneksi ke simpul jarak jauh, seperti dalam contoh berikut.
$computer = "remote_node" # replace with node name in your environment $port = "5022" # replace with the port from your database_mirroring_endpoints Test-NetConnection -ComputerName $computer -Port $port
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk