Changes between Initial Version and Version 1 of dba_replication


Ignore:
Timestamp:
06/06/25 13:35:22 (8 days ago)
Author:
211012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • dba_replication

    v1 v1  
     1= Скалирање и репликација на базите на податоци
     2
     3
     4== Логичка репликација во PostgreSQL
     5
     6Логичката репликација е напредна функционалност во PostgreSQL што овозможува реплицирање на податоци помеѓу две или повеќе PostgreSQL инстанци. За разлика од физичката репликација која копира блокови на ниво на диск, логичката репликација работи на ниво на податоци и овозможува поголема флексибилност. Логичката репликација е метод за реплицирање на податоци базиран примарните клучеви на табелите. Во суштина, е пример за Publisher-Subscriber шаблонот каде што главната, оперативна база (master, publisher) ги публикува промените кон репликите (subscriber). Логичката репликација и концептот на „праќање“ на податоци се извршува врз WAL-от (Write Ahead Log), при што оперативната база и репликата се синхнорнизираат според последниот испратен и последниот примен и потврден LSN (Log Sequence Number). Во продолежние следуваат примери за конфиграција на логичка репликација помеѓу две PostgreSQL инстанци.
     7
     8=== Подесување параметри
     9
     10Како што е претходно наведено, логичката репликација работи врз WAL-от, па така најпрвин потребно е да ја зголемиме неговата деталност. Зависно од перформансите на машините каде што се хостирани двете инстанци меѓу кои ја поставуваме репликацијата, дополнително можеме да ги подесуваме параметри за број на процеси, worker-и и слично, кои директно влијаат на перформансите на самиот процес на репликација.
     11{{{#!sql
     12wal_level = logical                    # Задолжително треба да биде поставено на logical за да функционира репликацијата
     13max_worker_processes = 8               # Број на worker-и кои може да бидат истовремено стартувани, зависи од бројот на јадра на процесорот
     14max_wal_senders = 10                   # Број на активни реплики
     15max_logical_replication_workers = 4    # Колку од вкупните worker-и може да се користат за реплиакција
     16max_sync_workers_per_subscription = 2  # Колку worker-и може да се користат при иницијлната синхронизација на двете бази
     17}}}
     18
     19== Корисник и привилегии за репликација
     20
     21За да може репликацијата да функционира, потребно е да имаме корисник кој ќе има `REPLICATION` привилегии и дополнително, истиот тој корисник потребно е да има привилегија да се поврзе на оперативната база, да може да ги користи шемите кои ги реплицираме и да може да извршува `SELECT` изрази врз табелите од тие шеми
     22
     23{{{#!sql
     24CREATE USER replica_user WITH REPLICATION LOGIN PASSWORD 'replica_pass';
     25
     26GRANT CONNECT ON DATABASE db_name TO replica_user;
     27GRANT USAGE ON SCHEMA public TO replica_user;
     28GRANT SELECT ON ALL TABLES IN SCHEMA public TO replica_user;
     29GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO replica_user;
     30
     31-- Со оваа команда, се доделува SELECT привилегија на репликацискиот корисник за секоја нова табела во шемата
     32ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO replica_user;
     33}}}
     34
     35== Конфигурирање на оперативната база (Publisher)
     36
     37За да може репликата да се „закачи“ на оперативната база и да слуша на промените кои истата ги публикува потребно е да креираме `PUBLICATION`, во кој ќе бидат додадени табелите кои сакаме да ги реплицираме. Дополнително, доколку е потребно, можеме да воведеме ограничување на тоа кои колони од табелите сакаме да се реплицираат или пак да реплицираме само филтрирани записи според одреден филтер.
     38
     39{{{#!sql
     40CREATE PUBLICATION test_pub;
     41
     42ALTER PUBLICATION test_pub ADD TABLE table1;
     43ALTER PUBLICATION test_pub ADD TABLE table2(id, col1, col2, col3);
     44ALTER PUBLICATION test_pub SET TABLE test_pub WHERE (col1 > 10));
     45
     46}}}
     47
     48Доколку сакаме да престанеме со репликација на одредена табела, потребно е истата да се отстрани од `PUBLICATION`
     49
     50{{{#!sql
     51ALTER PUBLICATION test_pub DROP TABLE table1;
     52}}}
     53
     54== Конфигурирање на реплика (Subscriber)
     55
     56За успешно извршување на процесот на репликација, потребно е шемата на репликата да биде идентична со онаа на оперативната база, односно табелите да ги имаат сите колони кои се реплицираат и типовите да бидат меѓусебно компатибилни. Ова би значело дека доколку во оперативната база користиме кориснички дефиниран тип (енумерација), истата таа колона би можела да биде од тип текст во репликата. Дополнителни колони во репликата се дозволени.
     57
     58По креирање на шемата на базата реплика, потребно е да креираме `SUBSCRIPTION`, каде што ќе ги наведеме конекциските параметри до оперативната база и дополнителни други параметри по потреба.
     59
     60{{{#!sql
     61CREATE SUBSCRIPTION test_sub
     62CONNECTION 'host=192.168.1.100 port=5432 dbname=db_name user=replica_user password=replica_pass'
     63PUBLICATION test_pub
     64WITH (
     65    copy_data = true,           -- Дали да се започне се синхронизација отпочеток
     66    enabled = true,             -- Дали слотот веднаш да биде активен
     67    slot_name = 'test_slot',
     68    synchronous_commit = off    -- Дали да се овозможи асинхрона репликација
     69);
     70}}}
     71
     72Со ова процесот на репликацијата започнува. Доколку правиме некаква промена во `PUBLICATION` на оперативната база, потребно е на репликата да ја извршиме следната команда
     73
     74{{{#!sql
     75ALTER SUBSCRIPTION test_sub REFRESH PUBLICATION;
     76}}}