Postgresql 9.6 - Synchronus Commit funktioniert nicht
Hi,
folgendes Setup:
habe eine Streaming Replication eingerichtet:
postgresql.conf parameter:
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 das man immer den selbe 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:
Überprüfen mit diesem Skript ob der Count der beiden Tabelle übereinstimmt wenn ja dann true wenn nein dann false:
trigger_master_slave.sh
Hier die beiden anderen Skripts die ich aufrufe:
/tmp/check_master.sh
/tmp/check_slave.sh
Wenn ich nun das skript ausführe, bekomme ich leider sehr viele false zurück, da der count auf dem Master höher ist:
Kann mir hier jmd weiterhelfen?
folgendes Setup:
habe eine Streaming Replication 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 das man immer den selbe 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üfen 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
psql -h 192.168.2.3 -d test -U postgres -c "SELECT COUNT(ID) FROM test;" | head -n 3 | tail -n 1
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 328652
Url: https://administrator.de/contentid/328652
Ausgedruckt am: 24.11.2024 um 19:11 Uhr