Aracılığıyla paylaş


Windows ve Linux'ta SQL Server Always On kullanılabilirlik grubunu yapılandırma (platformlar arası)

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri

Bu makalede, bir Windows sunucusunda bir çoğaltma ve Linux sunucusunda diğer çoğaltma ile Always On kullanılabilirlik grubu (AG) oluşturma adımları açıklanmaktadır.

Önemli

Tam yüksek kullanılabilirlik ve olağanüstü durum kurtarma desteğine sahip heterojen çoğaltmalar içeren SQL Server platformlar arası kullanılabilirlik grupları DH2i DxEnterprise ile kullanılabilir. Daha fazla bilgi için bkz. SQL Server Karma İşletim Sistemleriyle Kullanılabilirlik Grupları.

DH2i ile platformlar arası kullanılabilirlik grupları hakkında bilgi edinmek için aşağıdaki videoyu izleyin.

Replikalar farklı işletim sistemlerinde olduğundan bu yapılandırma platformlar arasında çalışır. Bir platformdan diğerine geçiş veya olağanüstü durum kurtarma (DR) için bu yapılandırmayı kullanın. Bu yapılandırma yüksek kullanılabilirliği desteklemez.

Küme türü Yok olan Kullanılabilirlik grubu diyagramı.

Devam etmeden önce, Windows ve Linux'ta SQL Server örnekleri için yükleme ve yapılandırma hakkında bilgi sahibi olmanız gerekir.

Senaryo

Bu senaryoda, iki sunucu farklı işletim sistemlerindedir. birincil çoğaltmayı WinSQLInstance adlı bir Windows Server 2022 barındırıyor. LinuxSQLInstance adlı bir Linux sunucusu ikincil çoğaltmayı barındırıyor.

AG'yi yapılandırın

AG oluşturma adımları, okuma ölçeğindeki iş yükleri için AG oluşturma adımlarıyla aynıdır. Küme yöneticisi olmadığından AG küme türü NONE'dir.

