@BloodVIRUS

Как работает кластер galera?

Здравствуйте! Очень хочется попрактиковаться в DevOps скилах, научиться чему-то новому, в дальнейшем потенциально полезным. И в первую очередь в голову бросается идея создания максимально отказоустойчивого продукта.

За основу решил взять обычный "монолит", где крутится MySQL + PHP + Nginx (apache2, не важно)
Мысль, поднять кластер из галеры, на скажем трех серверах. Но из того что я нагуглил, я так и не смог понять какова механика работы кластера. Допустим, у меня три сервера: 10.0.0.1\3. На каждом поднят MySQL в кластере. Для бэкенда (пусть он будет на yii2, не важно) нужно какой из трех серверов указывать? На сколько я понял, во время сбоя работы бд на одном сервере, все запросы перетекают на другой.
Но тут возникает проблема расхождения данных же? Если все три базы синхронизируется при запуске, потом все запросы летят на 10.0.0.1, который падает. Вот просто взяли и выключили свет в серверной, где он расположен. Все запросы потекут на 10.0.0.2, а там устаревшие данные.
Или же все три сервера баз данных всегда хранят в себе одни и те же данные?
или галера кластер для этого не подходит?
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 3
paran0id
@paran0id
Умный, но ленивый
https://galeracluster.com/library/documentation/ov...

Ну камон, репликация мускуля - это не тайные знания.

Очевидно, что процесс передачи на другие серверы - не мгновенный, и требует некоторого времени. И столь же очевидно, что если после получения новых данных, но до передачи их в другие серверы кластера исходный сервер сдох, то этих данных не будет на оставшихся серверах, и, как Вы правильно заметили, запросы будут выполняться с устаревшими данными.


Ага, синхронная репликация - запрос считается выполненным, когда данные разлетелись по кластеру. Медленно и надежно. Асинхронная репликация - сначала запрос считается выполненным, потом данные синхронизируются. быстро, но ненадежно.

А вообще, всех распределенных систем касается CAP-теорема, почитайте. Идеальных распределенных систем не бывает.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Данные поступают на один из серверов кластера. Оттуда они распространяются/реплицируются на остальные серверы кластера. Очевидно, что процесс передачи на другие серверы - не мгновенный, и требует некоторого времени. И столь же очевидно, что если после получения новых данных, но до передачи их в другие серверы кластера исходный сервер сдох, то этих данных не будет на оставшихся серверах, и, как Вы правильно заметили, запросы будут выполняться с устаревшими данными.

И я даже теоретически не могу придумать, как бы хоть какое программное обеспечение могло вывернуться в подобной ситуации. Без катастрофической потери производительности...
Ответ написан
Комментировать
@q2digger
никого не трогаю, починяю примус
добавлю к вышесказанному, что к кластеру баз данных можно поставить чтото типа maxscale впереди и оно само будет разруливать куда отсылать селекты, куда апдейты и дропы и т.п. А так же разводить нагрузку если какая то нода кластера внезапно упала.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы