Aracılığıyla paylaş


Linux'ta okuma ölçeği için SQL Server kullanılabilirlik grubu yapılandırma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu makalede, küme yöneticisi olmadan Linux üzerinde SQL Server Always On Kullanılabilirlik Grubu (AG) oluşturma açıklanmaktadır. Bu mimari salt okunur ölçek sağlar. yüksek kullanılabilirlik sunmaz.

Kullanılabilirlik grupları için iki tür mimari vardır. yüksek kullanılabilirlik mimarisi, iyileştirilmiş iş sürekliliği sağlamak için küme yöneticisi kullanır. Yüksek kullanılabilirlik mimarisini oluşturmak için Linux üzerinde yüksek kullanılabilirlik için SQL Server Always On Kullanılabilirlik Grubunu yapılandırma'ya bakın .

CLUSTER_TYPE = NONE olan bir kullanılabilirlik grubu, farklı işletim sistemi platformlarında barındırılan çoğaltmaları içerebilir. Yüksek kullanılabilirliği desteklemez.

Önkoşullar

Kullanılabilirlik grubunu oluşturmadan önce şunları yapmanız gerekir:

  • Kullanılabilirlik çoğaltmalarını barındıracak tüm sunucuların iletişim kurabilmesi için ortamınızı ayarlayın.
  • SQL Server'ı yükleyin.

Linux'ta, küme tarafından yönetilecek bir küme kaynağı olarak eklemeden önce bir kullanılabilirlik grubu oluşturmanız gerekir. Bu belge kullanılabilirlik grubunu oluşturan bir örnek sağlar.

  1. Her sunucunun bilgisayar adını güncelleyin.

    Her SQL Server örneği adı şu şekilde olmalıdır:

    • 15 veya daha az karakter.
    • Ağ içinde benzersiz.

    Bilgisayar adını ayarlamak için /etc/hostnamedüzenleyin. Aşağıdaki betik, /etc/hostnameile düzenlemenizi sağlar:

    sudo vi /etc/hostname
    
  2. Hosts dosyasını yapılandırın.

    Not

    Ana bilgisayar adları DNS sunucusundaki IP adresleriyle kayıtlıysa aşağıdaki adımları uygulamanız gerekmez. Kullanılabilirlik grubu yapılandırmasının parçası olması amaçlanan tüm düğümlerin birbiriyle iletişim kurabildiğini doğrulayın. (Konak adına yapılan bir ping, ilgili IP adresiyle yanıt vermelidir.) Ayrıca, /etc/hosts dosyasının localhost IP adresi 127.0.0.1'i düğümün ana bilgisayar adıyla eşleyen bir kayıt içermediğinden emin olun.

    Her sunucudaki hosts dosyası, kullanılabilirlik grubuna katılacak tüm sunucuların IP adreslerini ve adlarını içerir.

    Aşağıdaki komut geçerli sunucunun IP adresini döndürür:

    sudo ip addr show
    

    /etc/hostsgüncelleştirin. Aşağıdaki betik, /etc/hostsile düzenlemenizi sağlar:

    sudo vi /etc/hosts
    

    Aşağıdaki örnekte, /etc/hosts, node1, node1ve node2eklemeleriyle node3 üzerinde gösterilmektedir. Bu örnekte, node1 birincil çoğaltmayı barındıran sunucuya, node2 ve node3 ikincil çoğaltmaları barındıran sunuculara başvurur.

    127.0.0.1    localhost localhost4 localhost4.localdomain4
    ::1          localhost localhost6 localhost6.localdomain6
    10.128.18.12 node1
    10.128.16.77 node2
    10.128.15.33 node3
    

SQL Server'ı yükleme

SQL Server'ı yükleyin. Aşağıdaki bağlantılar çeşitli dağıtımlar için SQL Server yükleme yönergelerine işaret eder:

AlwaysOn kullanılabilirlik gruplarını etkinleştirme

Bir SQL Server örneğini barındıran her düğüm için Always On kullanılabilirlik gruplarını etkinleştirin ve mssql-serveryeniden başlatın. Aşağıdaki betiği çalıştırın:

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

AlwaysOn_health Olay oturumunu etkinleştir

