Bu yazımızda sql’in nodelarından herhangi birisinin always-on haberleşmesi yapamadığı durumu konu alan hata üzerine konuşacağız.
Always on dashboard ekranında da bu şekilde bir hata alıyoruz.”Availability Replica is disconnected” ibaresi yer almakta. (GÖRSEL-1)
GÖRSEL-1
Aynı zamanda Görsel-2’de olduğu gibi Availability replica üzerinde kırmızı çarpı işareti görünüyor.
GÖRSEL-2
Son olarakta error loglara bakacak olursak; “Database Mirroring login attempt by user ‘DomainName\SqlUser’ failed with error: ‘Connection handshake failed. The login ‘DomainName\SQLServiceUser’ does not have CONNECT permission on the endpoint. State 84.” şeklinde düşebilir. (GÖRSEL 3)
GÖRSEL-3
Hatanın farklı arayüzlerde nasıl tespit ettiğimizi inceledik şimdi sebeplerine ve çözüme geçelim;
Bu hata yanlış endpoint yapılandırması veya bozulması,
Primary ve secondary replika’da servis kullanıcıları farklı olması veya değiştirilmesi,
Hadr_endpoint user ’ının silinmesinden,(owner’ı sa user’ı servis kullanıcısı olmalıdır,GÖRSEL-4’te kontrol edebilirsiniz),
Kaynaklı birkaç farklı durumundan ötürü meydana gelmektedir. Biz çözüme geçelim.
GÖRSEL-4
Hatayı gidermek için hadr_endpoint’i tekrar yapılandırıyoruz.
Öncelikle çözüm için şundan emin olmalıyız; hata aldığımız secondary replika’nın servis kullanıcısı ile primary replikanın servis kullanıcı aynı olmalı. Bu iki user’ın farklı olması hadr_endpoint yapısının down olmasına ve handshake yapısının bozulmasına sebep olur.
Sonrasında aşağıdaki script ile hadr_endpoint kullanıcısını kontrol ediyoruz.
USE [master] GO SELECT pm.class, pm.class_desc, pm.state_desc, pr.[name] AS [owner], gr.[name] AS grantee, e.[name] AS endpoint_name FROM sys.server_permissions pm JOIN sys.server_principals pr ON pm.grantor_principal_id = pr.principal_id JOIN sys.server_principals gr ON pm.grantee_principal_id = gr.principal_id JOIN sys.endpoints e ON pm.grantor_principal_id = e.principal_id AND pm.major_id = e.endpoint_id
GÖRSEL-5
Script sonucunda ‘endpoint_name’ kolonunun olduğu satırın ‘grantee’ kolonunda sql servis kullanıcı hesabı olmalıdır. Primary replikanın sql servis user’ı hangisi ile onunla aynı olmalıdır veya yeni bir servis kullanıcısı tanımlanmalı ve tüm sql node’larına uygulanmalıdır.
Eğer sizin hadr_endpoint user’ınız farklı ise aşağıdaki script ile bu durumu düzeltmek gerekmektedir. Bu script hadr_endpoint çalıştıma yetkisini sql servis kullanıcısına verir ve hadr_endpoint yetkisini ownerlığını da ‘sa’ kullanıcısına verir. Primary ve secondary replicaların sql servis kullanıcılarında farklılık var ise bütün replicalar bu script ile aynı yapıya getirilmelidir.
USE [master]; ALTER AUTHORIZATION ON ENDPOINT::Hadr_endpoint TO sa; --endpoint yetkisinin owner'ını sa yapar GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [DOMAIN\SqlServiceUse]; --Siz burada kendi domain name'inizi ve servis kullanıcısını yazın
Scripti çalıştırdıktan sonra kontrolünü yukarıda kalan GÖRSEL-4 ve GÖRSEL-5 üzerinden yapabiliriz.
Primary ve secondary node’larımızda hadr_endpoint kullanıcısını servis kullanıcısı yaptığımıza göre son adıma gelmiş bulunmaktayız. Burada Hadr_endpoint hizmetine STOP-START edip restart vererek hatayı düzeltmiş oluyoruz.
ALTER ENDPOINT hadr_endpoint STATE=STOPPED ALTER ENDPOINT hadr_endpoint STATE=STARTED
Son olarak GÖRSEL-6 üzerinde secondary replika kırmızı çarpını mavi ye döndüğünü görüyoruz.
GÖRSEL-6
WINDOWS FAILOVER CLUSTER DOWN DURUMU - VERITABANI.ORG 24 Aralık 2023
[…] veriyordu.(Hatanın genel çözümüne dair yazımıza linkten ulaşabilirsiniz.(GÖRSEL-1) (https://www.veritabani.org/availability-replica-is-disconnected-hatasi/) Bu hataya dair kontrolleri yaptık. Replica konfigürasyonunda uygun olmayan bir durum […]