Πώς να ρυθμίσετε τις παραμέτρους PostgreSQL 12 Streaming Replication στο CentOS 8


Η βάση δεδομένων PostgreSQL υποστηρίζει διάφορες λύσεις αναπαραγωγής για τη δημιουργία εφαρμογών υψηλής διαθεσιμότητας, κλιμάκωσης και ανοχής σε σφάλματα, μία από τις οποίες είναι το Ημερολόγιο εγγραφής πριν από την εγγραφή (WAL ) Αποστολή. Αυτή η λύση επιτρέπει την υλοποίηση ενός διακομιστή αναμονής χρησιμοποιώντας αποστολή αρχείων καταγραφής ή αναπαραγωγή ροής ή, όπου είναι δυνατόν, συνδυασμό και των δύο προσεγγίσεων.

Με την αναπαραγωγή ροής, ένας διακομιστής βάσης δεδομένων αναμονής (υποτελής αναπαραγωγή) έχει διαμορφωθεί ώστε να συνδέεται με τον κύριο/κύριο διακομιστή, ο οποίος μεταδίδει τις εγγραφές WAL στην κατάσταση αναμονής καθώς δημιουργούνται, χωρίς να περιμένει το WAL αρχείο που πρέπει να συμπληρωθεί.

Από προεπιλογή, η αναπαραγωγή ροής είναι ασύγχρονη όταν τα δεδομένα εγγράφονται στους διακομιστές αναμονής μετά τη δέσμευση μιας συναλλαγής στον κύριο διακομιστή. Αυτό σημαίνει ότι υπάρχει μια μικρή καθυστέρηση μεταξύ της πραγματοποίησης μιας συναλλαγής στον κύριο διακομιστή και των αλλαγών που γίνονται ορατές στον διακομιστή αναμονής. Ένα μειονέκτημα αυτής της προσέγγισης είναι ότι σε περίπτωση σφάλματος του κύριου διακομιστή, τυχόν μη δεσμευμένες συναλλαγές ενδέχεται να μην επαναληφθούν και αυτό μπορεί να προκαλέσει απώλεια δεδομένων.

Αυτός ο οδηγός δείχνει πώς να ρυθμίσετε μια αναπαραγωγή ροής κύριας αναμονής Postgresql 12 στο CentOS 8. Θα χρησιμοποιήσουμε τις "υποδοχές αναπαραγωγής " για την κατάσταση αναμονής ως λύση για να αποφύγουμε τον κύριο διακομιστή από την ανακύκλωση παλαιών τμημάτων WAL προτού τα λάβει η κατάσταση αναμονής.

Σημειώστε ότι σε σύγκριση με άλλες μεθόδους, οι υποδοχές αναπαραγωγής διατηρούν μόνο τον αριθμό των τμημάτων που είναι γνωστό ότι χρειάζονται.

Περιβάλλον δοκιμής:

Αυτός ο οδηγός υποθέτει ότι έχετε συνδεθεί στους κύριους και σε αναμονή διακομιστές βάσης δεδομένων σας ως ρίζα μέσω SSH (χρησιμοποιήστε την εντολή Sudo όπου χρειάζεται, εάν είστε συνδεδεμένος ως κανονικός χρήστης με δικαιώματα διαχειριστή):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Και οι δύο διακομιστές βάσης δεδομένων πρέπει να έχουν εγκατεστημένο το Postgresql 12, διαφορετικά, δείτε: Πώς να εγκαταστήσετε το PostgreSQL και το pgAdmin στο CentOS 8.

Σημείωση: Το PostgreSQL 12 συνοδεύεται από σημαντικές αλλαγές στην υλοποίηση και τη διαμόρφωση αναπαραγωγής, όπως αντικατάσταση του recovery.conf και τη μετατροπή των παραμέτρων recovery.conf σε κανονικές παραμέτρους διαμόρφωσης PostgreSQL, καθιστώντας πολύ πιο εύκολη τη διαμόρφωση της αναπαραγωγής συμπλέγματος.

Βήμα 1: Διαμόρφωση του Master/Primary διακομιστή βάσης δεδομένων PostgreSQL

1. Στον κύριο διακομιστή, μεταβείτε στον λογαριασμό συστήματος postgres και διαμορφώστε τις διευθύνσεις IP στις οποίες θα ακούσει ο κύριος διακομιστής για συνδέσεις από πελάτες.

Σε αυτήν την περίπτωση, θα χρησιμοποιήσουμε το * που σημαίνει όλα.

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

Η εντολή ALTER SYSTEM SET SQL είναι μια ισχυρή δυνατότητα αλλαγής των παραμέτρων διαμόρφωσης ενός διακομιστή, απευθείας με ένα ερώτημα SQL. Οι διαμορφώσεις αποθηκεύονται στο αρχείο postgresql.conf.auto που βρίσκεται στη ρίζα του φακέλου δεδομένων (π.χ. /var/lib/pgsql/12/data/) και διαβάζεται η προσθήκη σε αυτά που είναι αποθηκευμένα στο postgresql.conf. Αλλά οι διαμορφώσεις στο πρώτο έχουν προτεραιότητα έναντι εκείνων στο μεταγενέστερο και άλλα σχετικά αρχεία.

