際際滷

際際滷Share a Scribd company logo
Replikacija u bazama podataka


      Vatroslav Mileusni?, univ.bacc.inf.

      mileusnic.vatroslav@gmail.com


                                                 DORS/CLUC
                                            Zagreb, 24.5.2012.
?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)
   ...
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
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
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
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
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
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
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
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;
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;
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
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;
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
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
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
PostgreSQL
Master, /var/lib/pgsql/data/postgresql.conf
  listen_addresses = '*'
  max_wal_senders = 5
  wal_keep_segments = 32
Master, /var/lib/pgsql/data/pg_hba.conf
  host replication postgres 192.168.1.101/24 trust
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
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
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
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
Pitanja?

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
  • 17. PostgreSQL Master, /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' max_wal_senders = 5 wal_keep_segments = 32 Master, /var/lib/pgsql/data/pg_hba.conf host replication postgres 192.168.1.101/24 trust
  • 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