Inicializace skupiny dostupnosti AlwaysOn pomocí automatického počátečního nastavení

platí pro:SQL Server

SQL Server 2016 zavedlo automatické seedování skupin dostupnosti. Když vytvoříte skupinu dostupnosti s automatickým počátečním vytvořením, SQL Server automaticky vytvoří sekundární repliky pro každou databázi ve skupině. Sekundární repliky už nemusíte zálohovat a obnovovat ručně. Pokud chcete povolit automatické počáteční nastavení, vytvořte skupinu dostupnosti pomocí T-SQL nebo použijte nejnovější verzi SQL Server Management Studio.

Další informace najdete v tématu Automatické osazení sekundárních replik.

Předpoklady

V SQL Serveru 2016 automatické nasazení osiva vyžaduje, aby cesta k datovým souborům a souborům protokolu byla stejná na všech instancích SQL Serveru, které se účastní skupiny dostupnosti. V SQL Server 2017 můžete použít různé cesty, ale Microsoft doporučuje používat stejné cesty, pokud jsou všechny repliky hostované na stejné platformě (například Windows nebo Linux). Skupiny dostupnosti napříč platformami mají různé cesty pro repliky. Podrobnosti najdete v tématu Rozložení disku.

Počáteční dělení skupiny dostupnosti komunikuje přes koncový bod zrcadlení databáze. Na každém serveru otevřete příchozí pravidla brány firewall na port koncového bodu zrcadlení.

Databáze ve skupině dostupnosti musí být v úplném modelu obnovení. Databáze musí mít aktuální úplné zálohování a zálohování transakčních protokolů. Tyto záložní soubory se nepoužívají k automatickému počátečnímu nastavení, ale před zahrnutím databáze do skupiny dostupnosti jsou potřeba.

Vytvořit skupinu dostupnosti pomocí automatického nasazení

Pokud chcete vytvořit skupinu dostupnosti s automatickým počátečním nastavením, nastavte SEEDING_MODE=AUTOMATIC.

Následující příklad vytvoří skupinu dostupnosti ve dvouuzlovém clusteru s podporou převzetí služeb při selhání systému Windows Server. Před spuštěním skriptů aktualizujte hodnoty pro vaše prostředí.

  1. Vytvořte endpointy. Každý server potřebuje koncový bod. Následující skript vytvoří koncový bod, který pro naslouchací proces používá port TCP 5022. Nastavte <endpoint_name> a LISTENER_PORT tak, aby odpovídaly vašemu prostředí, a spusťte skript na obou serverech:

    CREATE ENDPOINT [<endpoint_name>] 
        STATE=STARTED
        AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
        FOR DATA_MIRRORING (
            ROLE = ALL, 
            AUTHENTICATION = WINDOWS NEGOTIATE, 
            ENCRYPTION = REQUIRED ALGORITHM AES
            )
    GO
    
  2. Vytvořte skupinu dostupnosti. Následující skript vytvoří skupinu dostupnosti. Aktualizujte hodnoty v nárožních závorkách <> pro název skupiny, názvy serverů a názvy domén a spusťte je v primární instanci SQL Server.

    CREATE AVAILABILITY GROUP [<availability_group_name>]
        FOR DATABASE db1
        REPLICA ON'<*primary_server*>'
        WITH (ENDPOINT_URL = N'TCP://<primary_server>.<fully_qualified_domain_name>:5022', 
            FAILOVER_MODE = AUTOMATIC, 
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            BACKUP_PRIORITY = 50, 
            SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), 
            SEEDING_MODE = AUTOMATIC),
        N'<secondary_server>' WITH (ENDPOINT_URL = N'TCP://<secondary_server>.<fully_qualified_domain_name>:5022', 
            FAILOVER_MODE = AUTOMATIC, 
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            BACKUP_PRIORITY = 50, 
            SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), 
            SEEDING_MODE = AUTOMATIC);
    GO
    
  3. Připojte sekundární instanci serveru ke skupině dostupnosti a udělte skupině dostupnosti oprávnění k vytvoření databáze. Aktualizujte následující skript, nahraďte hodnoty v úhlových závorkách <> pro vaše prostředí a spusťte ho na sekundární instanci repliky SQL Server:

    ALTER AVAILABILITY GROUP [<availability_group_name>] JOIN
    GO  
    ALTER AVAILABILITY GROUP [<availability_group_name>] GRANT CREATE ANY DATABASE
    GO
    

