Replicare PostgreSQL slave multi

De la Ro Ikoula wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ru:Multi PostgreSQL славянских репликации pl:Replikacja wielu słowiańskich PostgreSQL ja:レプリケーション PostgreSQL スラブ マルチ ar:النسخ المتماثل السلافية كيو متعدد zh:复制 PostgreSQL 斯拉夫语多 de:Replikation PostgreSQL slawischen multi nl:Replicatie PostgreSQL Slavische multi it:Replica PostgreSQL slavo multi pt:Replicação PostgreSQL eslavo multi es:Replicación multi de PostgreSQL Slavic fr:Replication PostgreSQL multi slaves

Acest articol este rezultatul unei traduceri automate efectuate de către software-ul. Puteți vizualiza sursa articol aici.

Introducerea

Aceasta pagina se ocupa cu punerea în aplicare a unei PostgreSQL asincrone cu un maestru şi două sclavi replicarea de tip streaming. Noastre slave va fi configurat ca hot standby, care este să spun că va fi posibil pentru a rula interogări (doar în citire ) pe acestea.


Contextul acestui plasament :


Avem 3 Serverele Debian 8 (ultima actualizare ) :

Postgres 01 (10.1.1.75) : va fi stăpânul nostru

Postgres02 (10.1.1.90) : va fi un sclav

Postgres03 (10.1.1.199) : va fi un sclav al doilea


Specificat comenzi va fi de a efectua ca root atunci când acestea sunt precedate de "#" şi ca utilizator de sistem Postgres atunci când acestea sunt precedate de "$".

Instalarea de PostgreSQL şi pre-configurare de trei servere

Toate comenzile în această parte sunt de făcut pe unul din serverele.

Într-o primă etapă, este recomandabil să aibă un fişier /etc/hosts populat cu meciurile din fiecare server, ca aceasta (prin adaptarea cu nume de host şi ip adrese de propriile servere ) :

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       Postgres 01
10.1.1.90       Postgres 02
10.1.1.199      Postgres 03


Adauga depozit APT PostgreSQL :

# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list


Importam cheia publică a acestui depozit :

# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key ACCC4CF8 from hkp server pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ACCC4CF8: public key "PostgreSQL Debian Repository" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK


Actualizează cache APT să ia în considerare depunerea :

# apt-get update


Instalarea pachetului postgresql (instalaţi cea mai recentă versiune stabilă este 9.5 în momentul în care sunt scrise aceste rânduri ) :

# apt-get install postgresql


Vom defini o parolă (ales de el dar sigure ) şi generează o ssh-cheie pereche (fără parolă ) pentru utilizator sistem postgres :

# passwd postgres
# su - postgres
$ ssh-keygen


Am copie postgres utilizator din şi între fiecare server public ssh cheie :


Deoarece primul server (postgres01 în cazul nostru ) spre a doua (postgres02 pentru noi ) şi troisiseme (postgres03) :

root@postgres01:~# su - postgres
postgres@postgres01:~$ ssh-copy-id postgres02
postgres@postgres01:~$ ssh-copy-id postgres03


La a doua la prima și a treia server :

root@postgres02:~# su - postgres
postgres@postgres02:~$ ssh-copy-id postgres01
postgres@postgres02:~$ ssh-copy-id postgres03


La a treia la primul şi al doilea server :

root@postgres03:~# su - postgres
postgres@postgres03:~$ ssh-copy-id postgres01
postgres@postgres03:~$ ssh-copy-id postgres02

Configurare Master

Face numai pe maestrul (postgres01 în cazul nostru ) :


Creeaza rolul /replicare utilizator :

# su - postgres
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"

Notă : Ea defineşte o unire limită de 2 pentru că avem 2 Slave


Editarea fişierului de configurare principal postgresql /etc/postgresql/9.5/main/postgresql.conf pentru a configura următoarele directive :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on

Notă : Putem activa Arhivarea nostru al doilea server (Personalizaţi adresa de ip server ) pentru şi mai multe măsuri de precauţie. Putem defini, de asemenea, parametrii hot_standby, bine că a ignorat pe un maestru, în cazul în care acesta ar trebui să fie retrogradat la slave în viitor.


Acum editare fişier de autentificare postgresql /etc/postgresql/9.5/main/pg_hba.conf pentru a adăuga permisiunea utilizatorul nostru de replicare pentru a vă conecta la noastre slave sau următoarea linie la sfârşitul fişierului :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Vă rugăm să se adapteze această linie în funcţie de numele de utilizator replicare şi reţea (sau adresele ip respectiv ) a ta slavă


Repornirea serviciu de postgresql pentru a ține seama de configurare noastre (în rădăcină ) :

# systemctl restart postgresql


Acest lucru asigură că serviciul este pornit în mod corespunzător :

root@postgres01:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:06:28 CEST; 22s ago
  Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 77056 (code=exited, status=0/SUCCESS)


root@postgres01:~# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres  77038  0.0  4.4 227300 21836 ?        S    12:06   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres  77040  0.0  0.8 227300  4160 ?        Ss   12:06   0:00 postgres: checkpointer process
postgres  77041  0.0  1.0 227300  4968 ?        Ss   12:06   0:00 postgres: writer process
postgres  77042  0.0  1.7 227300  8776 ?        Ss   12:06   0:00 postgres: wal writer process
postgres  77043  0.0  1.3 227728  6708 ?        Ss   12:06   0:00 postgres: autovacuum launcher process
postgres  77044  0.0  0.6  82244  3392 ?        Ss   12:06   0:00 postgres: archiver process
postgres  77045  0.0  0.8  82244  4244 ?        Ss   12:06   0:00 postgres: stats collector process

