1. Replikacija u bazama podataka
Vatroslav Mileusnić, univ.bacc.inf.
mileusnic.vatroslav@gmail.com
DORS/CLUC
Zagreb, 24.5.2012.
2. Što je replikacija?
Replikacija baza podataka je kreiranje i održavanje
višestrukih kopija iste baze.
Vrste replikacija:
sinkrona i asinkrona
master-slave i master-master (multimaster)
...
3. Sinkrona Asinkrona
propagira svaku transakciju propagira skup transakcija
puno veći overhead zbog koristi manje mrežne
uspostavljanja konekcije za propusnosti i pruža bolje
svaku transakciju performanse
zaustavlja replikaciju ako je visoka dostupnost
jedan server nedostupan replikacijske grupe
mogućnost sukoba podataka
mogućnost izgubljenih
transakcija
4. Master-slave Multimaster
1 glavna, ostale kopije višegospodarska
zapisuje se na master replikacija
propagira se ostalima moguće zapisivati na bilo
koji server, pa se
čitanje se dijeli između propagira svim ostalima
svih servera
čitanje se dijeli između
konfiguriranje slave svih servera
servera da preuzme
ulogu master-a ako snažna i fleksibilna
pravi master ispadne mogućnost, ali i vrlo
kompleksna
5. Problemi kod multimaster replikacije
mogućnost sukoba u asinkronoj replikaciji
sukob ažuriranja
sukob jedinstvenosti
sukob brisanja
moguća rješenja:
konfiguriranje aplikacije da piše u samo jednu bazu
omogućiti da aplikacija može pisati u drugu bazu, ako prva
ispadne
6. Problemi kod multimaster replikacije
vrlo kratki intervali pražnjenja redova
korištenje velikog broja resursa sustava
pokretanje i zaustavljanje pražnjenja redova zahtijeva puno
procesorskih ciklusa
rješenje:
ne pretjerivati sa zahtjevima intervala pražnjenja
intervali od 1 ili više minuta su sasvim u redu
7. Problemi kod multimaster replikacije
alat za nadgledanje replikacijskog sustava
ako koristimo sinkronu replikaciju, svi serveri moraju biti
aktivni i ispravni
automatizirani alat koji periodično provjera status svih
servera
ako alat odredi da je neki server nedostupan, pokušat će
ga ponovno pokrenuti, a ako ne uspije, uklonit će ga iz
replikacije, tako da replikacija može dalje funkcionirati
8. Primjer replikacije
Asinkrona master-slave replikacija u MySQL-u
Asinkrona master-slave replikacija u PostgreSQL-u
Asinkrona multimaster replikacija u CouchDB-u
Prikazana rješenja nisu konfigurirana za produkcijske
servere, ali su dovoljno dobra za učenje i shvaćanje
9. MySQL
Na serverima kreirati bazu podataka (replicate_me)
Na master serveru izmijeniti: /etc/mysql/my.cnf
#skip-networking
#bind-address = 127.0.0.1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = replicate_me
server-id=1
Snimiti datoteku i resetirati MySQL
10. MySQL
Ući u MySQL i dodijeliti prava slave korisniku:
GRANT REPLICATION SLAVE ON *.* TO
slave_korisnik@192.168.1.101 IDENTIFIED BY 'lozinka';
GRANT RELOAD SLAVE ON *.* TO
slave_korisnik@192.168.1.101 IDENTIFIED BY 'lozinka';
GRANT SUPER SLAVE ON *.* TO
slave_korisnik@192.168.1.101 IDENTIFIED BY 'lozinka';
FLUSH PRIVILEGES;
11. MySQL
Izvršiti naredbe za prikazivanje statusa mastera:
USE replicate_me;
SHOW MASTER STATUS;
obratimo pažnju na vrijednosti stupaca File i Position
UNLOCK TABLES;
12. MySQL
Na slave serveru u /etc/mysql/my.cnf dodati:
server-id = 2
master-host = 192.168.1.100
master-user = slave_korisnik
master-password = lozinka
master-connect-retry = 60
replicate-do-db = replicate_me
13. MySQL
Na slave serveru ući u MySQL i izvršiti:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST = '192.168.1.100'
MASTER_USER='slave_korisnik',
MASTER_PASSWORD='lozinka',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=106;
START SLAVE;
14. PostgreSQL
Kao postgres korisnik inicijalizirati klaster i na masteru
i na slave serverima:
initdb /var/lib/pgsql/data
Omogućiti komunikaciju postgres korisnika
SSH ili drugi način
15. PostgreSQL
Na master u /var/lib/pgsql/data/postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_command =
'scp %p postgres@192.168.1.101:/var/lib/pgsql/archive/%f'
Pokrenemo klaster
pg_ctl -D /var/lib/pgsql/data start
16. PostgreSQL
Napravimo backup
psql -c "SELECT pg_start_backup('osnovni backup')"
template1
tar cvf pg_base_backup.tar /var/lib/pgsql/data
psql -c "SELECT pg_stop_backup()" template1
Dobivenu datoteku kopiramo na slave i raspakiramo
mv /var/lib/pgsql/pg_base_backup.tar /
tar xvf pg_base_backup.tar
Na slave-u izbrišemo /data/postmaster.pid
18. PostgreSQL
Na slave serveru /var/lib/pgsql/data/postgresql.conf
hot_standby = on
Dodati recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.100 port=5432
user=postgres'
može (trebao bi) imati i dodatne postavke
Pokrenuti servere
pg_ctl -D /var/lib/pgsql/data start
19. CouchDB
Pristupimo konzoli za administraciju Futon
<IP adresa računala>:5984/_utils
U Configuration namjestimo da sluša sve IP adrese
bind_address u 0.0.0.0
Kreiramo baze podataka
U Replicator namjestiti
<IP drugog računala>/baza_na_drugom_racunalu
uključimo Continuous
gumb Replicate
20. CouchDB
Kako bi napravili multimaster replikaciju, ponoviti
podešavanje pomoću alata Replicator na drugom
računalu
<IP drugog računala>/baza_na_prvom_racunalu
uključimo Continuous
gumb Replicate
21. Zaključak
Dojmovi
uobičajena MySQL vs PostgreSQL diskusija
realno: nećemo birati koji sustav koristimo samo temeljem
toga čija je replikacija bolja
za male projekte i kućnu upotrebu, CouchDB
hr.linkedin.com/in/vatroslavmileusnic