際際滷

際際滷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 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
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
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
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 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
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
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
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;
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 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;
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
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 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
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
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
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 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
  • 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 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