SQL Server automaticky vytvoří repliku databáze na sekundárním serveru. Pokud je databáze velká, může dokončení synchronizace databáze nějakou dobu trvat. Pokud je databáze ve skupině dostupnosti nakonfigurované pro automatické nasazování, můžete se dotazovat na systémové zobrazení sys.dm_hadr_automatic_seeding ke sledování průběhu nasazování. Následující dotaz vrátí jeden řádek pro každou databázi, která je součástí skupiny dostupnosti nakonfigurované pro automatické nasazování.

SELECT start_time,
    ag.name,
    db.database_name,
    current_state,
    performed_seeding,
    failure_state,
    failure_state_desc
FROM sys.dm_hadr_automatic_seeding autos 
    JOIN sys.availability_databases_cluster db 
        ON autos.ag_db_id = db.group_database_id
    JOIN sys.availability_groups ag 
        ON autos.ag_id = ag.group_id

Zabránit automatickému počátečnímu nasazení po vytvoření skupiny dostupnosti

Pokud chcete dočasně zabránit tomu, aby primární replika seskupila více databází do sekundární repliky, můžete zakázat oprávnění skupiny dostupnosti k vytváření databází. Spuštěním následujícího dotazu na instanci, která je hostitelem sekundární repliky, za účelem odepření oprávnění skupiny dostupnosti k vytvoření databází replik.

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    DENY CREATE ANY DATABASE
GO

Povolit automatické osazení ve stávající skupině dostupnosti

U existující databáze můžete nastavit automatické naplnění daty. Následující příkaz změní skupinu dostupnosti tak, aby používala automatické nasazování. Na primární replice spusťte následující příkaz.

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    MODIFY REPLICA ON '<secondary_node>' 
    WITH (SEEDING_MODE = AUTOMATIC)
GO

Předchozí příkaz v případě potřeby vynutí restart zavádění počátečních dat databáze. Pokud například seeding selže kvůli nedostatku místa na disku v sekundární replice, spusťte ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC), aby se seeding restartoval poté, co uvolníte místo na disku.

Zastavit automatické seedování

Chcete-li zastavit automatické nasazování pro skupinu dostupnosti, spusťte na primární replice následující skript:

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    MODIFY REPLICA ON '<secondary_node>'   
    WITH (SEEDING_MODE = MANUAL)
GO

Předchozí skript zruší počáteční nasazení u všech replik, u nichž právě probíhá, a zabrání serveru SQL Server v automatické inicializaci jakýchkoli replik v této skupině dostupnosti. Nezastaví synchronizaci pro žádné repliky, které jsou již inicializovány.

Monitorování skupiny dostupnosti automatického seedingu

Použijte systémová zobrazení dynamické správy k monitorování počátečního osazení

Následující systémová zobrazení ukazují stav automatického seedingu v SQL Serveru.

sys.dm_hadr_automatic_seeding

Na primární replice spusťte dotaz sys.dm_hadr_automatic_seeding, abyste zkontrolovali stav procesu automatického nasazení. Zobrazení vrátí jeden řádek pro každý počáteční proces. Příklad:

SELECT start_time, 
    completion_time
    is_source,
    current_state,
    failure_state,
    failure_state_desc
FROM sys.dm_hadr_automatic_seeding

sys.dm_hadr_physical_seeding_stats

Na primární replice zadejte dotaz na DMV sys.dm_hadr_physical_seeding_stats, chcete-li zobrazit fyzické statistiky pro každý proces inicializace, který aktuálně běží. Následující dotaz vrátí řádky při spuštění seedingu:

SELECT * FROM sys.dm_hadr_physical_seeding_stats;

Dva sloupce total_disk_io_wait_time_ms a total_network_wait_time_ms lze použít k určení kritických bodů výkonu v procesu automatického počátečního nastavení. Oba sloupce jsou také přítomny v rozšířené události hadr_physical_seeding_progress.

  • total_disk_io_wait_time_ms představuje čas strávený vláknem zálohování/obnovení při čekání na disk. Tato hodnota se kumuluje od začátku seedování. Pokud disky nejsou připravené ke čtení nebo zápisu streamu zálohování, vlákno zálohování/obnovení přejde do stavu spánku a probudí se každých sekundu, aby zkontrolovalo, jestli je disk připravený.

  • total_network_wait_time_ms se pro primární a sekundární repliku interpretují odlišně. V primární replice představuje tento čítač dobu řízení toku sítě. V sekundární replice to představuje čas, kdy vlákno obnovení čeká na dostupnost zprávy pro zápis na disk.

Diagnostikovat inicializaci databáze pomocí automatického osévání v protokolu chyb

Když přidáte databázi do skupiny dostupnosti nakonfigurované pro automatické počáteční nastavení, SQL Server provede zálohu VDI přes koncový bod skupiny dostupnosti. V protokolu chyb SQL Server najdete informace o dokončení zálohování a synchronizaci sekundárního serveru.