Configurare de slavi

Pe prima sclav

Incepem prin stop postgresql service :

# systemctl stop postgresql


Editarea fişierului de configurare principal postgresql /etc/postgresql/9.5/main/postgresql.conf pentru a configura liniile directoare acelaşi ca master, de croitorie doar ip de sclav prima de sclav a doua în comanda rsync să fie Arhiva :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on


Acum editare fişier de autentificare postgresql /etc/postgresql/9.5/main/pg_hba.conf pentru a adăuga permisiunea utilizatorul nostru de replicare să se conecteze la serverele noastre alte (Acesta va fi utilizat atunci când acest sclav aşteptat promovat maestru ) :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Notă : Cu această configuraţie similară cu Învăţătorul nostru acest lucru va permite să promoveze cu uşurinţă acest sclav ca maestru în caz de nevoie.


Pentru operaţiunile de mai jos, face log in ca utilizator de postgres sistem :

# su – postgres


Putem crea directorul de destinaţie pentru wal arhivele maestru :

$ mkdir /var/lib/postgresql/wal_archive


Se elimină în directorul de date postgresql :

$ rm -rf /var/lib/postgresql/9.5/main


It a face copie de rezervă bază (personaliza ip Stăpânul tău şi numele de utilizator replicare ), parola de utilizator replicare vi se va cere :

$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog


Se configurează replicare prin crearea fişierului /var/lib/postgresql/9.5/main/recovery.conf cu următorii parametri :

standby_mode = on
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'

Notă : Fişierul de declanşare este fişierul vom crea atunci cand dorim sa sclavi opreşte replicare şi va începe acceptarea intrări — când vrei să-l promoveze ca maestru. Înainte de a promova un sclav în caz de accident de Stăpânul ei, asiguraţi-vă că Maestrul iniţială nu va creşte pentru a evita corupţia.


Vom reveni rădăcină şi de a începe serviciul :

# systemctl start postgresql


Acest lucru asigură că serviciul a început corect :

# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:53:42 CEST; 1min 6s ago
  Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 8894 (code=exited, status=0/SUCCESS)


# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres   8878  0.0  4.4 227308 21892 ?        S    12:53   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres   8879  0.0  1.1 227376  5700 ?        Ss   12:53   0:00 postgres: startup process   recovering 00000001000000000000000
postgres   8880  0.0  0.8 227308  4140 ?        Ss   12:53   0:00 postgres: checkpointer process
postgres   8881  0.0  1.0 227308  5236 ?        Ss   12:53   0:00 postgres: writer process
postgres   8882  0.0  0.6  82252  3316 ?        Ss   12:53   0:00 postgres: stats collector process
postgres   8883  0.0  1.7 238064  8520 ?        Ss   12:53   0:00 postgres: wal receiver process   streaming 0/30003E0


În cazul în care se conecteaza la Învăţătorului nostru, deja putem verifica noastre de replicare între master şi slave prima este funcţională :

Se conecteaza la stăpân al nostru şi se leagă în sistem postgres utilizator :

# su - postgres


Apoi conectarea la postgresql :

$ psql


Acesta permite afişarea extinsă şi vom verifica replicare noastre :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_CRElocation    | 0/30004C0
write_location   | 0/30004C0
flush_location   | 0/30004C0
replay_location  | 0/30004C0
sync_priority    | 0
sync_state       | async

Noastre replicarea streaming asincron cu nostru primul sclav este bine facut. Această etapă are un maestru replicare /Clasic sclav (un singur sclav asincron de streaming )

Pe al doilea sclav

Am Redid acelaşi ceea ce a fost făcut pe slave prima adaptare evident sa hostname în fişierul recovery.conf şi ip adresa din comanda de arhivare în fişierul de configurare principal în cazul în care doriţi să activaţi Arhivarea pe acest sclav al doilea.

Verificarea și testarea noastre multi maestru de replicare slave

Se conecteaza la master şi acesta este conectat în utilizator postgres :

# su – postgres

Apoi conectarea la postgresql :

$ psql


Acesta permite afişarea extinsă şi vom verifica replicare noastre :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async
-[ RECORD 2 ]----+------------------------------
pid              | 82725
usesysid         | 16384
usename          | repuser
application_name | postgres03
client_addr      | 10.1.1.199
client_hostname  |
client_port      | 51754
backend_start    | 2016-06-02 14:31:43.759683+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async

Deci nu bine noştri 2 replicare cu serverele noastre două slave (postgres02 şi postgres 03).


Încă legate de postgresql pe maestru, acesta creează o date bază (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


Se verifică că baza de date este bine reproduse pe noastre 2 Slave :

root@postgres02:~# su - postgres
postgres@postgres02:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)


root@postgres03:~# su - postgres
postgres@postgres03:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

Baza de date ce ne-am creat pe stăpânul nostru este atât de bine automat replicat noastre două slave.


Pentru a şterge de la master :

postgres=# DROP DATABASE checkrep;



Nu sunteți autorizat să publicați comentarii.