PHP / PDO MariaDB Galera Cluster

Я нахожусь на завершающей стадии настройки службы, доступной из четырех глобальных местоположений (с планами добавить более позднее). Я буду запускать серверы в ящике Ubuntu 12.04 с MariaDB. Моя первоначальная мысль заключалась в том, чтобы создавать серверы, которые работают независимо друг от друга с 4 различными базами данных и живут с ограничением, что пользователи смогут только войти на сервер, где они были первоначально зарегистрированы.

Тем не менее, я просто столкнулся с этой статьей , которая заставила меня задуматься ….

Из моего чтения вещей, если я настроил кластер Galera с репликацией master-master, как это предлагается в статье, я могу перемещаться, имея роскошь одной большой базы данных, которая постоянно доступна на всех четырех серверах. Я собрал (и надеюсь), что при правильной работе и настройке clusetr мне не нужно ничего делать в моем PHP-коде (четыре экземпляра MariaDB будут иметь одного и того же пользователя для доступа к базе данных) – даже не изменяйте строку соединения PDO ,

Однако это звучит слишком хорошо, чтобы быть правдой. Вопросов –

  • Существуют ли другие проблемы, связанные с осложнениями?
  • Нужно ли изменять строки подключения PHP PDO в будущем?
  • Является ли тот факт, что мое приложение уже структурировано для обеспечения абсолютно нулевой вероятности того, что два сервера попытаются одновременно написать одну и ту же подсказку?
  • И, наконец, чтение из документов MariaDB , что это не будет работать с движком хранения TokuDB?
  • Есть ли способ специально остановить репликацию выбранной таблицы? Могу ли я на самом деле использовать ограничение «только InnoDB / XtraDB» и использовать другой механизм хранения в таблице, которую я не хочу реплицировать?

Я бы очень признателен за любую помощь

Существуют ли другие проблемы, связанные с осложнениями?

Есть некоторые известные ограничения, о которых вы должны знать. Как правило, с помощью кластеров в идеале вы должны иметь нечетное число узлов, чтобы предотвратить разделенные мозговые условия, но четное число обычно будет работать так же хорошо.

Нужно ли изменять строки подключения PHP PDO в будущем?

Нет. Ваши существующие строки подключения должны работать.

Является ли тот факт, что мое приложение уже структурировано для обеспечения абсолютно нулевой вероятности того, что два сервера попытаются одновременно написать одну и ту же подсказку?

Посмотрите на известные ограничения и убедитесь, что ваше приложение все равно это сделает. Если вы используете именованные блокировки, вам нужно будет изменить свое приложение.

И, наконец, чтение из документов MariaDB, что это не будет работать с движком хранения TokuDB?

Поддержка TokuDB была добавлена ​​в недавнем распределении кластеров galera. Я использовал некоторые, и он реплицируется так же, как InnoDB, но я бы не стал полагаться на него, поскольку он является новым в сборке galera cluster.

Есть ли способ специально остановить репликацию выбранной таблицы? Могу ли я на самом деле использовать ограничение «только InnoDB / XtraDB» и использовать другой механизм хранения в таблице, которую я не хочу реплицировать?

Я слышал, что многие люди спрашивают, могут ли они пропускать таблицы или базы данных из репликации, но я до сих пор не слышал веских причин. Репликация Galera обеспечивает HA и дешева и проста, поэтому даже если некоторые таблицы не важны, я не могу найти реальной причины не копировать данные. При этом у вас могут быть данные, не реплицируемые с помощью MyISAM / Aria.

Я использую MariaDB с galera в нескольких проектах с умеренным размером, и это лучшее решение, которое я нашел для HA, а также дает преимущества производительности. Другие решения обычно дорогие или не зрелые. Вы должны подумать о настройке прокси для подключения к серверам баз данных, таким как HA Proxy, mysql-proxy или glbd (который я использую), чтобы обеспечить лучшую избыточность и балансировку соединений для производительности.


В ответ на комментарий DroidOS ниже:

  1. Каждая запись в кластере должна быть согласована каждым узлом, поэтому любая латентность между узлами добавляется к каждой записи. Таким образом, в принципе, каждая запись будет иметь наибольшее время прохождения между сервером записи и другими добавленными к нему узлами.

  2. Нет. Репликация Galera – это все или ничего во всем кластере. Если какой-либо узел имеет проблемы с записью данных, что может произойти, если таблица не имеет первичного ключа, узел будет изящно убивать себя, поскольку он не может гарантировать, что его данные согласуются с остальной частью кластера. Если это произойдет, остальная часть кластера будет продолжать работать нормально. Если есть проблема с сетью, если один из сегментов имеет кворум, он будет продолжать работать нормально. Любые сегменты без кворума будут ожидать большего количества узлов, чтобы получить кворум, но не будут принимать запросы. При таком поведении вы можете быть уверены, что любой узел, который вы можете запросить, согласуется с остальной частью кластера.

Учитывая, что это оказалось таким популярным вопросом, я подумал, что должен добавить дополнительный ответ в виде комментария для всех, кто сталкивается с ним.

Большая проблема с синхронной репликацией – это латентность, введенная процессом. Разумеется, будут случаи, когда требуется синхронная репликация, а латентность должна управляться, а затем жить. Тем не менее, вы можете подумать – как я понял – вы понимаете, что можете жить с ленивой репликацией. Есть коммерческие решения, которые доставляют это, хотя и при высокой пошлине. У вас также есть возможность открутить собственное решение – проще, чем вы думаете.