PGCluster 1.5

Guten Tag

mich würde mal interessieren, wer schon mal mit pgcluster eine replikation oder sogar cluster mit replikation und load balancer eingerichtet hat.

Auf der Website zu PGCluster ist die aktuellste version, für die es eine beschreibung gibt 1.3, allerdings gibts schon seit einiger zeit 1.5 . Und ich bin mir nicht sicher, ob ich eine 1.5 genauso wie 1.3 konfigurieren kann.

Und irgendwie geht aus der Konfiguration nicht richtig hervor, ob man z.B. auf einem rechner, der als replikationsrechner läuft auch zusätzlich nen postmaster starten muss usw. wär gut wenn sich jemand finden würde der sich da auskennt.

mfg
henrik

hi henrik,

schau dir mal das hier an: http://www.pg-forum.de/ftopic209.html

vielleicht ist das was für dich :wink:

cu tb.

Hi,

hmmm pgcluster hört sich auch fein an :slight_smile: . Habe eben ein bisschen darüber gelesen. Ich werde das mal die Tage ausprobieren. Wenn das wirklich auf Postgres-Ebene (nicht Filesystem), die Backup-DB online ist und synchron, ist es eine bessere Variante als DRBD, Slony und rsync. Jedenfalls wenn die Performance stimmt.

Ich melde mich nochmal wenn ich mehr Plan davon habe.

Viele Grüße,

pingufreak

Doll:

http://hiroshima.sraw.co.jp/people/mitani/jpug/pgcluster/en/current/last_night.html

^- der is down. Hoffentlich ist das pgcluster-Projekt nicht so buggy wie der Server da :wink: .

Gruß

pingufreak

in der readme_pgcluster sind die teilweise die Pfade zu den geänderten Dateien falsch… Und das bei einem rc? :frowning:

falsch

src/backend/libpq/relicate.c
src/backend/libpq/relicate_com.c

richtig

src/backend/libpq/replicate.c
src/backend/libpq/replicate_com.c

Hi,

habe pgcluster jetzt mal grob ausprobiert. Ich bin nicht gerade begeistert. Es sei denn ich habe irgendwas falsch konfiguriert :wink: .

Hier erstmal die Umgebung und Konfiguration:

Version: pgcluster-1.5.0rc7 (postgresql 8.1.3 ist dabei und gepatcht!)

Installation:

node1:~ # tar xzf pgcluster-1.5.0rc7.tar.gz
node1:~ # cd pgcluster-1.5.0rc7
node1:~/pgcluster-1.5.0rc7 # ./configure
node1:~/pgcluster-1.5.0rc7 # make
node1:~/pgcluster-1.5.0rc7 # make install
node1:~/pgcluster-1.5.0rc7 # cd ..
node1:~ # mkdir /var/lib/pgsql
node1:~ # groupadd -g 26 postgres
node1:~ # useradd -g 26 -u 26 -s /bin/bash -d /var/lib/pgsql postgres
node1:~ # for i in `ls /usr/local/pgsql/bin`; do ln -sf /usr/local/pgsql/bin/${i} /usr/bin/; done
node1:~ # sudo -u postgres initdb -D /var/lib/pgsql/data

node2:~ # tar xzf pgcluster-1.5.0rc7.tar.gz
node2:~ # cd pgcluster-1.5.0rc7
node2:~/pgcluster-1.5.0rc7 # ./configure
node2:~/pgcluster-1.5.0rc7 # make
node2:~/pgcluster-1.5.0rc7 # make install
node2:~/pgcluster-1.5.0rc7 # cd ..
node2:~ # mkdir /var/lib/pgsql
node2:~ # groupadd -g 26 postgres
node2:~ # useradd -g 26 -u 26 -s /bin/bash -d /var/lib/pgsql postgres
node2:~ # for i in `ls /usr/local/pgsql/bin`; do ln -sf /usr/local/pgsql/bin/${i} /usr/bin/; done
node2:~ # sudo -u postgres initdb -D /var/lib/pgsql/data

/var/lib/pgsql/data/postgresql.conf # auf beiden nodes

...
listen_addresses = '*'
port = 5432
...

/var/lib/pgsql/data/pg_hba.conf # auf beiden nodes

...
host all all 192.168.134.0/24 trust
...

postgres starten

node1:~ # pg_ctl -D /var/lib/pgsql/data start
node2:~ # pg_ctl -D /var/lib/pgsql/data start

so jetzt die pgcluster umgebung

                        |
             ((Load Balance Server))
             ( hostname: 192.168.134.10)
             ( receive port:5433   )
             ( recovery port:6001  )
                        |
----------+-------------+--------------------+----------
          |                                  |
 ((  Cluster DB 1          ))   ((  Cluster DB 2         ))
 ( hostname: 192.168.134.10 )   ( hostname:192.168.134.11 )
 ( receive port: 5432       )   ( receive port:5432       )
 ( recovery port:7001       )   ( recovery port 7002      )
          |                                  |
----------+-------------+--------------------+----------
                        |
             (( Replication Server       ))
             (  hostname: 192.168.134.10  )
             (  receive port:8001         )
             (  recovery port:8101        )

/pgcluster/pglb.conf # nur node1

<Cluster_Server_Info>
    <Host_Name>   192.168.134.10           </Host_Name>
    <Port>        5432                     </Port>
    <Max_Connect> 32                       </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>   192.168.134.11           </Host_Name>
    <Port>        5432                     </Port>
    <Max_Connect> 32                       </Max_Connect>
</Cluster_Server_Info>

<Backend_Socket_Dir>    /tmp     </Backend_Socket_Dir>
<Receive_Port>          5433     </Receive_Port>
<Recovery_Port>         6001     </Recovery_Port>
<Max_Cluster_Num>        128     </Max_Cluster_Num>
<Use_Connection_Pooling>  no     </Use_Connection_Pooling>

