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 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