Hi,
folgendes Setup:
habe eine Streaming Replication zwischen zwei Servern eingerichtet:
postgresql.conf parameter:
tcp_keepalives_idle = 60
tcp_keepalives_interval = 30
tcp_keepalives_count = 5
wal_level = hot_standby
archive_mode = on
archive_command = '/bin/true'
hot_standby = on
wal_keep_segments = 100
max_wal_senders = 2
synchronus_commit = remote_apply
synchronous_standby_names = '*'
Habe also ein Master- und einen Slave- Server und wollte nun ausprobieren, ob die beiden Datenbanken beim INSERT in eine Tabelle auf dem Master auch immer gleich bleiben. Habe von meinem Test erwartet, dass man immer den selben Count der Reocords beim Befüllen in einer Tabelle erhält, da ich es so verstanden hab, das erst commited wird, wenn der commit auf dem Slave server abgeschlossen ist:
Befülle die Tabelle auf dem Master:
while true; do nohup su - postgres -c 'while true;do psql -c "insert into test (test) VALUES (generate_series(1,1000));" -d test
Überprüfe mit diesem Skript, ob der Count der beiden Tabelle übereinstimmt wenn ja dann true wenn nein dann false:
trigger_master_slave.sh
MAST_VALUE=$(sh /tmp/check_master.sh & PIDMAST=$!)
SLAVE_VALUE=$(sh /tmp/check_slave.sh & PIDSLAV=$!)
wait $PIDMAST
wait $PIDSLAV
if [ $MAST_VALUE != $SLAVE_VALUE ]; then
echo "false"
else
echo "true"
fi
Hier die beiden anderen Skripts die ich aufrufe:
/tmp/check_master.sh
psql -h 192.168.2.2-d test -U postgres -c "SELECT COUNT(ID) FROM test;" | head -n 3 | tail -n 1
/tmp/check_slave.sh
psql -h 192.168.2.3 -d test -U postgres -c “SELECT COUNT(ID) FROM test;” | head -n 3 | tail -n 1[/code]
Wenn ich nun das skript ausführe, bekomme ich leider sehr viele false zurück, da der count auf dem Master höher ist:
while true; do ./trigger_master_slave.sh; sleep 0.03; done
Kann mir hier jmd weiterhelfen? Hätte sehr gerne dieses Szenario das erst commited wird wenn der Slave commited.
Oder aber ist mein Test nicht gut - funktioniert es? Und kann ich es irgendwo in einer “pg_table” z.B. nachvollziehen?
Grüße
Phoboz