2016-06-26 2 views
1

Я знаю, что было много статей, написанных о репликации базы данных. Поверьте мне, я потратил некоторое время на чтение этих статей, включая this SO, который объясняет плюсы и минусы репликации. This SO статья идет в глубине о репликации и кластеризации по отдельности, но не отвечает на эти простые вопросы, которые у меня есть:Когда предпочитаете master-slave и когда класть?

  1. Когда вы реплицировать базу данных, и когда вы кластер?
  2. Могут ли оба одновременно выполняться? Если да, то каковы вдохновения для каждого?

Заранее спасибо.

ответ

1

В настоящее время MySQL поддерживает два разных решения для создания среды высокой доступности и достижения масштабируемости на нескольких серверах.

MySQL репликации

Первая форма репликации, который поддерживает MySQL, так как MySQL версии 3.23. Репликация в MySQL в настоящее время реализована как асинхронная настройка ведущего-ведомого, которая использует логический лог-сервер.

Установка «ведущий-ведомый» означает, что один сервер назначен как ведущий. Затем требуется получить все запросы на запись. Затем мастер выполняет и регистрирует запросы, которые затем отправляются подчиненному устройству и, следовательно, сохраняют одни и те же данные во всех членах репликации.

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

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

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

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

Репликация MySQL работает очень хорошо даже при более медленных соединениях и с непрерывными соединениями. Он также может использоваться на разных аппаратных и программных платформах. Можно использовать репликацию с большинством систем хранения, включая MyISAM и InnoDB.

MySQL Cluster

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

MySQL Cluster реализован через отдельный механизм хранения под названием NDB Cluster. Этот механизм хранения автоматически разделяет данные по нескольким узлам данных. Автоматическое разбиение данных позволяет распараллеливать выполняемые запросы. Оба чтения и записи могут быть масштабированы таким образом, поскольку записи могут быть распределены по многим узлам.

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

В настоящее время существует ряд ограничений, которые необходимо учитывать при решении вопроса о том, является ли MySQL Cluster правильным решением для вашей ситуации.

В настоящее время все данные и индексы, хранящиеся в кластере MySQL, хранятся в основной памяти кластера. Это ограничивает размер базы данных на основе систем, используемых в кластере.

MySQL Cluster предназначен для использования во внутренней сети, поскольку задержка очень важна для времени отклика. В результате невозможно запустить один кластер на широком географическом расстоянии. Кроме того, в то время как MySQL Cluster будет работать над настройками товарной сети, для достижения максимальной производительности можно использовать специальные кластерные межсоединения.

+0

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

0
  1. В конфигурации Master-Salve операции записи выполняются мастером и считываются ведомым устройством. Таким образом, все запросы SQL сначала доходят до Мастера, и очередь запросов сохраняется, и операция чтения выполняется только после завершения записи. В конфигурации Master-Salve существует общая проблема, которая также явилась свидетелем того, что когда очередь становится слишком большой, чтобы ее можно было настроить мастером, тогда эта архитектура схлопывается, и подчиненный начинает вести себя как master. Для кластеров я работал над Cassandra, где запрос достигает узла (таблицы), и сохраняется хеш фиксации, который замечает различия, внесенные в узел, и обновляет другие узлы на основе этого хеша. Таким образом, здесь все операции не зависят от одного узла.

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

  1. Мы также можем использовать оба одновременно, я сделал это в своей текущей компании. Мы переместили таблицы с большинством операций записи в Cassandra, и мы написали 4 API для выполнения операции CRUD на таблицах в Cassandra. Как всегда, когда появляется HTTP-запрос, он сначала попадает на наш веб-сервер и из кода, запущенного на нашем веб-сервере, мы можем решить, какая операция должна выполняться (среди CRUD), а затем мы вызываем этот конкретный API для внесения изменений в базу данных cassandra.
Смежные вопросы