Kullanılabilirlik grubuyla ilgili sorunları giderirken kök neden tanılamasına yardımcı olması için isteğe bağlı olarak Genişletilmiş Olaylar'ı (XE) etkinleştirebilirsiniz. SQL Server'ın her örneğinde aşağıdaki komutu çalıştırın:

ALTER EVENT SESSION AlwaysOn_health ON SERVER
WITH
(
        STARTUP_STATE = ON
);
GO

Bu XE oturumu hakkında daha fazla bilgi için bkz. Genişletilmiş Olaylar kullanılabilirlik gruplarıyla yapılandırma.

Sertifika oluşturma

Linux üzerindeki SQL Server hizmeti, yansıtma uç noktaları arasındaki iletişimin kimliğini doğrulamak için sertifikaları kullanır.

Aşağıdaki Transact-SQL betiği bir ana anahtar ve bir sertifika oluşturur. Ardından sertifikayı yedekler ve dosyanın güvenliğini özel bir anahtarla sağlar. Betiği güçlü parolalarla güncelleştirin. Birincil SQL Server örneğine bağlanın. Sertifikayı oluşturmak için aşağıdaki Transact-SQL betiğini çalıştırın:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';

CREATE CERTIFICATE dbm_certificate
    WITH SUBJECT = 'dbm';

BACKUP CERTIFICATE dbm_certificate
    TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        ENCRYPTION BY PASSWORD = '<private-key-password>'
);

Bu noktada, birincil SQL Server çoğaltmanızın /var/opt/mssql/data/dbm_certificate.cer'de bir sertifikası ve var/opt/mssql/data/dbm_certificate.pvk'de özel bir anahtarı vardır. Bu iki dosyayı kullanılabilirlik çoğaltmalarını barındıracak tüm sunucularda aynı konuma kopyalayın. mssql kullanıcısını kullanın veya mssql kullanıcısına bu dosyalara erişme izni verin.

Örneğin, kaynak sunucuda aşağıdaki komut dosyaları hedef makineye kopyalar. <node2> değerlerini, çoğaltmaları barındıracak SQL Server örneklerinin adlarıyla değiştirin.

cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/

Her hedef sunucuda, mssql kullanıcısına sertifikaya erişme izni verin.

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

İkincil sunucularda sertifika oluşturma

Aşağıdaki Transact-SQL betiği, birincil SQL Server çoğaltması üzerinde oluşturduğunuz yedekten bir ana anahtar ve sertifika oluşturur. Betiği güçlü parolalarla güncelleştirin. Şifre çözme parolası, önceki adımda .pvk dosyasını oluşturmak için kullandığınız parolayla aynıdır. Sertifikayı oluşturmak için tüm ikincil sunucularda aşağıdaki betiği çalıştırın:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';

CREATE CERTIFICATE dbm_certificate
    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>'
);

Önceki örnekte, <private-key-password>'ı ana çoğaltmadaki sertifikayı oluştururken kullandığınız parolayla değiştirin.

Tüm çoğaltmalarda veritabanı yansıtma uç noktalarını oluşturun

Veritabanı yansıtma uç noktaları, veritabanı yansıtma oturumlarına veya konak kullanılabilirlik çoğaltmalarına katılan sunucu örnekleri arasında ileti göndermek ve almak için İletim Denetimi Protokolü'ni (TCP) kullanır. Veritabanı yansıtma uç noktası, benzersiz bir TCP bağlantı noktası numarasını dinler.

Aşağıdaki Transact-SQL betiği, kullanılabilirlik grubu için Hadr_endpoint adlı bir dinleme uç noktası oluşturur. Uç noktayı başlatır ve oluşturduğunuz sertifikaya bağlantı izni verir. Betiği çalıştırmadan önce < ... >arasındaki değerleri değiştirin. İsteğe bağlı olarak LISTENER_IP = (0.0.0.0)bir IP adresi ekleyebilirsiniz. Dinleyici IP adresi bir IPv4 adresi olmalıdır. 0.0.0.0de kullanabilirsiniz.

