Postgresql + Pgpool. Как организовать быстрый доступ из разных концов земли?
Всем привет!
Есть система, к которой необходим быстрый доступ из России и из США.
Вопрос со статикой и скриптами решается элементарно. Главная проблема - работа с базой, доступ к которой тоже должен быть быстрым.
Синхронизация БД выполняется штатными средствами PostgreSQL 9.1, балансировка read запросов - pgpool.
Проблема в том, что сервер с pgpool не может быть одинаково быстро доступен и из США и из России. Так как он один и находится в одном месте.
Если мы пытаемся решить эту проблему и делаем 2 сервера с pgpool (на общий пул БД), каждый в своей стране, выставляем в настройках соответствующие приоритеты нод, то мы получаем, что write запросы из одной страны будут медленнные (принимаем это, как неизбежность), но по read запросам мы получим хорошую скорость.
Все было бы хорошо, если бы не нужна была еще и отказоустойчивость. При падении мастера, pgpool делает один из слейвов мастером и продолжает работу.
Если мы рассматриваем падение одной из нод, то так и будет. Но если мы предположим потерю связи между двумя pgpool, то получится, что тот pgpool, который остался только со слейвами, "подумает", что мастер упал и сделает один из оставшихся доступными слейвов мастером. В итоге мы получим 2 несогласованных мастера.