Replikacja wielu słowiańskich PostgreSQL

Z Pl Ikoula wiki
Przejdź do nawigacji Przejdź do wyszukiwania
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.

pl:Replikacja wielu słowiańskich PostgreSQL en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ro:Replicare PostgreSQL slave multi ru:Multi 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

Artykuł ten jest wynikiem translacji automatycznej wykonywane przez oprogramowanie. Możesz przeglądać źródła artykułu tutaj.

Wprowadzenie

Niniejsza strona prezentuje implementacji asynchronicznego PostgreSQL streaming replikacji z jednego głównego i dwóch niewolników. Nasze słowiańskie zostaną skonfigurowane jako gorący stan gotowości, to znaczy że będzie można uruchomić kwerendy (tylko do odczytu ) na tych.


Kontekście tego placementu :


Mamy 3 Serwerów Debiana 8 (Ostatnia aktualizacja ) :

Postgres 01 (10.1.1.75) : będzie naszym Panem

Postgres02 (10.1.1.90) : niewolnikami

Postgres03 (10.1.1.199) : będzie drugi niewolnikiem


Określone polecenia będzie wykonywać jako root, gdy są one poprzedzone "#" i jako użytkownik systemu Postgres , gdy są one poprzedzone "$".

Instalacji PostgreSQL i wstępnej konfiguracji trzech serwerów

Wszystkie polecenia w tej części muszą być wykonane na każdym z serwerów.

Jako pierwszy krok, zaleca się, aby mieć jeden plik /etc/hosts wypełniony dopasowania każdego serwera, takiego (poprzez dostosowanie przy użyciu adresów ip i nazw hostów własne serwery ) :

# 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


Dodać depozyt APT PostgreSQL :

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


Możemy importować klucz publiczny depozyt :

# 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


Aktualizuje pamięć podręczną APT, aby uwzględnić depozyt :

# apt-get update


Instalowanie pakietu postgresql (Zainstaluj Najnowsza stabilna wersja to 9.5 w tym czasie, gdzie te linie są zapisywane ) :

# apt-get install postgresql


Możemy zdefiniować hasło (jego wybór, ale bezpieczne ) i generuje pary kluczy ssh (bez hasła ) dla systemu użytkownika postgres :

# passwd postgres
# su - postgres
$ ssh-keygen


Możemy skopiować użytkownika postgres z i między każdego serwera publicznego ssh klucz :


Od pierwszego serwera (postgres01 w naszym przypadku ) w kierunku drugiego (postgres02 dla nas ) i troisiseme (postgres03) :

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


Od drugiego do pierwszego i trzeciego serwera :

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


Od trzeciej do pierwszego i drugiego serwera :

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

W konfiguracji Master

Czy tylko na wzorcu (postgres01 w naszym przypadku ) :


Tworzy on rola /użytkownik replikacja :

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

Uwaga : Określa limit połączeń z 2 ponieważ mamy 2 Słowiańskie


Edytowanie plik konfiguracji głównego postgresql /etc/postgresql/9.5/main/postgresql.conf Aby skonfigurować następujących dyrektyw :

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

Uwaga : Możemy włączyć archiwizację na nasz drugi serwer (Dostosowywanie adresu ip serwera ) dla jeszcze bardziej środki ostrożności. Możemy również zdefiniować parametry hot_standby, dobrze, że ignorowane na mistrza, gdzie powinien być obniżony do niewolniczej pracy w przyszłości.


Teraz Edycja pliku uwierzytelniania postgresql /etc/postgresql/9.5/main/pg_hba.conf Aby dodać uprawnienie nasz użytkownik replikacja do łączenia się z naszych słowiańskich lub następujący wiersz na końcu pliku :

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

Należy dostosować ten wiersz zgodnie z nazwą użytkownika replikacji i sieci (lub adresy ip odpowiednich ) z Twoim słowiańskie


Ponownym uruchomieniu usługa postgresql do uwzględnienia naszej konfiguracji (w głównym ) :

# systemctl restart postgresql


