Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.
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/hostnameHosts 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/hostsdosyası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/hostsAşağıdaki örnekte,
/etc/hosts,node1,node1venode2eklemeleriylenode3üzerinde gösterilmektedir. Bu örnekte,node1birincil çoğaltmayı barındıran sunucuya,node2venode3ikincil ç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:
- Hızlı Başlangıç: SQL Server'ı yükleme ve Red Hat'de veritabanı oluşturma
- Hızlı Başlangıç: SQL Server'ı yükleme ve SUSE Linux Enterprise Server'da veritabanı oluşturma
- Hızlı Başlangıç: SQL Server'ı yükleme ve Ubuntu'da veritabanı oluşturma
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.
- Salt okunur iş yükünü Always On yüksek erişim grubunun ikincil replikasına devretme
- Yalnızca okunabilir yönlendirme
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:
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);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.REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT1 olarak güncelleştirin.Aşağıdaki betik,
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITadlı bir kullanılabilirlik grubundaag1'ı 1'e ayarlar. Aşağıdaki betiği çalıştırmadan önceag1kullanı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.
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] OFFLINEHedef ikincil replikayı ana duruma yükseltin.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;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.
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 RESUMEOkuma ö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:
İkincil çoğaltmada (N2) zorlamalı yük devretmeyi başlatın:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;Yeni birincil çoğaltmada (N2), orijinal birincil (N1) kaldırın:
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';Tüm uygulama trafiğinin dinleyiciye ve/veya yeni birincil kopyaya yönlendirildiğini doğrulayın.
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] OFFLINEVeriler 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.
Ardından, kullanılabilirlik grubunu özgün birincilden (N1) kaldırın:
DROP AVAILABILITY GROUP [AGRScale];Orijinal birincil çoğaltmadaki (N1) kullanılabilirlik grubu veritabanını kaldırın:
USE [master] GO DROP DATABASE [AGDBRScale] GO(İsteğe bağlı) İsterseniz, artık AGRScale kullanılabilirlik grubuna N1'i yeni bir ikincil çoğaltma olarak geri ekleyebilirsiniz.