@pgsql

Страница 525 из 1062
Baldr
19.10.2017
11:35:41
как грамотно сделать высокодоступный кластер постгреса? для репликации решил использовать встроенную в постгрес streaming replication, но что делать с автоматическим failover'oм? гугл показывает, что его делают с помощью pgpool, но есть и много критики такого подхода и советов использовать тулзы из linux ha (pacemaker + corosync). что и почему выбрать?

Alex
19.10.2017
11:38:21
выбрать linux ha потому что все остальное- это прямой путь к «мультимастеру»

Mike Chuguniy
19.10.2017
11:38:53
@dmnord мастер будет ждать ответов от серверов, указанных в synchronous_standby_names, соответственно на слейвах поднимать эту переменную я бы не стал. Хоть вроде по докам каскадная синхронная репликация не поддерживается.

Google
Baldr
19.10.2017
11:41:01
выбрать linux ha потому что все остальное- это прямой путь к «мультимастеру»
почему? встречаются же статьи, где через тот же pgpool делают мастер-слейв

Mike Chuguniy
19.10.2017
11:41:03
Отвечаю на вопрос "что делать с failover-ом?": после выбора технологии долго и упорно развлекаться на кошках. Технологии: лучше linux-ha под линух найти весьма проблематично.

@neemore не надо читать статьи. Особенно про pgpool.

надо читать документацию по продуктам.

Vadim
19.10.2017
11:42:11
а repmgr же поддерживает им нельзя autofailover ?

Mike Chuguniy
19.10.2017
11:42:13
Особенно внимательно раздел ограничений

Аггей
19.10.2017
11:42:39
Я выше по чату описывал одну из реализаций автофайловера

Mike Chuguniy
19.10.2017
11:43:46
По докам также написано, что когда сервер работает в режиме ведомого сервера, то этот параметр игнорируется
У вас для каждого сервера будет различный набор синхронных реплик в любом случае.

Vadim
19.10.2017
11:43:48
haproxy-pgbouncer-repmgr , тут вроде есть все что нужно для стендбая, и для автофейловера,

Аггей
19.10.2017
11:43:59
https://wiki.postgresql.org/images/a/a3/PGConf_US_2016-QuanHa.pdf

Mike Chuguniy
19.10.2017
11:45:09
А серебряной пули как не было, так и нет. И не предвидится. А каждая задача решается далеко не одним способом. Добро пожаловать в мир опен сурса. :P

Аггей
19.10.2017
11:45:25
Ну я делал костыль как раз с haproxy... он стоит на сервере приложений, принимает соединения от приложух и проксирует соединения на мастер сервер.... мастера определяет по bgw-replstatus... логика свитчовера - автофайловера реализована repmgr (с witness нодой)... Но я бы очень не рекомендовал автофайловер делать... чтобы не попасть в "split brain"

Google
Аггей
19.10.2017
11:45:25
Когда сделаете автофайловер - проведите простой тест - отключите сеть на мастере и дождитесь переключения.... а потом верните сеть (будет как раз split-brain). Это можно обойти... но очередным костылем

Собственно vrrp (и все реализации типа keepalived, heartbeat и прочего) при правильной настройке и постоянном мониторинге предпочтительнее... но все же не панацея

Дмитрий
19.10.2017
11:46:14
У вас для каждого сервера будет различный набор синхронных реплик в любом случае.
Если я правильно понимаю, постгрес начинает считать себя ведомым (резервным), как только в директории PGDATA появляется файл recovery.conf! верно?

Mike Chuguniy
19.10.2017
11:55:13
Нет. корректный recovery.conf должен быть на момент запуска ПГ.

Vadim
19.10.2017
12:01:19
а witness нода от splitbrain не спасает?

Sergey
19.10.2017
12:03:43
а witness нода от splitbrain не спасает?
А что происходит с кластером когда она падает?

Аггей
19.10.2017
12:04:00
Не происходит переключение

