172 похожих чатов

Хочу сделать хот-стендбай, что сделал: postgresql_master.conf: max_connections = 40

# (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
shared_buffers = 7680MB # min 128kB
work_mem = 49MB # min 64kB
maintenance_work_mem = 1920MB # min 1MB
dynamic_shared_memory_type = posix # the default is usually the first option
effective_io_concurrency = 200 # 1-1000; 0 disables prefetching
max_worker_processes = 20 # (change requires restart)
max_parallel_workers_per_gather = 4 # taken from max_parallel_workers
max_parallel_maintenance_workers = 4 # taken from max_parallel_workers
max_parallel_workers = 20 # maximum number of max_worker_processes that
max_wal_size = 4GB
min_wal_size = 1GB
hot_standby_feedback = on # send info from standby to prevent
random_page_cost = 1.1 # same scale as above
effective_cache_size = 23040MB
log_min_duration_statement = 1000 # -1 is disabled, 0 logs all statements
log_statement_sample_rate = 0.2 # fraction of logged statements exceeding
cluster_name = '15/main' # added to process titles if nonempty
datestyle = 'iso, mdy'
timezone = 'UTC'
shared_preload_libraries = 'pg_stat_statements,auto_explain' # (change requires restart)
auto_explain.log_min_duration = 2000
auto_explain.log_analyze = on
auto_explain.log_triggers = on
auto_explain.log_nested_statements = on
include_dir = 'conf.d' # include files ending in '.conf' from
slave.conf:
max_connections = 40 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
shared_buffers = 7680MB # min 128kB
work_mem = 49MB # min 64kB
maintenance_work_mem = 1920MB # min 1MB
dynamic_shared_memory_type = posix # the default is usually the first option
effective_io_concurrency = 200 # 1-1000; 0 disables prefetching
max_worker_processes = 20 # (change requires restart)
max_parallel_workers_per_gather = 4 # taken from max_parallel_workers
max_parallel_maintenance_workers = 4 # taken from max_parallel_workers
max_parallel_workers = 20 # maximum number of max_worker_processes that
wal_log_hints = on # also do full page writes of non-critical updates
max_wal_size = 4GB
min_wal_size = 1GB
hot_standby_feedback = on # send info from standby to prevent
random_page_cost = 1.1 # same scale as above
effective_cache_size = 23040MB
log_min_duration_statement = 1000 # -1 is disabled, 0 logs all statements
log_statement_sample_rate = 0.2 # fraction of logged statements exceeding
log_line_prefix = '%m [%p] %q%u@%d ' # special values:
log_timezone = 'UTC'
cluster_name = '15/main' # added to process titles if nonempty
datestyle = 'iso, mdy'
timezone = 'UTC'
auto_explain.log_min_duration = 2000
auto_explain.log_analyze = on
auto_explain.log_triggers = on
auto_explain.log_nested_statements = on
include_dir = 'conf.d'
создал реплику так:
pg_basebackup -P -R -X stream -c fast -h host -U replica_user -D ./main
оно работает,
как я понял, чтобы промоутнуть реплику до мастера я могу добавить в настройках ссылку на файл, который, если появляется, прмоутит слейв.
но что-то я туплю с демоутом. что происходит тогда, когда мастер снова активен, достаточно ли убрать файл или нужны какие-то ещё действия.
хотелось бы избежать сплит-брейна, может я ещё что-то упускаю?
+вопрос по роутингу р/о запросов на слейв, какие есть подводные камни, что можете посоветовать?

16 ответов

28 просмотров

может воспользоваться уже существующими наработками на тему? например патрони

>достаточно ли убрать файл или нужны какие-то ещё действия. Да, нужно остановить его, синхонизировать с новым ведущим (например, можэт помочь pg_rewind. Ну, или rsync, или pg_basebackup...) и потом можно создавать standby.signal и запускать его заново в режыме веомого.

>+вопрос по роутингу р/о запросов на слейв, какие есть подводные камни, что можете посоветовать? Все варианты, кроме как непосредственно в клиенте определять -- нужэн ведущий или нет -- являются какой-то противоестественной эклектикой. Нет, не то, чтобы они совсем были никудышные -- можно разобраться, что имел в виду автор, и как к этому привести -- но непонятно, зачем. Если лучшэ всего это знает именно клиентское приложэние. (Адреса ведущего и ведомого получать из любого твоего конфиг стораджа.)

Ilya Anfimov
И б-жэ вас упаси от патрони...

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

Илья, а чем плох Patroni? Хочется услышать один, два аргумента против него..

id0- Автор вопроса
Ilya Anfimov
>достаточно ли убрать файл или нужны какие-то ещё ...

получается, делаю recovery.signal, и настраиваю recovery_command, правильно понимаю, что если чексуммы включены глобально, то нет нужды в wal_log_hints или я ошибаюсь? (pg_rewind requires that the target server either has the wal_log_hints option enabled in postgresql.conf or data checksums enabled )

Ilya Anfimov
https://t.me/PostgreSQL_1C_Linux/129202

ну представим ситуацию, что у вас включен archive_mode. У вас мастер пишет walы, он вылетает, его роль берёт реплика. В патрони у вас сменится TL и walы также будут писаться. Потом приезжает упавший мастер и не успев понять, что он не мастер записал в архив свои walы, но так как сменился TL он не перезапишет правильные walы, что произошло бы если TL не сменился.

Владимир Петров
ну представим ситуацию, что у вас включен archive_...

>, его роль берёт реплика. В этот момент у неё меняется TL, и никто никого не перезапишэт. Патрони жэ сменит TL у бывшэго ведущего, если он рестартнётся -- потому во-первых, шансы на перезапись правильной новой TL появляются. Во-вторых, шансы на pg_rewind -- исчезают.

Ilya Anfimov
>, его роль берёт реплика. В этот момент у неё ме...

почему он вдруг сменит TL у бывшего ведущего?

Владимир Петров
почему он вдруг сменит TL у бывшего ведущего?

Ладно, в этом случае -- действительно не должэн. (Я просто привык, что патрони накручивает таймлайн при каждом рестарте сервера -- вот и неподумал, что тут у нас с точки зрения патрони не ведущий ужэ).

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта