Menggunakan seeding otomatis untuk menginisialisasi replika sekunder untuk grup ketersediaan AlwaysOn

Berlaku untuk:SQL Server

Pada SQL Server 2012 dan 2014, satu-satunya cara untuk menginisialisasi replika sekunder dalam grup ketersediaan SQL Server AlwaysOn 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 seeding 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 performa dan log 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 terdegradasi dalam jarak yang lebih lama dan tautan dibagikan dengan sumber daya lain di jaringan. Selama seeding, log transaksi pada database di replika utama terus bertambah dan tidak dapat dipotong sampai seeding otomatis database tersebut selesai. Log transaksi kemudian dapat dipotong menggunakan cadangan log transaksi.

Penyemaian otomatis adalah proses utas 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 pemadatan selama seeding otomatis, aktifkan bendera pelacakan 9567 - lihat Menyetel kompresi untuk grup ketersediaan.

Tata letak disk

Pada SQL Server 2016 dan sebelumnya, folder tempat database dibuat oleh seeding otomatis harus sudah ada dan sama dengan jalur pada replika utama.

Pada SQL Server 2017, Microsoft merekomendasikan penggunaan jalur file data dan log yang sama 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 ada 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 primer 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
SQL Server 2016
Lokasi File instans
sekunder
SQL Server 2017
Lokasi File instans
sekunder
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.

Pilih sinkronisasi data awal

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 opsi ke SEEDING_MODEAUTOMATIC. Perilaku default 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 menjadi primer dan database ditambahkan. Mode seeding dapat diubah nanti - lihat Mengubah mode seeding replika.

Pada instans yang menjadi replika sekunder, setelah instans bergabung dengan pesan berikut ditambahkan ke log SQL Server:

Replika ketersediaan lokal untuk grup ketersediaan 'AGName' belum diberikan izin untuk membuat database, tetapi memiliki SEEDING_MODE dari AUTOMATIC. Gunakan ALTER AVAILABILITY GROUP ... GRANT CREATE ANY DATABASE untuk memungkinkan 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 AUTHORIZATIONdatabase . 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 seeding otomatis dapat dilihat di Log SQL Server:

Log server SQL

Gabungkan pencadangan dan pemulihan dengan seeding otomatis

Dimungkinkan untuk menggabungkan cadangan tradisional, salin, dan pulihkan dengan seeding otomatis. Dalam hal ini, pertama-tama pulihkan database pada replika sekunder termasuk semua log transaksi yang tersedia. Selanjutnya, aktifkan seeding 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 seeding otomatis saat ditambahkan ke grup ketersediaan, tidak ada tambahan yang perlu dilakukan. Jika replika sekunder menggunakan pencadangan, 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 seeding 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 seeding 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 seeding otomatis:

Tampilan Manajemen Dinamis

Ada dua tampilan manajemen dinamis (DMV) untuk memantau penyemaian: 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 (baik berhasil atau tidak). Kolom current_state memiliki nilai COMPLETED atau FAILED. Jika nilaiNYA GAGAL, gunakan nilai di failure_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 seeding otomatis saat sedang dijalankan. sys.dm_hadr_automatic_seedingSeperti halnya , ini mengembalikan nilai untuk replika primer dan sekunder, tetapi riwayat ini tidak disimpan. Nilai hanya untuk eksekusi saat ini, dan tidak dipertahankan. Kolom yang menarik meliputi start_time_utc, , end_time_utcestimate_time_complete_utc, total_disk_io_wait_time_ms, total_network_wait_time_ms, dan jika operasi seeding gagal, failure_message.

Tabel riwayat pencadangan

Penyemaian otomatis juga menempatkan entri ke msdb dalam 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 di backupset memiliki nama replika utama untuk server_name dan machine_name.

Aktivitas yang Diperluas

Seeding 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 seeding 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 seeding 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 seeding otomatis dikirimkan.
hadr_automatic_seeding_state_transition Terjadi ketika operasi seeding otomatis berubah status.
hadr_automatic_seeding_success Terjadi ketika operasi seeding 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