То есть если сначала падает witness а потом мастер - просто ничего не происходит

Sergey
19.10.2017
12:07:17
Т.е. если мастер заизолировался и witness остался со slave'ом то slave promote'ится до мастера и получается изолированный сегмент со старым мастером и широкий сегмент с новым мастером?

Vadim
19.10.2017
12:08:30
не промоутится наверно, написали ж ничего не происходит

а нет, перепутал, это ж если витнес падает

Аггей
19.10.2017
12:19:05
И это проблема. Я писал костыль - в виде скрипта который гасит старый мастер когда он становится доступен

Alex
19.10.2017
12:53:44
изолировать надо хост целиком иначе при одностороннем сетевом взаимодействии возможны нюансы в видел «мультимастера»

Аггей
19.10.2017
12:56:30
Он же не "становится" доступен. Он "остаётся" доступен
Ну как остается - если учесть что приложение смотрит на него через haproxy

Nick
19.10.2017
13:33:18
народ а в ПГ есть возможность притянуть табличку из другой удаленной базы по аналогии с никнеймами в db2?

Arthur
19.10.2017
13:34:37
есть, postgres_fdw называется

Nick
19.10.2017
13:35:21
спасибо

Google
Alex
19.10.2017
14:50:29
Посмотрите архитектуру Patroni. Обходит все вопросы по изолированности мастера, и даже ДЦ (если есть кворум из ДЦ)
что происходит когда дц с мастером станет изолированным а два других будут видеть друг друга? fencing хоста с мастером имеется?

Игорь
19.10.2017
14:55:16
Изолированный мастер перейдет в read-only. Остальные выберут мастера, другой к ней присоединится

Alex
19.10.2017
15:02:16
Изолированный мастер перейдет в read-only. Остальные выберут мастера, другой к ней присоединится
не бывает тут ситуации когда старый мастер не переключился в readonly и мы получаем два мастера?

Игорь
19.10.2017
15:03:57
Нет, не должно

Nikolay
19.10.2017
15:07:43
Нет, не должно
Отказоустойчивость обвязки над patroni - haproxy, pgbouncer и etc... как реализована?

Alex
19.10.2017
15:07:49
как две другие ноды понимают что ресурс на третьей будет точно недоступный при изменении состояния на слейве?

promote slave to master не должен осуществлятся до тех пор пока старый мастер точно не будет выключен из игры

изменяя свое состояние две оставшиеся ноды с большой долей вероятности приведут к «мультимастеру»

Игорь
19.10.2017
15:09:31
Отказоустойчивость обвязки над patroni - haproxy, pgbouncer и etc... как реализована?
У Pgbouncer прописано db_master = host=127.0.0.1 port=5000 У HAproxy прописано HTTP CHECK Patroni port /master Если чек не проходит (patroni отдает 503), то URI db_master недоступна

promote slave to master не должен осуществлятся до тех пор пока старый мастер точно не будет выключен из игры
Да, именно, как только нет мастера, остальные начинают голосование

Координацию обеспечивает кворум из кластера etcd

Alex
19.10.2017
15:10:56
не изолируя третью ноду

Игорь
19.10.2017
15:11:05
непонял

Alex
19.10.2017
15:11:44
изменение состояния происходит без fencing третьей ноды?

Игорь
19.10.2017
15:12:13
С, но так как до нее не достучаться и нет замка мастера, то происходит выбор нового

А, fencing это ограничение (сори за мой инглишь)

Alex
19.10.2017
15:13:18
ее необходимо изолировать и после изменять состояние двух других

изоляция больше подходит

от слова изгородь

если fencing тоже не проходит то делать promote до мастера это путь к мультимастеру

Google
Alex
19.10.2017
15:15:46
при невозможности fencing состояние системы должно оставаться тем же

Игорь
19.10.2017
15:16:02
Смотри. Есть кластер etcd - он обеспечивает согласованное состояние. Он находится во всех 3 ДЦ Если один ДЦ вылетает, то нода etcd теряет кворум. К ней (так как другие уже недоступны) обращается Patroni, ничего с ней сделать не может и производит demote. Его замок мастера истекает по TTL и остальные живые ноды бд начинают голосование

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

Игорь
19.10.2017
15:20:32
картинки - https://github.com/zalando/patroni/blob/master/docs/ha_loop_diagram.png

pgbouncer расположен на хосте с БД?
Нет, на отдельных хостах с exaBGP. Но может точка входа быть и на хостах бд, архитектуры это не меняет

Alex
19.10.2017
15:22:39
у решения патрони есть fencing? если нет что вмнем есть в качестве замены?

Игорь
19.10.2017
15:27:00
дц может быть мертвым для других дц но это не значит что он мертвый совсем. и на других дц ,принимая решение об изменении состояния мы получаем неопределенность
1) Если связь между ДЦ работает (etcd, pg), но снаружи - нет, тогда 30% трафика будет проливаться и запись в мастер работать не будет 2) Если связь между ДЦ не работает (etcd кворум пропадет), но снаружи - да, тогда произойдет смена мастера

Где расположен haproxy? Как он защищен от падения?
рядом с pgbouncer. haproxy не резервирован, практически он не падает. На крайняк systemd поднимет

Nikolay
19.10.2017
15:29:44
Игорь
19.10.2017
15:31:31
Нет, единая точка входа, управляемая exaBGP. То есть это всего один IP адрес, который маршрутизируется в зависимости от сетевого нахождения клиента. Если один из хостов в любом ДЦ отваливается, маршрут перестраивается

Alex
19.10.2017
15:42:30
как быть уверенным что маршрут перестроился?

есть возможность понять что маршрут изменился и можно. енять состояние?

если есть то это есть одна из форм феесинга

если нет это надежда на лучшее

Alex
19.10.2017
15:51:41
Gleb
19.10.2017
15:52:30
ну как минимум тем что не работают с коросинком и пейсмейкером

Google
Gleb
19.10.2017
15:52:48
это вообще пушка

Corosync, Pacemaker, DRBD

инструкция по острелу себе всех конечностей

Gleb
19.10.2017
15:53:57
а мне надо?

Alex
19.10.2017
15:54:06
а мне надо?
понятно

Gleb
19.10.2017
15:54:31
когда развалится твой кластер игрушечный на всём этом отвечать будешь ты, я то причём? зачем мне тебе что то доказывать?

Игорь
19.10.2017
15:57:42
как быть уверенным что маршрут перестроился?
Также как и быть уверенным что в России станет жить хорошо. И загневающая европка наконецто загнеет. И что КНДР запустит ракету а не попросит у США вагон пшеницы

как быть уверенным что маршрут перестроился?
А, еще вспомнил. Так же как быть уверенным что TCP пакет придет к нужному IP а не левому

Gleb
19.10.2017
16:06:42
еще раз спрашиваю?

Игорь
19.10.2017
16:06:49
Это как раз по существу. Это технологии прошлого десятилетия

Alex
19.10.2017
16:06:54
спасибо за разъяснения

Gleb
19.10.2017
16:07:38
ну я тогда убираю свой длинный аргумент

Alex
19.10.2017
16:08:30
бездоказательность -это прекрасно, всегда можно соскочить от прямого обоснованного ответа

Gleb
19.10.2017
16:09:22
ты сейчас просто защищаешь решение которое, вероятно, взял в продакшен ты точно так же без доказательств и почему то предложил доказывать тебе

Alexander
19.10.2017
16:11:16
как быть уверенным что маршрут перестроился?
cнимай таблицу маршрутиризации с роутера

Alex
19.10.2017
16:12:09
я его не защищаю, где это было написано? я задавал конкретные вопросы как организовани фенсинг

Страница 525 из 1062