PostgreSQL cluster/replikering

Kategori overført fra Linux1

PostgreSQL cluster/replikering

Innleggav Lemen » man 06.11.2006 14:16

Hei,

Jeg har en produksjons server som kjører en "ok stor" Postgres database.
Jeg skal nå sette opp en sukundær server, som kan ta over, dersom primær server skal få problemer, og da eventuelt gå ned. Så er ute etter en måte å få repklikert primær db til sekundær. Har sett litt på Slony - men kunne godt tenkt meg å høre om noen her kanskje har erfaringer med lingnede oppsett.?

Eventuelt tips til alternativ programmvare/løsninger som kan fungere bra.

Dette er kanskje ikke noe "mann i gata" kjører, men håper det er noen her inne som kan komme med noen tips :)
medlem i 234 måneder
 

Innleggav ak » man 06.11.2006 16:24

Har ikke så mye erfaring med Postgresql og la merke til at det skorter på offisiell kode for replikering.

Men verdt å tenke på: Hvis det er få applikasjoner som bruker denne databasen, og du har tilgang til kildekoden for database-abstraksjonen, kan det være en mulighet å legge dette rett inn i programmet.

dvs. at du bare ordner slik at alle querys blir utført på mer enn en server. I noen tilfeller kan dette gjøres med mindre enn 10 linjer, og gi automatisk fail-over i applikasjonen med det samme.

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav Lemen » man 06.11.2006 18:29

ak skrev:dvs. at du bare ordner slik at alle querys blir utført på mer enn en server. I noen tilfeller kan dette gjøres med mindre enn 10 linjer, og gi automatisk fail-over i applikasjonen med det samme.


Kan du forklare det litt nermere - skjønte ikke helt hva du mente :)
Er et webserver cluster hvor det ligger en del webapplikasjoner som bruker databasen.
medlem i 234 måneder
 

Innleggav ak » man 06.11.2006 19:17

Får komme med et konkret eksempel, det er et veldig enkelt konsept, men vanskelig å forklare på generelt grunnlag. Tar PHP som utgangspunkt, men det spiller egentlig ingen rolle.

For at man skal bli mindre avhengig av en spesifikk database bruker man gjerne et bibliotek som ADOdb i mellom. Det vil at man i koden ikke bruker "mysql_query()" funksjonen direkte, men en wrapper istedet. Eksempel på hvordan slikt egentlig skal brukes:

$DB = NewADOConnection('mysql');
........
$ok = $DB->Execute("update atable set aval = 0");

Bestemmer du deg senere for å bruke Postgresql så er det bare å bruke
$DB = NewADOConnection('postgresql');
istedet, alle stedene du brukte Execute forblir uendret.

Hvis du graver deg litt ned i koden så vil du finne ut at DB->Execute på et eller annet tidspunkt må bruke mysql_query, eller tilsvarende for postgresql dersom det er det du har valgt.

Siden dette er på et sted i koden, er det veldig lett å bytte ut
...
mysql_query(bla bla bla)
...

med
...
mysql_query(bla bla bla)
include("repli_connect.inc")
mysql_query(bla bla bla, $repli_dbc)
....

Hvor replic_connect.inc inneholder den noedvendige koden for å skape en forbindelse til den andre database-serveren.

Det som da skjer er at alle queryene blir eksekvert på begge databaseserverne. Med litt mer kode kan du også få den til å ikke gå på tryne hvis server 1 ikke svarer, men istedet hente informasjon fra server 2.

Oppsumert:
1) "Alle" gode applikasjoner bruker slik database-abstraksjon
2) En bieffekt er at selve koden som sender beskjeden til databasen er konsentrert på et sted, så man kan lett duplisere koden til å sende de til to steder og dermed få replikering.
3) Det hele er litt håpløst hvis du har mange applikasjoner som bruker forskjellig kode.

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav Lemen » man 06.11.2006 19:33

Takker for godt svar, men det er ikke jeg som utvikler applikasjonen, jeg drifter bare serverne. Ligger også en del kompilert c++ applikasjoner som kobler seg opp mot databasen, så ideen din over vil i mitt tilfelle ikke fungere noe bra :)

Så det jeg trenger er en måte å få replikert primær db, til sekundær db, enkelt og greit :) Slik at jeg bare kan la sekundær maskin ta over ip fra primær, dersom den får problemer.
medlem i 234 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Ingen registrerte brukere