Tüm SQL Server örneklerinde ortamınız için aşağıdaki Transact-SQL betiğini güncelleştirin:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP
(
            LISTENER_PORT = 5022
)
    FOR DATABASE_MIRRORING
(
            ROLE = ALL,
            AUTHENTICATION = CERTIFICATE dbm_certificate,
            ENCRYPTION = REQUIRED ALGORITHM AES
);

ALTER ENDPOINT [Hadr_endpoint]
    STATE = STARTED;

Not

Yalnızca yapılandırma amaçlı çoğaltmayı barındırmak için bir düğümde SQL Server Express sürümü kullanıyorsanız, ROLE için tek geçerli değer WITNESS. SQL Server Express sürümünde aşağıdaki betiği çalıştırın:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP
(
            LISTENER_PORT = 5022
)
    FOR DATABASE_MIRRORING
(
            ROLE = WITNESS,
            AUTHENTICATION = CERTIFICATE dbm_certificate,
            ENCRYPTION = REQUIRED ALGORITHM AES
);

ALTER ENDPOINT [Hadr_endpoint]
    STATE = STARTED;

Dinleyici bağlantı noktası için güvenlik duvarındaki TCP bağlantı noktası açık olmalıdır.

Önemli

Veritabanı yansıtma uç noktası için desteklenen tek kimlik doğrulama yöntemidir CERTIFICATE. WINDOWS seçeneği kullanılamaz.

Daha fazla bilgi için bkz . Veritabanı yansıtma uç noktası (SQL Server).

Kullanılabilirlik grubunu oluşturma

AG'yi oluşturun. CLUSTER_TYPE = NONEayarlayın. Ayrıca, her kopyayı FAILOVER_MODE = MANUALile ayarlayın. Analiz veya raporlama iş yüklerini çalıştıran istemci uygulamaları doğrudan ikincil veritabanlarına bağlanabilir. Salt okunur yönlendirme listesi de oluşturabilirsiniz. Bağlantılar, birincil çoğaltmadan ikincil çoğaltmaların her birine, yönlendirme listesinden döngüsel sırayla okuma bağlantı isteklerini iletir.

Aşağıdaki Transact-SQL betiği ag1adlı bir AG oluşturur. Betik, AG çoğaltmalarını SEEDING_MODE = AUTOMATICile yapılandırıyor. Bu ayar, SQL Server'ın AG'ye eklendikten sonra her ikincil sunucuda veritabanını otomatik olarak oluşturmasına neden olur. Ortamınız için aşağıdaki betiği güncelleştirin. <node1> ve <node2> değerlerini çoğaltmaları barındıran SQL Server örneklerinin adlarıyla değiştirin. <5022> değerini uç nokta için ayarladığınız bağlantı noktasıyla değiştirin. Birincil SQL Server çoğaltması üzerinde aşağıdaki Transact-SQL betiğini çalıştırın:

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

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

İkincil SQL Server örneklerini AG'ye ekleyin

Aşağıdaki Transact-SQL betiği, sunucuyu ag1adlı bir AG'ye ekler. Ortamınız için komut dosyasını güncelleyin. Her bir ikincil SQL Server replikasında, AG'ye katılmak için aşağıdaki Transact-SQL komut dosyasını çalıştırın.

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Kullanılabilirlik grubuna veritabanı ekleme

Kullanılabilirlik grubuna eklediğiniz veritabanının tam kurtarma modelinde olduğundan ve geçerli bir günlük yedeğine sahip olduğundan emin olun. Veritabanınız bir test veritabanı veya yeni oluşturulan bir veritabanıysa, veritabanı yedeğini alın. Birincil SQL Server'da aşağıdaki Transact-SQL (T-SQL) betiğini çalıştırarak db1adlı bir veritabanı oluşturun ve yedekleyin:

CREATE DATABASE [db1];
GO

ALTER DATABASE [db1]
    SET RECOVERY FULL;
GO

BACKUP DATABASE [db1]
    TO DISK = N'/var/opt/mssql/data/db1.bak';

Birincil SQL Server çoğaltması üzerinde aşağıdaki T-SQL betiğini çalıştırarak db1adlı bir kullanılabilirlik grubuna ag1 adlı bir veritabanı ekleyin:

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];

