| Надо | На мастере (ruvds) | На реплике (timeweb) |
|
используйте разные порты.
Например, публикация будет на 5432, а подписчик — на 5431 (просто замечание).
sudo nano /etc/postgresql/16/main/postgresql.conf Раскомментируйте параметр wal_level и задайте значение logical. sudo systemctl restart postgresql Мои вопросы: 1. Это на каком сервере? - сделал на мастере 2. Останется ли работать физическая репликация? - ок |
wal_level restart |
добавил запись, проверим на VM Яндекса Как часы Хотя она была остановлена на момент изменений на мастере |
|
Затем на мастере в основной таблице (?) выполните pg_dumpall --database=postgres --host=192.168.1.2 --no-password --globals-only --no-privileges | psql висит |
pg_dumpall пустую PostgreSQL database cluster dump complete А куда и что? |
|
|
Попробую по другой
инструкции Сразу отличие listen_addresses = 'localhost, IP мастера' ... и pg_dumpall на slave вроде |
psql CREATE DATABASE db_test; Полезная инструкция timeweb переключиться на другую базу данных внутри psql используем команду: \c имя_БД Создал таблицу themes 1. Брандмауэр - пока не трогал 2. Настройки Master Реплицировать будем базу с названием db_test. (и для того чтобы не корёжить имеющиеся БД на timeweb) /etc/postgresql/16/main/postgresql.conf SHOW hba_file; /var/lib/pgsql/16/data/pg_hba.conf (?) host db_test postgres 192.168.1.11/32 trust host postgres postgres 192.168.1.11/32 trust Свои данные, конечно |
3. Настройки на Slave Через свой веб-интерфейс SHOW config_file; [('/etc/postgresql/14/main/postgresql.conf',)] wal_level = logical systemctl restart postgresql Реплицирую только db_test pg_dump --dbname db_test --host=IP мастера --no-password --create --schema-only | psql
|
Ожидаемо, по умолчанию через root подключается Добавил -U postgres, теперь говорит версии не сопадают. Тоже ожидаемо. ОК, будем по друргому |
Нарисовал схему ERD Добавить | |
По официальной инструкции |
На мастере CREATE PUBLICATION pub1 FOR TABLE themes; |
На реплике Создал на timeweb БД db_test и пустую таблицу themes CREATE SUBSCRIPTION sub1 CONNECTION 'host=IP Мастера dbname=db_test application_name=sub1' PUBLICATION pub1; Всё ок
|
|
Далее 1. Нужны ли предыдущие шаги по настройке? 2. Сделать такую же подписку к БД postgres 3. Добавил таблицу blog и запись на мастере в БД postgres 4. Проверить физ на Я машине - ив схему нарисовать там бд или табл? физ ведь 5. И ничо не надо очищать при лог репликации |
Добавить ещё одну таблицу? И как и где она встрелит? |
| Яндекс postgres |
db_test | ruvds postgres |
db_test | timeweb db_test |
|
postgres blog 1 themes 5 |
db_test themes |
db_test themes Логическая |
||
21.11.25
|
Какая здесь репликация? Наверняка логическая, по аналогии с timeweb
|
|
|
К db_test потому что CREATE SUBSCRIPTION sub1 CONNECTION 'host=IP Мастера dbname=db_test application_name=sub1' PUBLICATION pub1;
|
| поэкспереминтеровать с логической еще из разных баз а если наоборот esplogs на Я и подпискку в обратную сторону? |
CREATE TABLE esplogs (id serial PRIMARY KEY, recordtime timestamp NOT NULL, recordtext text NOT NULL);
Упс ERROR: Cannot execute CREATE TABLE in a read-only transaction Об этой ошибке на Yandex Cloud Такие ошибки могут возникнуть, если произошло переключение роли мастера на другой хост и вы подключились к реплике, доступной только для чтения. |
| Надо | Яндекс | Timeweb |
| Ещё раз с чистого листа по https://postgrespro.ru/docs/postgresql/current/logical-replication-subscription#LOGICAL-REPLICATION-SUBSCRIPTION-EXAMPLES офиц инструкции пройтись логическую минимум движений |
CREATE DATABASE fromtime; Хм, то же самое ERROR: Cannot execute CREATE DATABASE in a read-only transaction А как же тогда удалось создать лог.реплику на db_test? |
CREATE DATABASE foryandex; CREATE TABLE maxlogs (id serial PRIMARY KEY, recordtime timestamp NOT NULL, author varchar(20) NOT NULL, recordtext text NOT NULL); INSERT INTO maxlogs (recordtime, author, recordtext) VALUES (nov(), 'test user', 'test text'); |
| секреты логирования otus | очистка main и вот \то вот всё? Найти историю, когда была создана db_test и настроена репликация и какая? | |
| *** | *** | *** |
| Яндекс | Ruvds db_test | Timeweb foryandex |
| Мгновенно появилась. Значит здесь тоже физ.репликация | 22.11.25 CREATE TABLE maxlogs в БД db_test |
|
| Теперь сделать здесь лог.репликацию из Timeweb CREATE SUBSCRIPTION subtime CONNECTION 'host=178.253.42.21 dbname=foryandex application_name=subtime' PUBLICATION pubtime; |
CREATE PUBLICATION pubtime FOR TABLE maxlogs; |
|
could not connect to the publisher port 5432 failed fe_sendauth: no password supplied Разбор ошибки |
SHOW hba_file; pg_hba.con host foryandex postgres IP slave/32 trust Три инструкции, какая из них сработала ХЗ, Каша |
|
|
listen_addresses = 'localhost, 192.168.1.10' - у меня * wal_level = logical уже |