2. Στη συνέχεια, δημιουργήστε έναν ρόλο αναπαραγωγής που θα χρησιμοποιηθεί για συνδέσεις από τον διακομιστή αναμονής στον κύριο διακομιστή, χρησιμοποιώντας το πρόγραμμα createuser. Στην ακόλουθη εντολή, η σημαία -P ζητά έναν κωδικό πρόσβασης για το νέο ρόλο και το -e επαναλαμβάνει τις εντολές που δημιουργεί ο createuser και στέλνει στον διακομιστή της βάσης δεδομένων.

su – postgres
createuser --replication -P -e replicator
exit

3. Στη συνέχεια, εισαγάγετε την ακόλουθη καταχώριση στο τέλος του αρχείου ρύθμισης παραμέτρων ελέγχου ταυτότητας πελάτη /var/lib/pgsql/12/data/pg_hba.conf με το πεδίο της βάσης δεδομένων να έχει οριστεί σε αναπαραγωγή όπως φαίνεται στο στιγμιότυπο οθόνης.

host    replication     replicator      10.20.20.8/24     md5

4. Τώρα επανεκκινήστε την υπηρεσία Postgres12 χρησιμοποιώντας την ακόλουθη εντολή systemctl για να εφαρμόσετε τις αλλαγές.

systemctl restart postgresql-12.service

5. Στη συνέχεια, εάν εκτελείται η υπηρεσία firewalld, πρέπει να προσθέσετε την υπηρεσία Postgresql στη διαμόρφωση του τείχους προστασίας για να επιτρέπονται αιτήματα από τον διακομιστή αναμονής προς τον κύριο.

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

Βήμα 2: Δημιουργία βασικού αντιγράφου ασφαλείας για την εκκίνηση του διακομιστή αναμονής

6. Στη συνέχεια, πρέπει να δημιουργήσετε ένα βασικό αντίγραφο ασφαλείας του κύριου διακομιστή από τον διακομιστή αναμονής. Αυτό βοηθά στην εκκίνηση του διακομιστή αναμονής. Πρέπει να διακόψετε την υπηρεσία postgresql 12 στον διακομιστή αναμονής, να μεταβείτε στον λογαριασμό χρήστη postgres, να δημιουργήσετε αντίγραφα ασφαλείας του καταλόγου δεδομένων (/var/lib/pgsql/12/data/) και, στη συνέχεια, να διαγράψετε όλα όσα βρίσκονται κάτω από αυτόν όπως φαίνεται, πριν λάβετε το αντίγραφο ασφαλείας της βάσης.

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. Στη συνέχεια, χρησιμοποιήστε το εργαλείο pg_basebackup για να λάβετε το βασικό αντίγραφο ασφαλείας με τη σωστή ιδιοκτησία (ο χρήστης του συστήματος βάσης δεδομένων, π.χ. Postgres, εντός του Postgresλογαριασμός χρήστη) και με τα σωστά δικαιώματα.

Στην παρακάτω εντολή, η επιλογή:

  • -h – καθορίζει τον κεντρικό υπολογιστή που είναι ο κύριος διακομιστής.
  • -D – καθορίζει τον κατάλογο δεδομένων.
  • -U – καθορίζει τον χρήστη της σύνδεσης.
  • -P – ενεργοποιεί την αναφορά προόδου.
  • -v – ενεργοποιεί τη λεπτομερή λειτουργία.
  • -R – επιτρέπει τη δημιουργία διαμόρφωσης ανάκτησης: Δημιουργεί ένα αρχείο standby.signal και προσθέτει ρυθμίσεις σύνδεσης στο postgresql.auto.conf κάτω από τα δεδομένα Ευρετήριο.
  • -X – χρησιμοποιείται για τη συμπερίληψη των απαιτούμενων αρχείων καταγραφής εγγραφής (αρχεία WAL) στο αντίγραφο ασφαλείας. Η τιμή της ροής σημαίνει τη ροή του WAL ενώ δημιουργείται το αντίγραφο ασφαλείας.
  • -C – επιτρέπει τη δημιουργία μιας υποδοχής αναπαραγωγής που ονομάζεται από την επιλογή -S πριν από την έναρξη του αντιγράφου ασφαλείας.
  • -S – καθορίζει το όνομα της υποδοχής αναπαραγωγής.
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. Όταν ολοκληρωθεί η διαδικασία δημιουργίας αντιγράφων ασφαλείας, ο νέος κατάλογος δεδομένων στον διακομιστή αναμονής θα πρέπει να μοιάζει με αυτό στο στιγμιότυπο οθόνης. Δημιουργείται ένα σήμα αναμονής και οι ρυθμίσεις σύνδεσης προστίθενται στο postgresql.auto.conf. Μπορείτε να παραθέσετε τα περιεχόμενά του χρησιμοποιώντας την εντολή ls.