Bu makaledeki betikler için köşeli ayraçlar < ve > ortamınız için değiştirmeniz gereken değerleri tanımlar. Açılı parantezler aslında betikler için gerekli değildir.

  1. Windows Server 2022'ye SQL Server 2022 (16.x) yükleyin, SQL Server Configuration Manager'dan AlwaysOn Kullanılabilirlik Grupları etkinleştirin ve karma mod kimlik doğrulamasını ayarlayın.

    Bahşiş

    Bu çözümü Azure'da doğrularsanız, veri merkezinde ayrı olduklarından emin olmak için her iki sunucuyu da aynı kullanılabilirlik kümesine yerleştirin.

    Kullanılabilirlik Gruplarını Etkinleştirme

    Yönergeler için bkz. Always On kullanılabilirlik grubu özelliğini etkinleştirme veya devre dışı bırakma.

    Kullanılabilirlik Gruplarını etkinleştirmeyi gösteren ekran görüntüsü.

    SQL Server Configuration Manager, bilgisayarın yük devretme kümesindeki bir düğüm olmadığını not alır.

    Kullanılabilirlik Gruplarını etkinleştirdikten sonra SQL Server'ı yeniden başlatın.

    Karışık mod kimlik doğrulamayı ayarla

    Yönergeler için bkz. Sunucu kimlik doğrulama modunu değiştirme.

  2. Linux'a SQL Server 2022 (16.x) yükleyin. Yönergeler için bkz. Linux üzerinde SQL Server için yükleme kılavuzu. hadrile etkinleştirin.

    Komut satırında hadr aracılığıyla 'ı etkinleştirin, aşağıdaki komutu çalıştırın:

    sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
    

    hadretkinleştirdikten sonra SQL Server örneğini yeniden başlatın:

    sudo systemctl restart mssql-server.service
    
  3. her iki sunucuda da hosts dosyasını yapılandırın veya sunucu adlarını DNS'ye kaydedin.

  4. Hem Windows hem de Linux üzerinde TCP 1433 ve 5022 için güvenlik duvarı bağlantı noktalarını açın.

  5. Birincil çoğaltmada bir veritabanı oturum açma bilgisi ve parola oluşturun.

    CREATE LOGIN dbm_login
        WITH PASSWORD = '<password>';
    
    CREATE USER dbm_user FOR LOGIN dbm_login;
    GO
    

    Dikkat

    Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

  6. Birincil çoğaltmada bir ana anahtar ve sertifika oluşturun, ardından sertifikayı özel anahtarla yedekleyin.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    
    CREATE CERTIFICATE dbm_certificate
        WITH SUBJECT = 'dbm';
    
    BACKUP CERTIFICATE dbm_certificate TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.cer'
        WITH PRIVATE KEY (
             FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.pvk',
             ENCRYPTION BY PASSWORD = '<private-key-password>'
    );
    GO
    

    Dikkat

    Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

  7. Sertifikayı ve özel anahtarı /var/opt/mssql/data'daki Linux sunucusuna (ikincil çoğaltma) kopyalayın. Dosyaları Linux sunucusuna kopyalamak için pscp kullanabilirsiniz.

  8. Özel anahtarın ve sertifikanın grubunu ve sahipliğini mssql:mssqlolarak ayarlayın.

    Aşağıdaki betik, dosyaların grubunu ve sahipliğini ayarlar.

    sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.pvk
    sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.cer
    

    Aşağıdaki diyagramda, sertifika ve anahtar için sahiplik ve grup doğru şekilde ayarlanmıştır.

    /var/opt/mssql/data klasöründeki .cer ve .pvk'yi gösteren Git Bash penceresinin ekran görüntüsü.

  9. İkincil çoğaltmada bir veritabanı oturum açma ve parolası oluşturun ve bir ana anahtar oluşturun.

    CREATE LOGIN dbm_login
        WITH PASSWORD = '<password>';
    
    CREATE USER dbm_user FOR LOGIN dbm_login;
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    

    Dikkat

    Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

  10. İkincil replika üzerinde, kopyaladığınız sertifikayı /var/opt/mssql/datageri yükleyin.

    CREATE CERTIFICATE dbm_certificate
        AUTHORIZATION dbm_user
        FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
        WITH PRIVATE KEY (
            FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
            DECRYPTION BY PASSWORD = '<private-key-password>'
    );
    GO
    

    Önceki örnekte, birincil çoğaltmada sertifikayı oluştururken kullandığınız aynı parolayı <private-key-password> ile değiştirin.

  11. Birincil replikada bir uç nokta oluşturun.

    CREATE ENDPOINT [Hadr_endpoint]
        AS TCP
    (
                LISTENER_IP = (0.0.0.0),
                LISTENER_PORT = 5022
    )
        FOR DATABASE_MIRRORING
    (
                ROLE = ALL,
                AUTHENTICATION = CERTIFICATE dbm_certificate,
                ENCRYPTION = REQUIRED ALGORITHM AES
    );
    
    ALTER ENDPOINT [Hadr_endpoint]
        STATE = STARTED;
    
    GRANT CONNECT
        ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];
    GO
    

    Önemli

    Dinleyici TCP bağlantı noktası için güvenlik duvarı açık olmalıdır. Önceki betikte bağlantı noktası 5022'dir. Kullanılabilir herhangi bir TCP bağlantı noktasını kullanın.

  12. İkincil çoğaltmada uç noktayı oluşturun. Uç noktayı oluşturmak için ikincil kopyada önceki betiği yineleyin.

  13. Birincil çoğaltmada ag'yi CLUSTER_TYPE = NONEile oluşturun. Örnek betik, AG'yi oluşturmak için SEEDING_MODE = AUTOMATIC kullanır.

    Not

    SQL Server'ın Windows örneği veri ve günlük dosyaları için farklı yollar kullandığında, bu yollar ikincil çoğaltmada mevcut olmadığından SQL Server'ın Linux örneğinde otomatik dağıtım başarısız olur. Platformlar arası AG için aşağıdaki betiği kullanmak için veritabanı, Windows sunucusundaki veri ve günlük dosyaları için aynı yolu gerektirir. Alternatif olarak, betiği güncelleyerek SEEDING_MODE = MANUAL ayarlayabilir ve ardından veritabanını NORECOVERY kullanarak yedekleyip geri yükleyerek veritabanını doldurabilirsiniz.

    Bu davranış Azure Market görüntüleri için geçerlidir.

    Otomatik tohumlama hakkında daha fazla bilgi için bkz. Otomatik Tohumlama - Disk Düzeni.

    Betiği çalıştırmadan önce, AG'lerinizin değerlerini güncelleştirin.

    • <WinSQLInstance> değerini birincil replika SQL Server örneğinin sunucu adıyla değiştirin.

    • <LinuxSQLInstance> ifadesini ikincil kopya SQL Server örneğinin sunucu adıyla değiştirin.

    AG'yi oluşturmak için değerleri güncelleyin ve betiği birincil replikada çalıştırın.

    CREATE AVAILABILITY
    GROUP [ag1]
    WITH (CLUSTER_TYPE = NONE)
    FOR REPLICA
        ON N'<WinSQLInstance>'
    WITH (
        ENDPOINT_URL = N'tcp://<WinSQLInstance>:5022',
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        SEEDING_MODE = AUTOMATIC,
        FAILOVER_MODE = MANUAL,
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)
        ),
        N'<LinuxSQLInstance>'
    WITH (
        ENDPOINT_URL = N'tcp://<LinuxSQLInstance>:5022',
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        SEEDING_MODE = AUTOMATIC,
        FAILOVER_MODE = MANUAL,
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL);
        )
    GO
    

    Daha fazla bilgi için bkz. create AVAILABILITY GROUP .

  14. Yedek kopyada AG'ye katıl.

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  15. AG için bir veritabanı oluşturun. Örnek adımlarda TestDBadlı bir veritabanı kullanılır. Otomatik tohumlama kullanıyorsanız hem veriler hem de günlük dosyaları için aynı yolu ayarlayın.

    Betiği çalıştırmadan önce veritabanınızın değerlerini güncelleştirin.

    • TestDB yerine veritabanınızın adını yazın.

    • <F:\Path> yerine veritabanınızın ve günlük dosyalarınızın yolunu girin. Veritabanı ve günlük dosyaları için aynı yolu kullanın.

    Varsayılan yolları da kullanabilirsiniz.

    Veritabanınızı oluşturmak için betiği çalıştırın.

    CREATE DATABASE [TestDB] CONTAINMENT = NONE
        ON
        PRIMARY(NAME = N'TestDB', FILENAME = N'<F:\Path>\TestDB.mdf')
        LOG ON (NAME = N'TestDB_log', FILENAME = N'<F:\Path>\TestDB_log.ldf');
    GO
    
  16. Veritabanının tam yedeğini alın.

  17. Otomatik tohumlama kullanmıyorsanız veritabanını ikincil çoğaltma (Linux) sunucusuna geri yükleyin. yedekleme ve geri yüklemekullanarak SQL Server veritabanını Windows'tan Linux'a geçirme. İkincil replikada veritabanı WITH NORECOVERY'ı geri yükle.

  18. Veritabanını AG'ye ekleyin. Örnek betiği güncelleştirin. TestDB yerine veritabanınızın adını yazın. Veritabanını AG'ye eklemek için birincil çoğaltmada T-SQL sorgusunu çalıştırın.

    ALTER AG [ag1] ADD DATABASE TestDB;
    GO
    
  19. Veritabanının ikincil yedekte doldurulmakta olduğunu doğrulayın.

