Gunakan penyemaian otomatis untuk menginisialisasi replika sekunder untuk grup ketersediaan AlwaysOn
Berlaku untuk: SQL Server
Di SQL Server 2012 dan 2014, satu-satunya cara untuk menginisialisasi replika sekunder dalam grup ketersediaan AlwaysOn SQL Server adalah dengan menggunakan pencadangan, penyalinan, dan pemulihan. SQL Server 2016 memperkenalkan fitur baru untuk menginisialisasi replika sekunder - seeding otomatis. Penyemaian otomatis menggunakan transportasi aliran log untuk mengalirkan cadangan menggunakan VDI ke replika sekunder untuk setiap database grup ketersediaan menggunakan titik akhir yang dikonfigurasi. Fitur baru ini dapat digunakan baik selama pembuatan awal grup ketersediaan atau saat database ditambahkan ke grup ketersediaan. Penyemaian otomatis ada di semua edisi SQL Server yang mendukung grup ketersediaan AlwaysOn, dan dapat digunakan dengan grup ketersediaan tradisional dan grup ketersediaan terdistribusi.
Keamanan
Izin keamanan bervariasi tergantung pada jenis replika yang diinisialisasi:
- Untuk grup ketersediaan tradisional, izin harus diberikan ke grup ketersediaan pada replika sekunder saat bergabung ke grup ketersediaan. Di Transact-SQL, gunakan perintah
ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE
. - Untuk grup ketersediaan terdistribusi di mana database replika yang sedang dibuat berada di replika utama grup ketersediaan kedua, tidak ada izin tambahan yang diperlukan karena sudah menjadi primer. Namun, jika hanya ada satu replika pada grup ketersediaan kedua, maka berikan
CREATE ANY DATABASE
izin ke nama grup ketersediaan sekunder, atau penyemaian otomatis mungkin gagal. - Untuk replika sekunder pada grup ketersediaan kedua dari grup ketersediaan terdistribusi, Anda harus menggunakan perintah
ALTER AVAILABILITY GROUP [<2ndAGName>] GRANT CREATE ANY DATABASE
. Replika sekunder ini disemai dari primer grup ketersediaan kedua.
Dampak log performa dan transaksi pada replika utama
Penyemaian otomatis mungkin atau mungkin tidak praktis untuk menginisialisasi replika sekunder, tergantung pada ukuran database, kecepatan jaringan, dan jarak antara replika primer dan sekunder. Misalnya, diberikan:
- Ukuran database adalah 5 TB
- Kecepatan jaringan adalah 1Gb/detik
- Jarak antara kedua situs adalah 1000 mil
Jika bandwidth penuh tersedia, jaringan 1Gb/detik dapat menyediakan throughput berkelanjutan sebesar 125 MB/detik. Dalam contoh ini, penyemaian otomatis akan memakan waktu hanya lebih dari 11 jam. Dalam praktiknya, proses penyemaian otomatis lebih lambat, karena sinyal jaringan turun dari jarak yang lebih panjang dan tautan dibagikan dengan sumber daya lain di jaringan. Selama penyemaian, log transaksi pada database di replika utama terus bertambah dan tidak dapat dipotong sampai penyemaian otomatis database tersebut selesai. Log transaksi kemudian dapat dipotong menggunakan cadangan log transaksi.
Penyemaian otomatis adalah proses berulir tunggal yang dapat menangani hingga lima database. Utas tunggal memengaruhi performa, terutama jika grup ketersediaan memiliki lebih dari satu database.
Pemadatan dapat digunakan untuk seeding otomatis, tetapi dinonaktifkan secara default. Mengaktifkan kompresi mengurangi bandwidth jaringan dan mungkin mempercepat proses, tetapi tradeoff adalah overhead prosesor tambahan. Untuk menggunakan kompresi selama seeding otomatis, aktifkan bendera pelacakan 9567 - lihat Menyetel kompresi untuk grup ketersediaan.
Tata letak disk
Di SQL Server 2016 dan sebelumnya, folder tempat database dibuat oleh seeding otomatis harus sudah ada dan sama dengan jalur pada replika utama.
Di SQL Server 2017, Microsoft merekomendasikan penggunaan data yang sama dan jalur file log pada semua replika yang berpartisipasi dalam grup ketersediaan tetapi Anda dapat menggunakan jalur yang berbeda jika perlu. Misalnya, dalam grup ketersediaan lintas platform, satu instans SQL Server ada di Windows dan instans SQL Server lain berada di Linux. Platform yang berbeda memiliki jalur default yang berbeda. SQL Server 2017 mendukung replika grup ketersediaan pada instans SQL Server dengan jalur default yang berbeda.
Tabel berikut menyajikan contoh tata letak disk data yang didukung yang dapat mendukung seeding otomatis:
Jalur data Default instans utama |
Jalur data Default instans sekunder |
Lokasi file Sumber instans utama |
Lokasi file Target instans sekunder |
---|---|---|---|
c:\data\ | /var/opt/mssql/data/ | c:\data\ | /var/opt/mssql/data/ |
c:\data\ | /var/opt/mssql/data/ | c:\data\group1\ | /var/opt/mssql/data/group1/ |
c:\data\ | d:\data\ | c:\data\ | d:\data\ |
c:\data\ | d:\data\ | c:\data\group1\ | d:\data\group1\ |
Skenario di mana lokasi database replika primer dan sekunder bukan jalur default instans tidak terpengaruh oleh perubahan ini. Persyaratan untuk jalur file replika sekunder agar sesuai dengan jalur file replika utama tetap sama.
Jalur data Default instans utama |
Jalur data Default instans sekunder |
Lokasi File instans utama |
Lokasi File instans sekunder |
---|---|---|---|
c:\data\ | c:\data\ | d:\group1\ | d:\group1\ |
c:\data\ | c:\data\ | d:\data\ | d:\data\ |
c:\data\ | c:\data\ | d:\data\group1\ | d:\data\group1\ |
Jika Anda mencampur jalur default dan non default pada replika utama dan sekunder, SQL Server 2017 bereaksi berbeda dari rilis sebelumnya. Tabel berikut ini memperlihatkan perilaku SQL Server 2017.
Jalur data Default instans utama |
Jalur data Default instans sekunder |
Lokasi File instans utama |
Lokasi File instans Sekunder SQL Server 2016 |
Lokasi File instans sekunder SQL Server 2017 |
---|---|---|---|---|
c:\data\ | d:\data\ | c:\data\ | c:\data\ | d:\data\ |
c:\data\ | d:\data\ | c:\data\group1\ | c:\data\group1\ | d:\data\group1\ |
Untuk kembali ke perilaku untuk SQL Server 2016 dan sebelumnya, aktifkan bendera pelacakan 9571. Untuk informasi tentang cara mengaktifkan bendera pelacakan, lihat DBCC TRACEON (Transact-SQL).
Membuat grup ketersediaan dengan seeding otomatis
Anda membuat grup ketersediaan menggunakan seeding otomatis dengan Transact-SQL atau SQL Server Management Studio (SSMS, versi 17 atau yang lebih baru). Untuk menggunakan Wizard Grup Ketersediaan di SSMS, ikuti instruksi ini - saat Anda masuk ke Langkah 9, perhatikan bahwa seeding otomatis adalah opsi pertama, dan default.
Contoh berikut membuat grup ketersediaan dengan seeding otomatis menggunakan Transact-SQL. Lihat juga topik Membuat Grup Ketersediaan (Transact-SQL). Penyemaian diaktifkan pada replika sekunder dengan mengatur SEEDING_MODE
opsi ke AUTOMATIC
. Perilaku defaultnya adalah MANUAL
, yang merupakan perilaku pra-SQL Server 2016 - mengharuskan pencadangan database dibuat pada replika utama, salinan file cadangan ke replika sekunder, dan pemulihan cadangan WITH NORECOVERY
.
CREATE AVAILABILITY GROUP [<AGName>]
FOR DATABASE db1
REPLICA ON N'Primary_Replica'
WITH (
ENDPOINT_URL = N'TCP://Primary_Replica.Contoso.com:5022',
FAILOVER_MODE = AUTOMATIC,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT
),
N'Secondary_Replica' WITH (
ENDPOINT_URL = N'TCP://Secondary_Replica.Contoso.com:5022',
FAILOVER_MODE = AUTOMATIC,
SEEDING_MODE = AUTOMATIC);
GO
Pengaturan SEEDING_MODE
pada replika utama selama CREATE AVAILABILITY GROUP
pernyataan tidak berpengaruh karena replika utama sudah berisi salinan baca/tulis utama database. SEEDING_MODE
hanya akan berlaku ketika replika lain dibuat sebagai primer dan database ditambahkan. Mode seeding dapat diubah nanti - lihat Mengubah mode seeding replika.
Pada instans yang menjadi replika sekunder, setelah instans digabungkan, pesan berikut ditambahkan ke Log SQL Server:
Replika ketersediaan lokal untuk grup ketersediaan 'AGName' belum diberikan izin untuk membuat database, tetapi memiliki
SEEDING_MODE
.AUTOMATIC
GunakanALTER AVAILABILITY GROUP ... GRANT CREATE ANY DATABASE
untuk mengizinkan pembuatan database yang disemai oleh replika ketersediaan utama.
Memberikan izin buat database pada replika sekunder ke grup ketersediaan
Setelah bergabung, berikan izin grup ketersediaan untuk membuat database pada instans replika sekunder SQL Server. Agar penyemaian otomatis berfungsi, grup ketersediaan memerlukan izin untuk membuat database.
Tip
Ketika grup ketersediaan membuat database pada replika sekunder, grup tersebut menetapkan "sa" (lebih khusus akun dengan sid 0x01) sebagai pemilik database.
Untuk mengubah pemilik database setelah replika sekunder secara otomatis membuat penggunaan ALTER AUTHORIZATION
database . Lihat MENGUBAH OTORISASI (Transact-SQL).
Contoh berikut memberikan izin ini ke grup ketersediaan yang disebut AGName.
ALTER AVAILABILITY GROUP [<AGName>]
GRANT CREATE ANY DATABASE
GO
Jika perlu atur pemilik database pada replika sekunder.
Memverifikasi seeding otomatis
Jika berhasil, database secara otomatis dibuat pada replika sekunder dengan status:
- DISINKRONKAN jika replika sekunder dikonfigurasi agar sinkron dan data disinkronkan.
- MENYINKRONKAN jika replika sekunder dikonfigurasi dengan pergerakan data asinkron, atau ketika dikonfigurasi dengan sinkron tetapi belum disinkronkan dengan replika utama.
Selain Tampilan Manajemen Dinamis yang dijelaskan di bawah ini, awal dan penyelesaian penyemaian otomatis dapat dilihat di Log SQL Server:
Menggabungkan pencadangan dan pemulihan dengan seeding otomatis
Dimungkinkan untuk menggabungkan cadangan tradisional, menyalin, dan memulihkan dengan seeding otomatis. Dalam hal ini, pertama-tama pulihkan database pada replika sekunder termasuk semua log transaksi yang tersedia. Selanjutnya, aktifkan penyemaian otomatis saat membuat grup ketersediaan untuk "mengejar" database replika sekunder, seolah-olah cadangan log ekor dipulihkan (lihat Tail-Log Backups (SQL Server)).
Menambahkan database ke grup ketersediaan dengan seeding otomatis
Anda dapat menambahkan database ke grup ketersediaan menggunakan seeding otomatis menggunakan Transact-SQL atau SQL Server Management Studio (SSMS, versi 17 atau yang lebih baru).
Jika replika sekunder menggunakan penyemaian otomatis saat ditambahkan ke grup ketersediaan, tidak ada tambahan yang perlu dilakukan. Jika replika sekunder menggunakan cadangan, salin, dan pemulihan, pertama-tama ubah mode seeding (lihat bagian berikutnya) lalu saat menambahkan database gunakan GRANT
pernyataan - lihat Grup Ketersediaan - Tambahkan Database.
Mengubah mode penyemaian replika
Mode seeding replika dapat diubah setelah grup ketersediaan dibuat, sehingga seeding otomatis dapat diaktifkan atau dinonaktifkan. Mengaktifkan seeding otomatis setelah pembuatan memungkinkan database ditambahkan ke grup ketersediaan menggunakan seeding otomatis jika dibuat dengan pencadangan, penyalinan, dan pemulihan. Contohnya:
ALTER AVAILABILITY GROUP [AGName]
MODIFY REPLICA ON 'Replica_Name'
WITH (SEEDING_MODE = AUTOMATIC)
Untuk menonaktifkan seeding otomatis, gunakan nilai MANUAL.
Mencegah penyemaian otomatis setelah grup ketersediaan dibuat
Jika Anda tidak ingin menonaktifkan seeding otomatis sepenuhnya untuk replika sekunder, tetapi ingin mencegah replika sekunder untuk sementara waktu agar tidak dapat membuat database secara otomatis, tolak izin CREATE grup ketersediaan. Ini adalah kasus ketika database baru ditambahkan ke grup ketersediaan, tetapi grup ketersediaan tidak boleh diizinkan untuk membuat database pada replika sekunder.
ALTER AVAILABILITY GROUP [AGName]
DENY CREATE ANY DATABASE
GO
Memantau seeding otomatis
Ada empat cara untuk memantau dan memecahkan masalah penyemaian otomatis:
- Log SQL Server seperti yang sudah dijelaskan
- Tampilan manajemen dinamis
- Tabel riwayat cadangan
- Kejadian yang diperluas
Dynamic Management Views
Ada dua tampilan manajemen dinamis (DMV) untuk memantau seeding: sys.dm_hadr_automatic_seeding
dan sys.dm_hadr_physical_seeding_stats
.
sys.dm_hadr_automatic_seeding
berisi status umum seeding otomatis, dan mempertahankan riwayat untuk setiap kali dijalankan (apakah berhasil atau tidak). Kolomcurrent_state
memiliki nilai COMPLETED atau FAILED. Jika nilai GAGAL, gunakan nilai difailure_state_desc
untuk membantu mendiagnosis masalah. Anda mungkin perlu menggabungkannya dengan apa yang ada di Log SQL Server untuk melihat apa yang salah. DMV ini diisi pada replika utama dan semua replika sekunder.sys.dm_hadr_physical_seeding_stats
menunjukkan status operasi penyemaian otomatis saat dijalankan.sys.dm_hadr_automatic_seeding
Seperti halnya , ini mengembalikan nilai untuk replika utama dan sekunder, tetapi riwayat ini tidak disimpan. Nilai hanya untuk eksekusi saat ini, dan tidak dipertahankan. Kolom yang menarik meliputistart_time_utc
, ,end_time_utc
estimate_time_complete_utc
,total_disk_io_wait_time_ms
,total_network_wait_time_ms
, dan jika operasi seeding gagal, failure_message.
Tabel riwayat cadangan
Penyemaian otomatis juga menempatkan entri ke dalam msdb
tabel yang menyimpan riwayat untuk pencadangan dan pemulihan. Pada replika sekunder yang menerima seeding otomatis, backupmediafamily
kolom physical_device_name tabel memiliki GUID untuk nilainya, dan entri yang sesuai memiliki backupset
nama replika utama untuk server_name dan machine_name.
Aktivitas yang Diperluas
Penyemaian otomatis menambahkan peristiwa baru yang diperluas untuk melacak perubahan status, kegagalan, dan statistik performa selama inisialisasi. Misalnya, skrip berikut membuat sesi peristiwa yang diperluas yang menangkap peristiwa yang terkait dengan penyemaian otomatis.
CREATE EVENT SESSION [AlwaysOn_autoseed] ON SERVER
ADD EVENT sqlserver.hadr_automatic_seeding_state_transition,
ADD EVENT sqlserver.hadr_automatic_seeding_timeout,
ADD EVENT sqlserver.hadr_db_manager_seeding_request_msg,
ADD EVENT sqlserver.hadr_physical_seeding_backup_state_change,
ADD EVENT sqlserver.hadr_physical_seeding_failure,
ADD EVENT sqlserver.hadr_physical_seeding_forwarder_state_change,
ADD EVENT sqlserver.hadr_physical_seeding_forwarder_target_state_change,
ADD EVENT sqlserver.hadr_physical_seeding_progress,
ADD EVENT sqlserver.hadr_physical_seeding_restore_state_change,
ADD EVENT sqlserver.hadr_physical_seeding_submit_callback
ADD TARGET package0.event_file(
SET filename=N'autoseed.xel',
max_file_size=(5),
max_rollover_files=(4)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
MAX_EVENT_SIZE=0 KB,
MEMORY_PARTITION_MODE=NONE,
TRACK_CAUSALITY=OFF,
STARTUP_STATE=ON
)
GO
ALTER EVENT SESSION AlwaysOn_autoseed ON SERVER STATE=START
GO
Tabel berikut ini mencantumkan peristiwa yang diperluas yang terkait dengan seeding otomatis.
Nama | Deskripsi |
---|---|
hadr_db_manager_seeding_request_msg | Pesan permintaan penyemaian. |
hadr_physical_seeding_backup_state_change | Perubahan status sisi pencadangan seeding fisik. |
hadr_physical_seeding_restore_state_change | Perubahan status sisi pemulihan penyemaian fisik. |
hadr_physical_seeding_forwarder_state_change | Perubahan status sisi penerus seeding fisik. |
hadr_physical_seeding_forwarder_target_state_change | Perubahan status sisi target penerus seeding fisik. |
hadr_physical_seeding_submit_callback | Penyemaian fisik mengirimkan peristiwa panggilan balik. |
hadr_physical_seeding_failure | Peristiwa kegagalan penyemaian fisik. |
hadr_physical_seeding_progress | Peristiwa kemajuan penyemaian fisik. |
hadr_physical_seeding_schedule_long_task_failure | Aktivitas kegagalan tugas panjang jadwal seeding fisik. |
hadr_automatic_seeding_start | Terjadi ketika operasi penyemaian otomatis dikirimkan. |
hadr_automatic_seeding_state_transition | Terjadi ketika operasi seeding otomatis berubah status. |
hadr_automatic_seeding_success | Terjadi ketika operasi penyemaian otomatis berhasil. |
hadr_automatic_seeding_failure | Terjadi ketika operasi seeding otomatis gagal. |
hadr_automatic_seeding_timeout | Terjadi ketika waktu operasi penyemaian otomatis habis. |
Lihat juga
UBAH GRUP KETERSEDIAAN (Transact-SQL)
BUAT GRUP KETERSEDIAAN (Transact-SQL)
Panduan Pemecahan Masalah dan Pemantauan Grup Ketersediaan AlwaysOn