Changes between Initial Version and Version 1 of Replication


Ignore:
Timestamp:
11/26/25 16:39:30 (5 weeks ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Replication

    v1 v1  
     1
     2== **Складирање и репликација**
     3=== **Логичка репликација**
     4\\
     5Логичка репликација претставува процес на репродуцирање на податоците помеѓу повеќе јазли (инстанци) на база на податоци, при што промените направени на изворниот сервер се запишуваат во бинарни логови и потоа се репродуцираат на реплика-серверите.\\Во пракса, тоа претставува копирање на INSERT, UPDATE, DELETE и DDL операции од еден сервер кон друг, а не директно копирање на физичките датотеки.\\
     6Овој метод овозможува систем отпорен на грешки (fault tolerant), бидејќи секоја промена што се случува на примарната база се пресликува и на репликите.\\
     7 Дополнително, може да се користи за load-balancing - операции за читање се насочуваат кон реплика-инстанците, а write-операциите кон примарниот сервер,\\
     8\\
     9
     10----
     11
     12=== **Подесување на MySQL GTID-базирана репликација со Docker**
     13Во овој чекор ќе конфигурираме **GTID(Global Transaction Identifier)**-базирана логичка репликација во MySQL, користејќи две Docker инстанци  - **source и replica.**\\
     14Секоја трансакција што се извршува во Source серверот добива GTID, кој обезбедува прецизно и автоматско следење и примена на промените во Replica.\\
     15Во MySQL се користат бинарни log датотеки (binlog files) за да се запише секоја промена врз базата - **INSERT, UPDATE, DELETE и DDL**.\\
     16//
     17GTID структурата се гледа преку binlog, пример:\\
     18
     19{{{
     20
     21SET @@SESSION.GTID_NEXT='4e89b248–2c8e-11ed-af3b-020017000790:1';
     22
     23}}}
     24\\
     25Со **GTID** можеме да го користиме **AUTO_POSITION = 1**, што значи:\\
     26> replica сама знае која трансакција ѝ недостига\\
     27> не следиме BINLOG позиции рачно\\
     28> можеме да рестартираме replica без губење на sync\\
     29\\
     30
     31----
     32
     33==**Конфигурација на Source и Replica Docker инстанци**
     34Се одлучивме за конфигурација преку Docker затоа што добиваме изолирана  и лесно пренослива средина, каде секоја MySQL инстанца е одвоена, конфигурирана со сопствени параметри и може да се стартува, стопира или реконфигурира без да влијае на остатокот од системот.\\
     35===**Конфигурирање replica user**
     36
     37{{{
     38
     39CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'replpass';
     40GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
     41FLUSH PRIVILEGES;
     42
     43}}}
     44
     45Овој корисник е потребен за да се воспостави безбедна комуникација меѓу двата сервери. Привилегијата **REPLICATION SLAVE** дозволува читање на bin-log записите и нивно пренесување кон репликата, без да се доделуваат пошироки непотребни администраторски права.\\
     46\\
     47Во replica ја поставуваме врската кон изворниот MySQL инстанцa со следната команда:\\
     48
     49{{{
     50
     51CHANGE REPLICATION SOURCE TO
     52  SOURCE_HOST = 'mysql_source',
     53  SOURCE_PORT = 3306,
     54  SOURCE_USER = 'repl',
     55  SOURCE_PASSWORD = 'replpass',
     56  SOURCE_AUTO_POSITION = 1;
     57
     58START REPLICA;
     59
     60}}}
     61
     62SQL-конфигурацијата ја одвоивме во посебни .sql фајлови кои автоматски се извршуваат преку docker-entrypoint, затоа што:\\
     63> конфигурацијата станува репродуцибилна и повторно извршлива\\
     64> setup-от на репликација е целосно автоматизиран (без рачно внесување команди)\\
     65> ако се создадат контејнерите повторно, MySQL сам ќе ја примени истата конфигурација без дополнителна интервенција\\
     66> документацијата, миграцијата и version-control стануваат чисти и управливи\\
     67\\
     68===Некои конфигурациски параметри за MySQL GTID-базирана репликација
     69[[Image(mysql-parameters.png)]]
     70
     71За подигнување на GTID-базирана репликација, користиме docker-compose.yml во кој дефинираме две MySQL инстанци:\\
     72>**source** → примарен сервер (прифаќа WRITE операции)\\
     73>**replica** → сервер кој ги реплицира состојбите од source (READ-only)\\
     74
     75
     76
     77