Veritabanının ikincil sunucularda oluşturulduğunu doğrulayın

İkincil SQL Server çoğaltmalarında, db1 veritabanının oluşturulup oluşturulmadığını ve eşitlenip eşitlenmediğini görmek için aşağıdaki sorguyu çalıştırın:

SELECT *
FROM sys.databases
WHERE name = 'db1';
GO

SELECT DB_NAME(database_id) AS 'database',
       synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO

Bu AG yüksek kullanılabilirlik yapılandırması değildir. Yüksek kullanılabilirliğe ihtiyacınız varsa, yüksek kullanılabilirlik için Linux üzerinde SQL Server Always On Kullanılabilirlik Grubu'nu yapılandırma yönergelerini izleyin. Özellikle ag'yi CLUSTER_TYPE=WSFC (Windows'da) veya CLUSTER_TYPE=EXTERNAL (Linux'ta) ile oluşturun. Ardından Windows'da Windows Server yük devretme kümelemesi veya Linux üzerinde Pacemaker kullanarak bir küme yöneticisiyle tümleştirebilirsiniz.

Salt okunur ikincil çoğaltmalara bağlanmak

Salt okunur ikincil çoğaltmalara bağlanmanın iki yolu vardır. Uygulamalar doğrudan ikincil çoğaltmayı barındıran SQL Server örneğine bağlanabilir ve veritabanlarını sorgulayabilir. Ayrıca, bir dinleyici gerektiren salt okunur yönlendirmeyi kullanabilirler.

Okuma ölçeğinde AG'de birincil çoğaltmaya yük devretme

Her kullanılabilirlik grubunun tek birincil kopyası vardır. Birincil kopya okuma ve yazma işlemlerine izin verir. Bir replikayı birincil yapmak için geçiş 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ğaltmaya yük devretmenin yolları iki tanedir:

  • Veri kaybı olmadan el ile yük devretme
  • Veri kaybıyla zorla el ile yük devretme

Veri kaybı olmadan el ile yük devretme

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, el ile yük devretme gerçekleştirmeden önce hedef ikincil kopyanın güncel olduğundan emin olun.

Veri kaybı olmadan elle yük devretmek için:

  1. Geçerli 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. Etkin işlemlerin birincil çoğaltmaya ve en az bir zaman uyumlu ikincil çoğaltmaya işlendiğ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 çoğaltma, synchronization_state_descSYNCHRONIZEDolduğunda eşitlenir.

  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'e ayarlar. 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 çoğaltmaya ve en az bir senkron ikincil çoğaltmaya 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 replikayı ana duruma yükseltin.

    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 bu komutu yürütün.

  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çeklendirme amaçları için oluşturduğunuz ve bir küme yöneticisi tarafından yönetilmeyen dinleyicileri yeniden oluşturun. Eğer özgün dinleyici eski birincile işaret ediyorsa, bunu bırakın ve yeni birincile işaret etmesi için yeniden oluşturun.

Veri kaybıyla zorla el ile yük devretme

Birincil replika kullanılamıyorsa ve hemen kurtarılamıyorsa, ikincil replikaya veri kaybıyla bir yük devretmeyi zorlamak zorundasınız. Ancak, asıl birincil kopya yük devretmeden sonra kurtarılırsa, birincil rolünü üstlenecektir. Farklı durumlardaki çoğaltmalardan kaçınmak için, veri kaybıyla sonuçlanan zorunlu bir yük devretme sonrasında, orijinal birincil sunucuyu kullanılabilirlik grubundan çıkarın. Özgün birincil yeniden çevrimiçi olduktan sonra kullanılabilirlik grubunu tamamen kaldırın.

Birincil replika N1'den ikincil replika N2'ye veri kaybıyla manuel yük devretmeyi zorlamak 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 çoğaltmada (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 kopyaya yönlendirildiğini doğrulayın.

  4. Eğer özgün birincil (N1) çevrimiçi olursa, AGRScale kullanılabilirlik grubunu hemen özgün birincilde (N1) çevrimdışı duruma 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. Orijinal birincil çoğaltmadaki (N1) kullanılabilirlik grubu veritabanını kaldırın:

    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.