#1
|
|||
|
|||
postgresql нативная репликация
Anton Gorlov написал(а) к All в Feb 17 16:47:56 по местному времени:
Привет All! Добрались наконец-то руки до нативной репликации postgresql (9.6). Настроил на мастере: wal_level = replica archive_mode = on archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f' maxwalsenders = 1 walkeepsegments = 64 В pg_hba.conf соотвественно host replication postgres 192.168.150.10/32 trust Где 192.168.150.10/32 - это слейв. Далее на слейве (сервис ращумеется остановлен) В /var/lib/postgresql/9.6/main/recovery.conf прописываю standby_mode = 'on' primary_conninfo = 'host=192.168.150.9 port=5432 user=postgres' trigger_file = '/var/lib/postgresql/9.6/main/trigger' restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f "%p"' После этого на мастере выполняю psql -c "SELECT pgstart_backup('mybackup', true)" копирую на слейв /var/lib/postgresql/9.6/main/ Далее на мастере выполняю psql -c "SELECT pgstopbackup()" Запускаю слев. Они вроде как успешно синхронизируются, но в логе слейва полно записей типа cp: не удалось выполнить stat для '/var/lib/postgresql/9.6/main/archive/00000001000000000000000E': Нет такого файла или каталога При копировании с мастера на слейв в archive был только 00000001000000000000000D 00000001000000000000000E есть только в main/pg_xlog Вопрос что пропустил? Делалось согласно тфм https://wiki.postgresql.org/wiki/Streaming_Replication С уважением. Anton aka Stalker Linux Registered User #386476 [#TEAM:*#] [#Злой СисОп_#] [*Нeavy Metal!*] [*_Усачи] --- GoldED+/LNX 1.1.5-b20160322 |
#2
|
|||
|
|||
postgresql нативная репликация
Den Grigoriev написал(а) к Anton Gorlov в Mar 17 09:13:36 по местному времени:
Привет, Anton! 28 фев 17 16:47, Anton Gorlov -> All: AG> Привет All! AG> Добрались наконец-то руки до нативной репликации postgresql (9.6). На мастере и на слейве желательно сделать: kernel.shmmax = 1000000000 kernel.shmall = 2097152 AG> Настроил на мастере: AG> wal_level = replica AG> archive_mode = on AG> archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f' AG> maxwalsenders = 1 AG> walkeepsegments = 64 wallevel = hotstandby archive_mode = on archive_command = 'scp %p 192.168.150.10:/var/lib/postgresql/archive/' maxwalsenders = 1 walkeepsegments = 64 WAL-сегменты должны копироваться на слейва. Папочку '/var/lib/postgresql/archive' надо создать и принадлежать она должна пользователю postgres. (архивный каталог не должен быть вместе с базой данных) Соответственно не слейве надо поднять SSН (apt-get install openssh-server), сделать на мастере ключи SSН для пользователя postgres и задеплоить публичный ключ на слейв (приватный ключ должен быть без пароля): $ sudo -i # su -l postgres $ mkdir .ssh $ chown postgres.postgres .ssh $ chmod 700 .ssh $ ssh-keygen $ ssh-copy-id postgres@192.168.150.10 AG> В pg_hba.conf соотвественно AG> host replication postgres 192.168.150.10/32 trust AG> Где 192.168.150.10/32 - это слейв. Нехорошо делать репликацию от postgres. CREATE USER repl SUPERUSER; host replication repl 192.168.150.10/32 trust AG> Далее на слейве (сервис ращумеется остановлен) В postgresql.conf надо прописать: hot_standby = on effectivecachesize = 1GB track_functions = all AG> В /var/lib/postgresql/9.6/main/recovery.conf прописываю AG> standby_mode = 'on' AG> primary_conninfo = 'host=192.168.150.9 port=5432 user=postgres' AG> trigger_file = '/var/lib/postgresql/9.6/main/trigger' AG> restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f "%p"' standby_mode = 'on' primary_conninfo = 'host=192.168.150.9 port=5432 user=repl' restore_command = 'cp /var/lib/postgresql/archive/%f %p' archivecleanup_command = '/usr/lib/postgresql/9.6/bin/pgarchivecleanup /var/lib/postgresql/archive %r' AG> После этого на мастере выполняю AG> psql -c "SELECT pgstart_backup('mybackup', true)" AG> копирую на слейв /var/lib/postgresql/9.6/main/ AG> Далее на мастере выполняю psql -c "SELECT pgstopbackup()" AG> Запускаю слев. Они вроде как успешно синхронизируются, но в логе AG> слейва полно записей типа AG> cp: не удалось выполнить stat для AG> '/var/lib/postgresql/9.6/main/archive/00000001000000000000000E': Нет AG> такого файла или каталога AG> При копировании с мастера на слейв в archive был только AG> 00000001000000000000000D AG> 00000001000000000000000E есть только в AG> main/pg_xlog AG> Вопрос что пропустил? Делалось согласно тфм AG> https://wiki.postgresql.org/wiki/Streaming_Replication AG> С уважением. Anton aka Stalker AG> Linux Registered User #386476 AG> [#TEAM:*#] [#Злой СисОп_#] [*Нeavy Metal!*] [*_Усачи] AG> --- GoldED+/LNX 1.1.5-b20160322 AG> * Origin: Sin rulez!!! Arcctg Must Die!!! (2:5059/37) С наилучшими пожеланиями, Den. --- ------------------------------- |
#3
|
|||
|
|||
postgresql нативная репликация
Alexey Vissarionov написал(а) к Den Grigoriev в Mar 17 11:33:00 по местному времени:
Доброго времени суток, Den! 01 Mar 2017 09:13:36, ты -> Anton Gorlov: AG>> Добрались наконец-то руки до нативной репликации postgresql (9.6). DG> archive_command = 'scp %p 192.168.150.10:/var/lib/postgresql/archive/' Коллега, вот при всем уважении: не scp, а все же rsync. DG> Папочку '/var/lib/postgresql/archive' надо создать Папочка сношает мамочку, а в файловой системе - каталоги. DG> Соответственно не слейве надо поднять SSН (apt-get install Фу. DG> $ ssh-keygen И не просто ssh-keygen, а ssh-keygen -t rsa -b 8192 -N '' DG> primary_conninfo = 'host=192.168.150.9 port=5432 user=repl' Если логи завершения транзакций копируем внешними средствами, то работать с базой лучше через localhost. -- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii ... Зеленого змия - в Красную книгу --- /bin/vi |
#4
|
|||
|
|||
postgresql нативная репликация
Den Grigoriev написал(а) к Alexey Vissarionov в Mar 17 18:10:48 по местному времени:
Привет, Alexey! 01 мар 17 11:33, Alexey Vissarionov -> Den Grigoriev: AV> Коллега, вот при всем уважении: не scp, а все же rsync. Запуск rsync для переноса одного файла? Да оно думает ещё, когда scp уже все сделал. AV> Папочка сношает мамочку, а в файловой системе - каталоги. Не хами. DG>> $ ssh-keygen AV> И не просто ssh-keygen, а ssh-keygen -t rsa -b 8192 -N '' -t rsa щас и так по умолчанию, и нафига такой длинный ключ внутри сети? Ну и вместо -N рука не отвалится два раза ENTER нажать... DG>> primary_conninfo = 'host=192.168.150.9 port=5432 user=repl' AV> Если логи завершения транзакций копируем внешними средствами, то AV> работать с базой лучше через localhost. Ага, со слейва на мастер через localhost... воздушно капельным путем. С наилучшими пожеланиями, Den. --- ------------------------------- |
#5
|
|||
|
|||
postgresql нативная репликация
Alexey Vissarionov написал(а) к Den Grigoriev в Mar 17 05:00:00 по местному времени:
Доброго времени суток, Den! 01 Mar 2017 18:10:48, ты -> мне: AV>> Коллега, вот при всем уважении: не scp, а все же rsync. DG> Запуск rsync для переноса одного файла? DG> Да оно думает ещё, когда scp уже все сделал. Секретный параметр подсказать, или сами в `man rsync` найдете? AV>> Папочка сношает мамочку, а в файловой системе - каталоги. DG> Не хами. В мыслях не было. А то, что вы путаете элемент файловой системы и абстракцию пользовательского интерфейса - увы, лишь показывает вашу однобокость как специалиста. Попробую угадать: DBA, ага? Причем исключительно PostgreSQL, ага? DG>>> $ ssh-keygen AV>> И не просто ssh-keygen, а ssh-keygen -t rsa -b 8192 -N '' DG> -t rsa щас и так по умолчанию, На умолчания лучше не закладываться. DG> и нафига такой длинный ключ внутри сети? 4096 - абсолютный минимум. 8192 - разумное значение на ближайшие 5 лет. DG> Ну и вместо -N рука не отвалится два раза ENTER нажать... Ааааа... это у вас количество вторичников никогда не измерялось десятками :-) DG>>> primary_conninfo = 'host=192.168.150.9 port=5432 user=repl' AV>> Если логи завершения транзакций копируем внешними средствами, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AV>> то работать с базой лучше через localhost. DG> Ага, со слейва на мастер через localhost... воздушно капельным путем. Помедитируйте на отмеченное. Мало ли, вдруг просветление наступит?.. -- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii ... Пароль - как коньяк: чем больше звездочек, тем лучше --- /bin/vi |
#6
|
|||
|
|||
postgresql нативная репликация
Den Grigoriev написал(а) к Alexey Vissarionov в Mar 17 11:36:40 по местному времени:
Привет, Alexey! 02 мар 17 05:00, Alexey Vissarionov -> Den Grigoriev: AV> Секретный параметр подсказать, или сами в `man rsync` найдете? Не надо. Про -W я лет двадцать как знаю. Лично мне scp удобнее. При нашей нагрузке на базу (~гектар инсертов в сутки) это не критично. AV> В мыслях не было. А то, что вы путаете элемент файловой системы и AV> абстракцию пользовательского интерфейса - увы, лишь показывает вашу AV> однобокость как специалиста. Я ничего не путаю, это ты придираешься. А так, да я - очень однобокий специалост :-) AV> Попробую угадать: DBA, ага? Причем исключительно PostgreSQL, ага? Ага, весь такой DBA. Первый мой компутер был CM-1420 на кафедре математики Ленинградского института киноинженеров. Я на нем ещё студентом на фортране курсовики писал с 1987 года. Потом различные ДВК-1/2/3 или DEC PDP/DEC MicroVAX, подсоединенные к чему-нибудь специфичному, типа хроматографа или рентгеновского спектрометра, писал для них разное на ассемблере и C. Потом, года с 1991 уже пошли всякие "IBM/PC-совместимые". В 1997 пересел на Linux. Так что я не разу не DBA, PostgreSQL у меня по необходимости, поскольку в конторе есть два ораклоида и три SQLевода, а про постгрес тока я знаю... DG>>>> primary_conninfo = 'host=192.168.150.9 port=5432 user=repl' AV>>> Если логи завершения транзакций копируем внешними средствами, AV> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AV>>> то работать с базой лучше через localhost. DG>> Ага, со слейва на мастер через localhost... воздушно капельным DG>> путем. AV> Помедитируйте на отмеченное. Мало ли, вдруг просветление наступит?.. Пять раз промедитировал. Слейв обращается к мастеру в псевдобазу "replication" пользователем "repl". Он хочет знать какие файлы логов он ещё не обработал (это потому, что у нас может отсутсвовать "archivecleanupcommand" и в архивном каталоге помойка) Где тут localhost? С наилучшими пожеланиями, Den. --- ------------------------------- |
#7
|
|||
|
|||
postgresql нативная репликация
Alexey Vissarionov написал(а) к Den Grigoriev в Mar 17 20:00:00 по местному времени:
Доброго времени суток, Den! 02 Mar 2017 11:36:40, ты -> мне: AV>> Секретный параметр подсказать, или сами в `man rsync` найдете? DG> Не надо. Про -W я лет двадцать как знаю. А про --size-only ? DG> Лично мне scp удобнее. Скорее, привычнее. Мне когда-то тоже было привычнее... AV>> В мыслях не было. А то, что вы путаете элемент файловой системы AV>> и абстракцию пользовательского интерфейса - увы, лишь показывает AV>> вашу однобокость как специалиста. DG> Я ничего не путаю, это ты придираешься. А как еще мне следовало ответить на огульное обвинение в хамстве? Может, реальным хамством? Ну, чтобы уж точно сомнений не возникало? AV>> Попробую угадать: DBA, ага? Причем исключительно PostgreSQL, ага? DG> Ага, весь такой DBA. А вот я ни разу не DBA. Тем не менее, меня в документации по MySQL разок процитировали... DG> Первый мой компутер был CM-1420 Слышу звон седин, слышу... :-) -- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii ... Безумству храбрых - минута молчания --- /bin/vi |
#8
|
|||
|
|||
postgresql нативная репликация
Anton Gorlov написал(а) к Den Grigoriev в Mar 17 22:08:02 по местному времени:
Привет Den! 01 мар 17 года (а было тогда 09:13) Den Grigoriev в своем письме к Anton Gorlov писал: AG>> Привет All! AG>> Добрались наконец-то руки до нативной репликации postgresql AG>> (9.6). DG> На мастере и на слейве желательно сделать: DG> kernel.shmmax = 1000000000 DG> kernel.shmall = 2097152 Это понятно и разумеется сделано AG>> Настроил на мастере: AG>> wal_level = replica AG>> archive_mode = on AG>> archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f' AG>> maxwalsenders = 1 AG>> walkeepsegments = 64 DG> wallevel = hotstandby DG> archive_mode = on DG> archive_command = 'scp %p 192.168.150.10:/var/lib/postgresql/archive/' DG> maxwalsenders = 1 DG> walkeepsegments = 64 Начиная с версии 9.6 нету wallevel = hotstandby, вместо него replica https://www.postgresql.org/docs/9.6/...onfig-wal.html In releases prior to 9.6, this parameter also allowed the values archive and hot_standby. These are still accepted but mapped to replica. DG> WAL-сегменты должны копироваться на слейва. DG> Папочку '/var/lib/postgresql/archive' надо создать DG> и принадлежать она должна пользователю postgres. DG> (архивный каталог не должен быть вместе с базой данных) DG> Соответственно не слейве надо поднять SSН (apt-get install DG> openssh-server), сделать на мастере ключи SSН для пользователя DG> postgres и задеплоить публичный ключ на слейв (приватный ключ должен DG> быть без пароля): Да но в даннм случае это не спасёт. Так как тот указанный файл копируется в архив из pg_xlog в archive после унфриза мастера, то биш после psql -c "SELECT pgstopbackup()" А слейв, судя по мануалу нужно запускать до того как на мастере снимаю фриз https://wiki.postgresql.org/wiki/Streaming_Replication ========== $ psql -c "SELECT pgstartbackup('label', true)" $ rsync -ac ${PGDATA}/ standby:/srv/pgsql/standby/ --exclude postmaster.pid $ psql -c "SELECT pgstopbackup()" ========== То есть на слейве этого файла всё равно не будет наомомент старта слейва DG> $ sudo -i DG> # su -l postgres DG> $ mkdir .ssh Настраивать ssh я умею :) DG> Нехорошо делать репликацию от postgres. DG> CREATE USER repl SUPERUSER; DG> host replication repl 192.168.150.10/32 trust Это тестовая песочница..так ч опокане более чем опыты. AG>> Далее на слейве (сервис разумеется остановлен) DG> В postgresql.conf надо прописать: DG> hot_standby = on DG> effectivecachesize = 1GB DG> track_functions = all В рассылке поцгреса вот что ответили: ========== Looks like everything is fine. The standby recovered all WAL it could find in /var/lib/postgresql/9.6/main/archive/ and then connected to the primary for streaming replication. 000000010000000000000012 is not archived yet, so the standby cannot find it. Test replication by changing something on the primary and checking if the change gets replicated. =========== С уважением. Anton aka Stalker Linux Registered User #386476 [#TEAM:*#] [#Злой СисОп_#] [*Нeavy Metal!*] [*_Усачи] --- GoldED+/LNX 1.1.5-b20160322 |
#9
|
|||
|
|||
postgresql нативная репликация
Eugene Muzychenko написал(а) к Alexey Vissarionov в Mar 17 09:15:09 по местному времени:
Привет! 02 Mar 17 20:00, you wrote to Den Grigoriev: DG>> Первый мой компутер был CM-1420 AV> Слышу звон седин, слышу... :-) А мой первый компьютер был БЭСМ-6 в 1980-м - можно, я тут в уголке посижу? :) Всего доброго! Евгений Музыченко eu-gene@muzy-chen-ko.net (все дефисы убрать) --- GoldED+/W32-MSVC 1.1.5-b20161221 |
#10
|
|||
|
|||
postgresql нативная репликация
Den Grigoriev написал(а) к Alexey Vissarionov в Mar 17 08:29:00 по местному времени:
Привет, Alexey! 02 мар 17 20:00, Alexey Vissarionov -> Den Grigoriev: AV> А про --size-only ? Зачем? -W, --whole-file - никаких проверок, тупо копируем файл, ИМХО, самый быстрый алгоритм. AV> А вот я ни разу не DBA. Тем не менее, меня в документации по MySQL AV> разок процитировали... И чё? А моё ПО автоматизации испытаний фотоматериалов по всем Штатам продавалось, (поскольку расчитано было на Brumicro-совместимое оборудование, другого у нас не было) пока эра цифровой фотографии не наступила. Дальше будем пиписьками меряться? С наилучшими пожеланиями, Den. --- ------------------------------- |