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

Материал из Ru 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.

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;



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