Bagikan melalui


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:

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.

  1. Pilih Mulai>Windows PowerShell> klik kanan ikon.

  2. Pilih Lainnya>Jalankan sebagai Pengguna>Lain Gunakan akun lain.

  3. Ketik nama akun layanan dan kata sandi.

  4. Setelah Windows PowerShell terbuka, ketik perintah berikut untuk memverifikasi bahwa Anda masuk dengan akun layanan:

    whoami
    
  5. 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