ls -l /var/lib/pgsql/12/data/

Μια υποτελής αναπαραγωγή θα εκτελεστεί σε κατάσταση «Hot Standby», εάν η παράμετρος hot_standby έχει οριστεί σε (η προεπιλεγμένη τιμή) στο postgresql.conf και υπάρχει ένα αρχείο standby.signal στον κατάλογο δεδομένων.

9. Τώρα πάλι στον κύριο διακομιστή, θα πρέπει να μπορείτε να δείτε την υποδοχή αναπαραγωγής που ονομάζεται pgstandby1 όταν ανοίγετε την προβολή pg_replication_slots ως εξής.

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10. Για να προβάλετε τις ρυθμίσεις σύνδεσης που έχουν προστεθεί στο αρχείο postgresql.auto.conf, χρησιμοποιήστε την εντολή cat.

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Τώρα ξεκινήστε τις κανονικές λειτουργίες της βάσης δεδομένων στον διακομιστή αναμονής ξεκινώντας την υπηρεσία PostgreSQL ως εξής.

systemctl start postgresql-12

Βήμα 3: Δοκιμή PostgreSQL Streaming Replication

12. Μόλις δημιουργηθεί επιτυχώς μια σύνδεση μεταξύ της κύριας μονάδας και της αναμονής, θα δείτε μια διαδικασία δέκτη WAL στον διακομιστή αναμονής με κατάσταση ροής, μπορείτε να το ελέγξετε χρησιμοποιώντας την προβολή pg_stat_wal_receiver.

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

και μια αντίστοιχη διαδικασία αποστολέα WAL στον κύριο/κύριο διακομιστή με κατάσταση ροής και κατάσταση_συγχρονισμού ασυγχρονισμού, μπορείτε να ελέγξετε αυτήν την προβολή pg_stat_replication pg_stat_replication.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Από το παραπάνω στιγμιότυπο οθόνης, η αναπαραγωγή ροής είναι ασύγχρονη. Στην επόμενη ενότητα, θα δείξουμε πώς να ενεργοποιήσετε προαιρετικά τη σύγχρονη αναπαραγωγή.

13. Τώρα ελέγξτε εάν η αναπαραγωγή λειτουργεί καλά δημιουργώντας μια δοκιμαστική βάση δεδομένων στον κύριο διακομιστή και ελέγξτε εάν υπάρχει στον διακομιστή αναμονής.
[master]postgres=# CREATE DATABASE tecmint;
[αναμονή]postgres=# \l

Προαιρετικά: Ενεργοποίηση σύγχρονης αναπαραγωγής

14. Η σύγχρονη αναπαραγωγή προσφέρει τη δυνατότητα δέσμευσης μιας συναλλαγής (ή εγγραφής δεδομένων) στην κύρια βάση δεδομένων και στην αναμονή/αντίγραφο ταυτόχρονα. Επιβεβαιώνει μόνο ότι μια συναλλαγή είναι επιτυχής όταν όλες οι αλλαγές που έγιναν από τη συναλλαγή έχουν μεταφερθεί σε έναν ή περισσότερους σύγχρονους διακομιστές αναμονής.

Για να ενεργοποιήσετε τη σύγχρονη αναπαραγωγή, η synchronous_commit πρέπει επίσης να οριστεί σε on (η οποία είναι η προεπιλεγμένη τιμή, επομένως δεν χρειάζεται καμία αλλαγή) και πρέπει επίσης να ορίσετε την παράμετρο synchronous_standby_names σε μια μη κενή τιμή. Για αυτόν τον οδηγό, θα τον ορίσουμε σε όλους.

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Στη συνέχεια, φορτώστε ξανά την υπηρεσία PostgreSQL 12 για να εφαρμόσετε τις νέες αλλαγές.

systemctl reload postgresql-12.service

16. Τώρα, όταν υποβάλλετε ξανά ερώτημα στη διαδικασία αποστολέα WAL στον κύριο διακομιστή, θα πρέπει να εμφανίζει μια κατάσταση ροής και μια κατάσταση_συγχρονισμού του συγχρονισμός.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Φτάσαμε στο τέλος αυτού του οδηγού. Δείξαμε πώς μπορείτε να ρυθμίσετε την αναπαραγωγή ροής βάσης δεδομένων σε κύρια κατάσταση αναμονής του PostgreSQL 12 στο CentOS 8. Καλύψαμε επίσης τον τρόπο ενεργοποίησης της σύγχρονης αναπαραγωγής σε ένα σύμπλεγμα βάσης δεδομένων PostgreSQL.

Υπάρχουν πολλές χρήσεις της αναπαραγωγής και μπορείτε πάντα να επιλέξετε μια λύση που να ανταποκρίνεται στο περιβάλλον πληροφορικής σας ή/και στις συγκεκριμένες απαιτήσεις της εφαρμογής. Για περισσότερες λεπτομέρειες, μεταβείτε στους Διακομιστές καταγραφής αναμονής αποστολής στην τεκμηρίωση PostgreSQL 12.