/pgcluster/pgreplicate.conf # nur node1

<Cluster_Server_Info>
    <Host_Name>           192.168.134.10      </Host_Name>
    <Port>                5432                </Port>
    <Recovery_Port>       7001                </Recovery_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>           192.168.134.11       </Host_Name>
    <Port>                5432                 </Port>
    <Recovery_Port>       7001                 </Recovery_Port>
</Cluster_Server_Info>
<LoadBalance_Server_Info>
    <Host_Name>       192.168.134.10  </Host_Name>
    <Recovery_Port>   6001                      </Recovery_Port>
</LoadBalance_Server_Info>
<Replication_Port>    8001            </Replication_Port>
<Recovery_Port>       8101            </Recovery_Port>
<Response_Mode>       normal          </Response_Mode>
<Use_Replication_Log> no              </Use_Replication_Log>
<RLOG_Port>           8301            </RLOG_Port>

/var/lib/pgsql/data/cluster.conf # auf beiden nodes

<Replicate_Server_Info>
        <Host_Name> 192.168.134.10 </Host_Name>
        <Port> 8001 </Port>
        <Recovery_Port> 8101 </Recovery_Port>
</Replicate_Server_Info>
<Recovery_Port> 7001 </Recovery_Port>
<Rsync_Path> /usr/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -1 </Rsync_Option>
<Rsync_Compress> yes </Rsync_Compress>
<When_Stand_Alone> read_only  </When_Stand_Alone>

pglb starten

node1:~ # sudo -u postgres pglb -n -v -D /pgcluster

pgreplicate starten

node1:~ # sudo -u postgres pgreplicate -v -n -D /pgcluster

Jetzt lauscht auf dem Socket 192.168.134.10:5433 der pg-load-balancer.

Datenbank erstellen

node1:~ # createdb -U postgres -h 192.168.134.10 -p 5433 testdb

Tabelle erstellen

node1:~ # psql -U postgres -h 192.168.134.10 -p 5433 -d testdb -c 'create table testing (id serial primary key, name varchar(30));'

Zumüllen :wink: :

while true; do
 psql -U postgres -d testdb -h 192.168.134.10 -p 5433 -c "insert into testing (name) values('nlablablabla');"
 sleep 0.025
done

DBs vergleichen:

node1:~ # psql -U postgres -d testdb -h 192.168.134.10 -p 5432 -c 'select count(*) from testing;'
node1:~ # psql -U postgres -d testdb -h 192.168.134.11 -p 5432 -c 'select count(*) from testing;'

Bei mir hat das bis jetzt Prima funktioniert! Beide DBs synchron, load balancing funzt etc. Aber keine Garantie für Fehler, bin erst seit 2 Stunden mit pgcluster dran! Also bitte nit lachen nach dem Motto: “Öööh was is das für ein Noob!”. :slight_smile:

Ich habe nur ein kleines Problem! Wenn ich jetzt nur eine Abfrage auf den balancer jage, funktioniert alles einwandfrei. Mache ich jedoch parallel Abfragen, zuckt die Datenbank (bzw. der replikator Prozess weiß nicht wohin er will!).

Also hier das funktioniert!

node1:~ # psql -U postgres -h 192.168.134.10 -d testdb -p 5433 -c 'select count(*) from testing;' && sleep 1 && psql -U postgres -h 192.168.134.10 -d testdb -p 5433 -c "insert into testing (name) values ('testtest');"
 count 
_______
  1784
(1 row)

INSERT 0 1

AAAAAAAAABER das hier macht Probleme (ohne sleep)

node1:~ # psql -U postgres -h 192.168.134.10 -d testdb -p 5433 -c 'select count(*) from testing;' && sleep 1 && psql -U postgres -h 192.168.134.10 -d testdb -p 5433 -c "insert into testing (name) values ('testtest');"
 count 
_______
  1784
(1 row)

ERROR: This query is not permitted when all replication servers fell down

Habe bestimmt was falsch konfiguriert. Melde mich, wenn ich näheres weiß und mehr getestet habe!

Viele Grüße,

pingufreak

hi,

mit welchen gcc arbeitest du? henrik hatte ja mal probs mit gcc4 (gibt es noch nen andere thrad dazu) aber in den change_logs gibt es ja einige änderungen zu gcc4…

cu tb.

Hi Xandrian,

henriks Problem hat nichts mit meinem zutun. Ich konnte pgcluster ohne Fehler kompilieren…

Viele Grüße,

pingufreak

Hi pingufreak83,

wie ist denn der Stand bei Deinem pgcluster-Projekt? Hast Dus ordentlich zum laufen bekommen? Wenn ja, wie? :wink:

Gruß, matthias

Hi,

ich hänge mich einfach mal an diesen Thread an, weil er wohl am besten passt :wink:

Ich betreibe PGcluster auf zwei Maschinen. Jede Maschine beherbergt eine DB und einen Replikator. Ich spare mir an dieser Stelle meine Configs zu posten, da ich sicher bin dort alle nur erdenklichen Möglichkeiten probiert zu haben (auch die in diesem Thread).

Der Cluster läuft soweit einwandfrei, das einzige was nicht funktioniert, ist der Failover, der mir natürlich sehr wichtig ist.

Es scheint als würde der Replikator einfach nicht merken dass eine DB fehlt und dann immer weiter versuchen auf diesen zu replizieren. Dadurch hängt sich die Seite dann ab dem nächsten Schreibzugriff auf.

Ich bin ziemlich Ratlos und hoffe dass hier Jemand Rat weiß :wink:

Danke
Wanja