Насколько прозрачной должна быть потеря доступа к датоделе Postgres-XL?
Я настроил тестирующий кластер Postgres-XL со следующей архитектурой:
- гтм - вм00
- Координат1+ Датоде1 - VM01
- Координат2+ Датоде2 - VM02
Я создал новую базу данных, которая содержит таблицу, которая распространяется путем репликации. Это означает, что у меня должна быть точная копия этой таблицы в каждой отдельной датоде.
Выполнение операций над таблицей работает отлично, я вижу изменения, реплицируемые при подключении ко всем узлам координатора.
Тем не менее, когда я имитирую, что один из катодов данных выходит из строя, хотя я все еще могу нормально читать данные в таблице, я не могу ничего добавить или изменить, и я получаю следующую ошибку:
ERROR: Failed to get pooled connections
Я рассматриваю возможность развертывания Postgres-XL в качестве высокодоступного сервера базы данных для значительного числа приложений, и я не могу контролировать, как эти приложения взаимодействуют с базой данных (это может быть большой проблемой, если эти приложения не могут записывать в базу данных, пока один Датодет не работает).
Насколько я понимаю, Postgres-XL должен обеспечить высокую доступность для реплицируемых таблиц очень прозрачным способом и должен поддерживать потерю одного или нескольких узлов данных (если хотя бы один из них все еще доступен - опять же, это только для реплицированных таблиц), но это не так.
Это предполагаемое поведение? Что можно сделать, чтобы выдержать отключение одного или нескольких узлов данных?
1 ответ
Так что получается не совсем прозрачно. К моему удивлению, у Postgres-XL нет высокой поддержки или восстановления. Это означает, что если вы потеряете один узел, база данных выйдет из строя. И если вы используете параметры циклического перебора или хеша DISTRIBUTED BY, если вы потеряете диск в узле, вы потеряли всю базу данных. Я не мог в это поверить, но это так.
У них есть опция сервера "stand by", которая представляет собой просто зеркальный узел для каждого вашего узла, но даже это требует ручной настройки для восстановления и удваивает количество нужных вам узлов. Для защиты данных вам нужно будет использовать опцию REPLICATION DISTRIBUTED BY, которая НАМНОГО медленнее и снова не имеет поддержки при отказе, поэтому вам придется вручную перезапустить ее и перенастроить, чтобы не использовать отказавший узел.
https://sourceforge.net/p/postgres-xl/mailman/message/32776225/
https://sourceforge.net/p/postgres-xl/mailman/message/35456205/