Birincil replikada yük devretmesi

Her kullanılabilirlik grubunun yalnızca bir birincil çoğaltması vardır. Birincil kopya okuma ve yazma işlemlerine izin verir. Ana replikayı değiştirmek için hata devretme yapabilirsiniz. Tipik bir kullanılabilirlik grubunda, küme yöneticisi yük devretme işlemini otomatikleştirir. Küme türü NONE olan bir kullanılabilirlik grubunda yük devretme işlemi el ile gerçekleştirilir.

Küme türü NONE olan bir kullanılabilirlik grubunda birincil çoğaltmayı yedeklemenin iki yolu vardır:

  • El ile yük devretme, veri kaybı olmadan
  • Veri kaybıyla elle zorla yük devretme

El ile yük devretme, veri kaybı olmadan

Birincil çoğaltma kullanılabilir olduğunda bu yöntemi kullanın, ancak birincil çoğaltmayı barındıran örneği geçici veya kalıcı olarak değiştirmeniz gerekir. Olası veri kaybını önlemek için, manuel yük devretmeyi gerçekleştirmeden önce hedef yedek kopyanın güncelliğini kontrol edin.

Veri kaybı olmadan manüel olarak yük devretme yapmak için:

  1. Mevcut birincil çoğaltmayı hedef ikincil çoğaltma yapın SYNCHRONOUS_COMMIT.

    ALTER AVAILABILITY GROUP [AGRScale] 
         MODIFY REPLICA ON N'<node2>' 
         WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  2. Aktif işlemlerin birincil çoğaltmaya ve en az bir senkron ikincil çoğaltmaya taahhüt edildiğini belirlemek için aşağıdaki sorguyu çalıştırın.

    SELECT ag.name, 
       drs.database_id, 
       drs.group_id, 
       drs.replica_id, 
       drs.synchronization_state_desc, 
       ag.sequence_number
    FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag
    WHERE drs.group_id = ag.group_id; 
    

    İkincil kopya, synchronization_state_descSYNCHRONIZEDolduğunda senkronize edilir.

  3. REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 1 olarak güncelleştirin.

    Aşağıdaki betik, REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITadlı bir kullanılabilirlik grubunda ag1'ı 1 olarak ayarlıyor. Aşağıdaki betiği çalıştırmadan önce ag1 kullanılabilirlik grubunuzun adıyla değiştirin:

    ALTER AVAILABILITY GROUP [AGRScale] 
         SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
    

    Bu ayar, her etkin işlemin birincil kopyada ve en az bir eşzamanlı ikincil kopyada taahhüt edilmesini sağlar.

    Not

    Bu ayar yük devretmeye özgü değildir ve ortamın gereksinimlerine göre ayarlanmalıdır.

  4. Rol değişikliğine hazırlanmak için birincil çoğaltmayı ve yük devretmeye katılmayan ikincil çoğaltmaları çevrimdışı olarak ayarlayın:

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. Hedef ikincil kopyayı birincil hale getirin.

    ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS; 
    
  6. eski birincil ve diğer ikincillerin rolünü SECONDARYolarak güncelleştirin, eski birincil çoğaltmayı barındıran SQL Server örneğinde aşağıdaki komutu çalıştırın:

    ALTER AVAILABILITY GROUP [AGRScale] 
         SET (ROLE = SECONDARY); 
    

    Not

    Kullanılabilirlik grubunu silmek için DROP AVAILABILITY GROUPkullanın. Küme türü NONE veya EXTERNAL ile oluşturulan bir kullanılabilirlik grubu için, kullanılabilirlik grubunun parçası olan tüm çoğaltmalarda bir komut çalıştırılır.

  7. Veri taşımayı sürdürürken, birincil çoğaltmayı barındıran SQL Server örneğindeki kullanılabilirlik grubundaki her veritabanı için aşağıdaki komutu çalıştırın:

    ALTER DATABASE [db1]
         SET HADR RESUME
    
  8. Okuma ölçeği için oluşturduğunuz ve küme yöneticisi tarafından yönetilmeyen dinleyicileri yeniden oluşturun. Eğer orijinal dinleyici eski birincili işaret ediyorsa, onu bırakın ve yeni birincili işaret etmek için yeniden oluşturun.

