Масштабирование решений для MySQL (Репликация, Кластеризация)

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

80
задан Eran Galperin 25 April 2012 в 10:02
поделиться

8 ответов

Я делал БОЛЬШОЕ чтение на доступных параметрах. Я также достал MySQL High Performance 2-й выпуск, который я настоятельно рекомендую.

Это - то, что мне удалось соединить:

Кластеризация

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

MySQL NDB Cluster MySQL NDB Cluster

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

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

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

Секвойя Continuent

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

я считал [приблизительно 110] хорошие вещи на нем, и в целом это звучит довольно многообещающим.

Федерация

Федерация подобна кластеризации, таким образом, я тащил его здесь также. MySQL предлагает федерацию через федеративный механизм устройства хранения данных. Подобный кластерному решению NDB, это работает хорошо с простыми запросами только - но еще хуже кластер для сложных (так как сетевая задержка намного выше).

Репликация и выравнивание нагрузки

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

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

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

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

Sharding и partioning

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

существуют платформы абстракции, доступные, чтобы помочь иметь дело с данными sharding, такой, поскольку В спящем режиме Черепки , расширение Того, чтобы быть в спящем режиме ORM (который, к сожалению, находится в Java. Я использую PHP). HiveDB является другим таким решением, которое также поддерживает изменение баланса черепка.

Другие

Сфинкс

Сфинкс является механизмом полнотекстового поиска, который может использоваться для намного больше, чем тестовые поиски. Для многих запросов это намного быстрее, чем MySQL (специально для группировки и сортировки), и может запросить удаленные системы параллельно и агрегировать результаты - которые делают его очень полезным используемый с sharding.

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

Сводка

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

я также собираюсь дать выстрел Секвойе Continuent и видеть, может ли она действительно сделать то, что она обещает тому, так как она включит наименьшее количество количества изменений в коде приложения.

100
ответ дан Eran Galperin 24 November 2019 в 09:59
поделиться

Правовая оговорка: Я не использовал MySQL Cluster, таким образом, я только иду от того, что я услышал.

MySQL Cluster является HA (высокая доступность) решение. Это быстро, потому что это - все в памяти, но это - реальный коммерческий аргумент, доступность. Нет никакой единой точки отказа. С репликацией, с другой стороны, если ведущее устройство спускается, необходимо на самом деле переключиться на копию, и может быть небольшое количество времени простоя. (хотя решением DRBD является другая альтернатива, которая имеет высокую доступность)

, Кластер требует, чтобы Ваша вся база данных уместилась в памяти. Это означает, что каждая машина в кластере должна иметь достаточно памяти для хранения всей базы данных. Таким образом, это не выполнимое решение для очень больших баз данных (или по крайней мере это - очень дорогое решение).

я думаю это, если HA не супер важен (чтение: вероятно, не), это - больше стычки (и деньги), чем это стоит. Репликация является чаще лучшим способом пойти.

Редактирование: я забыл упоминать также, что Кластер не позволяет внешние ключи и располагается, сканирования медленнее, чем на других механизмах. Вот ссылка, которая говорит [приблизительно 110] Известные Ограничения MySQL Cluster

12
ответ дан nathan 24 November 2019 в 09:59
поделиться

Существуют некоторые хорошие дискуссии о том, как люди, которые поддерживают drupal.org, структурировали свои серверы баз данных:

WorkHabits Оба с 2007, таким образом, Кластеризирующаяся поддержка может быть более сильной теперь, но в то время, когда они выбрали репликацию.

4
ответ дан acrosman 24 November 2019 в 09:59
поделиться

Прохладная вещь о выполнении репликации состоит в том, что это легко. Просто настройте 2 mysql поля, измените serverID на втором поле, и затем укажите на второе поле на первое использование ведущего устройства изменения для управления.

Вот является соответствующее демонстрационное ведомое устройство my.cnf конфигурацией

#
#       Log names
#

log-bin=binlog
relay-log=relaylog
log-error=errors.log

#
#       Log tuning
#

sync_binlog = 1
binlog_cache_size = 1M

#
#       Replication rules (what are we interested in listening for...)
#
#       In our replicants, we are interested in ANYTHING that isn't a permission table thing
#

replicate-ignore-db =      mysql
replicate-wild-ignore-table=mysql.%

#
#       Replication server ID
#

server-id      =        2

, Так удостоверьтесь, что каждое ведомое устройство увеличило serverID 1 (поэтому следующее ведомое устройство является сервером 3)

, настраивает имя пользователя и пароль, который ведомое устройство может соединить на, Затем выполнить ведущее устройство изменения к MASTER_HOST = 'x.x.x.x'; измените ведущее устройство на MASTER_PASSWORD = "xxxxx";

и так далее.

наконец, выполненный "запускают ведомое устройство";

прибывает Ваше ведомое устройство и начинает копировать. сладкий ха!

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

можно проверить ведомое состояние путем выполнения:

выставочное ведомое состояние \G

Весело проводят время с ним.. легкий soooo...

2
ответ дан Zak 24 November 2019 в 09:59
поделиться

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

0
ответ дан Javier 24 November 2019 в 09:59
поделиться

"В памяти" ограничение препятствует тому, чтобы мы использовали кластер MySQL для наших почти 50 ГБ данных, таким образом, мы используем DRBD плюс linux Heartbeat.

Это отчасти похоже на массив RAID между два (или больше) поля, который сохраняет базы данных / журналы / конфигурации в синхронизации (но только один сервер может быть "живым" за один раз). Обработка отказа является автоматической, использует тот же IP-адрес и является быстрой как перезапуск mysql, таким образом, это было хорошим решением для нас.

0
ответ дан Brent 24 November 2019 в 09:59
поделиться

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

Его ужасно сложно настроить (вам нужно как минимум три узла, возможно, Больше). Кроме того, нет никаких условий для переключения клиентов при отказе, поэтому вы должны сделать это самостоятельно (или использовать что-то еще в качестве прокси-сервера и т. Д.).

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

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

0
ответ дан 24 November 2019 в 09:59
поделиться

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

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

С разными модами по управлению транзакциями, предоставляемыми DRBD, вы можете одними, что уменьшило производительность, пострадавшего от репликации данных на уровне устройства по сети. Для надежной системы, которая не должна терять какую-либо транзакцию в случае сбоя, используя режим C, иначе пойти на B.

Я пытался перечислить некоторые из учащихся, которые я сделал во время настройки кластера DRBD в http: // www .techiegyan.com /? p = 132

Это очень хорошо работает на выделенном соединении для репликации, то есть резервных отдельных высокоскоростных интерфейсов на обоих машинах только для репликации DRBD. Сердцебиение может хорошо контролировать кластер со всеми службами один за другим I.e. IP-адреса, разделы, DRBD и MySQL.

Мне еще не обнаружить конфигурацию мастера-магистра на DRBD. Будет обновляться как и когда я получаю успех в этом.

Спасибо.

1
ответ дан 24 November 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: