Multi PostgreSQL славянских репликации

Материал из Ru Ikoula wiki
Jump to navigation Jump to search

ru:Multi PostgreSQL славянских репликации en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ro:Replicare PostgreSQL slave multi 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

Эта статья является результатом автоматического перевода, выполняемого программного обеспечения. Вы можете посмотреть исходный статьи здесь.

Введение

Эта страница посвящена реализации асинхронных PostgreSQL потоковой репликации с одной мастер и две рабы. Наши славянские будет настроен как горячий резерв, то есть что это будет возможно для запуска запросов (только чтение ) на них.


Контекст данного размещения :


У нас есть 3 Серверов Debian 8 (Последнее обновление ) :

Postgres 01 (10.1.1.75) : будет нашим господином

Postgres02 (10.1.1.90) : будет рабом

Postgres03 (10.1.1.199) : будет рабом второй


Указанные команды будет выполнять как корень, когда они предваряются "#" и как пользователя Postgres системы когда они предваряются "$".

Установка PostgreSQL и предварительной конфигурации трех серверов

Все команды в этой части, чтобы сделать на каждом из серверов.

В качестве первого шага, рекомендуется иметь один файл /etc/hosts заполняется с матчей каждого сервера, как это (путем адаптации с хостов и IP-адреса ваших собственных серверов ) :

# 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


Добавьте депозит APT PostgreSQL :

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


Мы импортировать открытый ключ этого месторождения :

# 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


Он обновляет кэш APT с учетом вклада :

# apt-get update


Установка пакет postgresql (Последняя стабильная версия установки 9.5 в то время, когда эти строки пишутся ) :

# apt-get install postgresql


Мы определяем пароль (по своему выбору, но безопасный ) и генерирует пары ключей ssh (без пароля ) для системы пользователя postgres :

# passwd postgres
# su - postgres
$ ssh-keygen


Мы копируем пользователя postgres с и между каждым сервером общественного ssh ключ :


С момента первого сервера (postgres01 в нашем случае ) к второй (postgres02 для нас ) и troisiseme (postgres03) :

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


Со второго на первый и третий сервер :

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


С третьего на первой и второй сервер :

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

Мастер настройки

Делать только на образце (postgres01 в нашем случае ) :


Это создает роли /пользователя репликации :

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

Примечание : Он определяет предел соединения 2 потому что у нас есть 2 Славянские


Редактирование файла конфигурации основной postgresql /etc/postgresql/9.5/main/postgresql.conf Чтобы настроить следующие директивы :

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

Примечание : Мы предоставляем возможность архивирования нашей второй сервер (Настроить IP-адрес вашего сервера ) для еще более меры предосторожности. Мы также определить параметры hot_standby, хорошо, что игнорируется на хозяине, где он должен быть понижен до раба в будущем.


Теперь редактирование файла аутентификации postgresql /etc/postgresql/9.5/main/pg_hba.conf чтобы добавить разрешение нашего пользователя репликации для связи с нашей славянской или следующую строку в конце файла :

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

Пожалуйста адаптировать эту строку согласно имя пользователя сети и репликации (или соответствующих IP-адресов ) ваши славянских


Это перезапускает службу postgresql принимать во внимание нашу конфигурацию (в корне ) :

# systemctl restart postgresql


Это гарантирует, что служба запускается должным образом :

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

Настройка славян

На первом подчиненном

Мы начинаем с остановить службу postgresql :

# systemctl stop postgresql


Редактирование файла конфигурации основной postgresql /etc/postgresql/9.5/main/postgresql.conf Чтобы настроить же руководящие принципы как мастер, на пошив в команды rsync в архив, либо только на IP-адрес первого раба на втором подчиненном :

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


Теперь редактирование файла аутентификации postgresql /etc/postgresql/9.5/main/pg_hba.conf чтобы добавить разрешение нашего пользователя репликации для подключения от других серверов нашей (Это будет использоваться, когда этот раб ожидается способствовал мастер ) :

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

Примечание : С помощью этой конфигурации похож на наш мастер это позволит легко продвинуть этот раб как master в случае необходимости.


Для операций ниже, войдите в систему как пользователь системы postgres :

# su – postgres


Мы создаем каталог назначения для wal мастер архивов :

$ mkdir /var/lib/postgresql/wal_archive


Она удаляет каталог данных postgresql :

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


Это делает базовой резервной копии (настроить ip вашего мастера и имя вашего пользователя репликации ), пароль пользователя репликации, вам будет предложено :

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


Она настраивает репликацию, создав файл /var/lib/postgresql/9.5/main/recovery.conf со следующими параметрами :

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'

Примечание : Триггера файл является файлом, мы создаем, когда мы хотим, чтобы его раба остановки репликации и начнет прием заявок — когда вы хотите продвигать его как мастер. До содействия рабом в случае аварии своего хозяина, убедитесь, что первоначальный мастер не будет расти чтобы избежать коррупции.


Мы возвращаем корня и запускает службу :

# systemctl start postgresql


Это гарантирует, что служба запущена правильно :

# 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


Если он подключается к наш мастер, мы уже можем проверить наш репликации между мастером и первый раб функциональных :

Он подключается к нашим мастером и она соединяет в системе пользователя postgres :

# su - postgres


Затем подключение к postgresql :

$ psql


Это позволяет отображать на расширенной и мы проверяем наши репликации :

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

Наши асинхронной потоковой репликации с нашего первого раба хорошо сделал. Этот этап имеет мастер репликации /Классический раба (один раб асинхронной потоковой передачи )

На втором подчиненном

Мы Redid, то же самое, что было сделано на первом подчиненном очевидно адаптации его имя хоста в файле recovery.conf и IP-адрес в команде архивирования в основном конфигурационном файле, если вы также хотите, чтобы включить архивирование на этом втором раба.

Проверка и тестирование наших multi мастер репликации славянских

Он подключается к хозяину и она регистрируется в пользователя postgres :

# su – postgres

Затем подключение к postgresql :

$ psql


Это позволяет отображать на расширенной и мы проверяем наши репликации :

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

Хорошо, так что наши 2 Репликация с наших двух славянских серверах (postgres02 и postgres 03).


По-прежнему подключен к postgresql на мастер, он создает данных база (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


Он проверяет, что база данных реплицируется хорошо на наши 2 Славянские :

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)

База данных, которую мы создали на наш мастер это так хорошо, автоматически реплицируются на наших двух славянских.


Чтобы удалить, поскольку мастер :

postgres=# DROP DATABASE checkrep;



Вы не можете оставлять комментарии.