Diagnostikujte stav databáze pomocí funkce Extended Events

Automatické seedování obsahuje nové rozšířené události pro sledování změn stavu, selhání a statistik výkonu během inicializace.

Tento skript například vytvoří relaci rozšířených událostí, která zachycuje události související s automatickým nasazováním:

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 

Následující tabulka uvádí rozšířené události související s automatickým oséváním:

Name Description
hadr_db_manager_seeding_request_msg Zpráva požadavku na zasévání
hadr_physical_seeding_backup_state_change Změna stavu fyzického zálohování na straně zálohování
hadr_physical_seeding_restore_state_change Změna stavu na straně obnovení během fyzické inicializace.
hadr_physical_seeding_forwarder_state_change Změna stavu fyzického předsílaného bočního stavu.
hadr_physical_seeding_forwarder_target_state_change Změna stavu na cílové straně předávací služby pro fyzické zavedení počátečních dat.
hadr_physical_seeding_submit_callback Fyzická počáteční událost odeslání zpětného volání
hadr_physical_seeding_failure Událost selhání fyzického počátečního nasazení
hadr_physical_seeding_progress Událost průběhu fyzického zavádění počátečních dat.
hadr_physical_seeding_schedule_long_task_failure Událost selhání dlouhé úlohy harmonogramu fyzického počátečního naplnění
hadr_automatic_seeding_start Nastane, když je odeslána operace automatické inicializace.
hadr_automatic_seeding_state_transition Nastane, když automatická operace počátečního naplnění změní stav.
hadr_automatic_seeding_success Nastane při úspěšném dokončení operace automatického nasazení.
hadr_automatic_seeding_failure Nastane, když se nezdaří operace automatického nasazení.
hadr_automatic_seeding_timeout Nastane, když vyprší časový limit pro automatickou operaci počáteční replikace.

Další aspekty řešení potíží

Sledovat při automatickém zahájení replikace

Dotazujte se pomocí sys.dm_hadr_physical_seeding_stats na aktuálně spuštěné procesy automatického seedování. Zobrazení vrátí jeden řádek pro každou databázi. Příklad:

SELECT local_database_name, 
    role_desc, 
    internal_state_desc, 
    transfer_rate_bytes_per_second, 
    transferred_size_bytes, 
    database_size_bytes, 
    start_time_utc, 
    end_time_utc, estimate_time_complete_utc, 
    total_disk_io_wait_time_ms, 
    total_network_wait_time_ms, 
    is_compression_enabled 
FROM sys.dm_hadr_physical_seeding_stats

Řešení potíží s tím, proč se databáze nezobrazuje ve skupině dostupnosti nakonfigurované pro automatické počáteční nasazení

Pokud se databázi nepodaří zobrazit jako součást skupiny dostupnosti s povoleným automatickým seedingem, automatické seedování pravděpodobně nezdařilo. Tím zabráníte přidání databáze do skupiny dostupnosti na primární i sekundární replice. Spusťte dotaz na sys.dm_hadr_automatic_seeding v primární i sekundární replice. Například spusťte následující dotaz, abyste zjistili stav selhání automatického seedování.

SELECT start_time, 
    completion_time, 
    is_source, 
    current_state, 
    failure_state, 
    failure_state_desc, 
    error_code 
FROM sys.dm_hadr_automatic_seeding

Automatické osazení počátečními daty a aspekty výkonu

SQL Server používá k automatickému seedování pevný počet vláken. V primární instanci SQL Server ke čtení změn používá jedno vlákno na jednotku LUN. V sekundární instanci SQL Server k inicializaci databáze používá jedno vlákno na jednotku LUN.

Nastavte příznak trasování 9567 na primární replice, aby se během automatického odsaování povolila komprese datového proudu. To může výrazně zkrátit dobu přenosu při automatickém seedingu, ale také to zvyšuje využití CPU. Další informace naleznete v tématu Ladění komprese pro skupinu dostupnosti.

Kdy nepoužívat automatické nasazování

V některých scénářích nemusí být automatické osazení optimální pro inicializaci sekundární repliky. Během automatického počátečního nastavení SQL Server provede zálohu sítě pro inicializaci. Tento proces může být pomalý, pokud jsou databáze velmi velké nebo je sekundární replika vzdálená. Transakční protokol pro tyto databáze nelze během procesu zálohování zkrátit, takže dlouhodobý proces inicializace v zaneprázdněné databázi může vést k významnému růstu transakčního protokolu. Před přidáním databáze do skupiny dostupnosti s automatickým počátečním nasazením vyhodnoťte velikost databáze, zatížení a vzdálenost mezi lokalitami replik.

Viz také