Kratak uvod u replikaciju baza podataka, teorija i praksa (MySQL, PostgreSQL, CouchDB)
1 of 22
More Related Content
Replikacija u bazama podataka
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 vei 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
mogunost sukoba podataka
mogunost izgubljenih
transakcija
4. Master-slave Multimaster
1 glavna, ostale kopije vi邸egospodarska
zapisuje se na master replikacija
propagira se ostalima mogue zapisivati na bilo
koji server, pa se
itanje se dijeli izmeu propagira svim ostalima
svih servera
itanje se dijeli izmeu
konfiguriranje slave svih servera
servera da preuzme
ulogu master-a ako sna転na i fleksibilna
pravi master ispadne mogunost, ali i vrlo
kompleksna
5. Problemi kod multimaster replikacije
mogunost sukoba u asinkronoj replikaciji
sukob a転uriranja
sukob jedinstvenosti
sukob brisanja
mogua rje邸enja:
konfiguriranje aplikacije da pi邸e u samo jednu bazu
omoguiti 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 periodino 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 uenje i shvaanje
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
Ui 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 ui 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
Omoguiti komunikaciju postgres korisnika
SSH ili drugi nain
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 raunala>: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 raunala>/baza_na_drugom_racunalu
ukljuimo Continuous
gumb Replicate
20. CouchDB
Kako bi napravili multimaster replikaciju, ponoviti
pode邸avanje pomou alata Replicator na drugom
raunalu
<IP drugog raunala>/baza_na_prvom_racunalu
ukljuimo Continuous
gumb Replicate
21. Zakljuak
Dojmovi
uobiajena MySQL vs PostgreSQL diskusija
realno: neemo birati koji sustav koristimo samo temeljem
toga ija je replikacija bolja
za male projekte i kunu upotrebu, CouchDB
hr.linkedin.com/in/vatroslavmileusnic