Gwarantuje to, że usługa jest uruchomiona prawidłowo :

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

Konfiguracja Słowian

Na pierwszym podrzędnym

Zaczynamy od zatrzymania usługa postgresql :

# systemctl stop postgresql


Edytowanie plik konfiguracji głównego postgresql /etc/postgresql/9.5/main/postgresql.conf Aby skonfigurować te same wytyczne jako kapitan, dostosowując tylko ip pierwszego niewolnika przez drugi slave w polecenia rsync, aby zarchiwizować albo :

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


Teraz Edycja pliku uwierzytelniania postgresql /etc/postgresql/9.5/main/pg_hba.conf Aby dodać uprawnienie nasz użytkownik replikacja połączyć się z innych serwerów (To będzie używany, gdy ten niewolnik oczekiwany awans mistrza ) :

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

Uwaga : W tej konfiguracji, które są podobne do naszego mistrza pozwoli łatwo promować ten niewolnik jako master, w razie potrzeby.


Dla operacji poniżej, zaloguj się jako system użytkownika postgres :

# su – postgres


Tworzymy katalog docelowy dla wal głównego Archiwum :

$ mkdir /var/lib/postgresql/wal_archive


Usuwa katalog danych postgresql :

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


To sprawia, że podstawowej kopii zapasowej (dostosować ip swojego mistrza i nazwę użytkownika replikacji ), hasło użytkownika replikacji, pojawi się monit :

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


Umożliwia skonfigurowanie replikacji, tworząc plik /var/lib/postgresql/9.5/main/recovery.conf z następującymi parametrami :

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'

Uwaga : Wyzwalacz jest plik tworzymy, gdy chcemy, aby jego niewolnica replikacja zatrzymuje się i rozpocznie przyjmowanie zapisów — Kiedy chcesz promować go jako master. Przed podwyższeniem niewolnikiem w przypadku awarii swojego mistrza, upewnij się, że wzorzec początkowy nie wzrośnie do uniknięcia korupcji.


Wracamy do głównego i uruchamia usługę :

# systemctl start postgresql


Gwarantuje to, że Usługa uruchomiona poprawnie :

# 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


Jeśli łączy się nasz mistrz, możemy już sprawdzić nasze replikacji między głównym i podrzędnym pierwszego jest funkcjonalne :

Łączy się nasz mistrz i łączy w systemie użytkownika postgres :

# su - postgres


Następnie połączenie do postgresql :

$ psql


Umożliwia wyświetlanie rozszerzonych i możemy sprawdzić nasze replikacji :

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

Nasze replikacji asynchronicznej transmisji strumieniowej z naszego pierwszego niewolnika jest dobrze zrobiony. Ten etap ma wzorzec replikacji /Klasyczne niewolnik (pojedynczy niewolnik asynchronicznego przesyłania strumieniowego )

Na drugim niewolnikiem

Możemy Redid to samo, co zostało zrobione w pierwszym niewolnik oczywiście dostosowując jego nazwy hosta w pliku recovery.conf i ip adres w poleceniu archiwizacji w plik konfiguracji głównego, jeśli chcesz włączyć archiwizację na ten drugi niewolnikiem.

Weryfikacja i testowanie naszej multi master replikacji słowiańskie

Łączy do mistrza i jest rejestrowany w użytkownika postgres :

# su – postgres

Następnie połączenie do postgresql :

$ psql


Umożliwia wyświetlanie rozszerzonych i możemy sprawdzić nasze replikacji :

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

Tak tam dobrze nasze 2 replikacja z naszych dwóch słowiańskich serwerów (postgres02 i postgres 03).


Nadal podłączony do postgresql na mistrza, to tworzy dane podstawowej (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


Sprawdza się, że bazy danych również jest replikowany na naszych 2 Słowiańskie :

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)

Bazy danych, który stworzyliśmy na nasz Mistrz jest jest tak dobrze automatycznie replikowane do naszych dwóch słowiańskich.


Aby usunąć, od mistrza :

postgres=# DROP DATABASE checkrep;



Nie możesz publikować komentarzy.