Veri kaybıyla elle zorla yük devretme

Birincil kopya kullanılamıyorsa ve hemen kurtarılamıyorsa, veri kaybını kabul ederek ikincil kopyaya geçişi zorlamanız gerekir. Ancak, asıl birincil çoğaltma, failover sonrasında geri yüklenirse, birincil rolü üstlenir. Her çoğaltmanın farklı bir durumda olmasını önlemek için, veri kaybıyla zorunlu yük devretme sonrasında özgün birincili kullanılabilirlik grubundan kaldırın. Orijinal birincil tekrar çevrimiçi olduğunda, kullanılabilirlik grubunu ondan tamamen kaldırın.

Birincil yedek N1'den ikincil yedek N2'ye veri kaybıyla el ile yük devretmek için şu adımları izleyin:

  1. İkincil çoğaltmada (N2) zorlamalı yük devretmeyi başlatın:

    ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;
    
  2. Yeni birincil replikada (N2), orijinal birincil (N1) kaldırın.

    ALTER AVAILABILITY GROUP [AGRScale]
    REMOVE REPLICA ON N'N1';
    
  3. Tüm uygulama trafiğinin dinleyiciye ve/veya yeni birincil replikaya yönlendirildiğini doğrulayın.

  4. Özgün birincil (N1) çevrimiçi hale gelirse, AGRScale kullanılabilirlik grubunu hemen özgün birincil (N1) üzerinde çevrimdışı konuma getirin.

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. Veriler veya eşitlenmemiş değişiklikler varsa, yedeklemeler veya iş gereksinimlerinize uygun diğer veri çoğaltma seçenekleri aracılığıyla bu verileri koruyun.

  6. Ardından, kullanılabilirlik grubunu özgün birincilden (N1) kaldırın:

    DROP AVAILABILITY GROUP [AGRScale];
    
  7. Kullanılabilirlik grubu veritabanını özgün birincil çoğaltma üzerinde (N1) silin.

    USE [master]
    GO
    DROP DATABASE [AGDBRScale]
    GO
    
  8. (İsteğe bağlı) İsterseniz, artık AGRScale kullanılabilirlik grubuna N1'i yeni bir ikincil çoğaltma olarak geri ekleyebilirsiniz.

Bu makalede, geçişi veya okuma ölçeğindeki iş yüklerini desteklemek için platformlar arası AG oluşturma adımları gözden geçirildi. Olağanüstü durum kurtarma işlemleri için manuel olarak kullanılabilir. Ayrıca AG'nin yük devretme işleminin nasıl yapılacağı da açıklanmıştır. Platformlar arası AG, küme türü NONE kullanır ve yüksek kullanılabilirliği desteklemez.