Как разделить Mysql между НЕСКОЛЬКИМИ СЕРВЕРАМИ? - PullRequest
19 голосов
/ 23 октября 2009

Я знаю, что горизонтальное разбиение ... вы можете создавать много таблиц.

Как вы можете сделать это с несколькими серверами? Это позволит Mysql масштабироваться.

Создать X таблиц на X серверах?

Кто-нибудь хочет объяснить, или есть хороший учебник для начинающих (шаг за шагом), который учит вас, как разделить на несколько серверов?

Ответы [ 3 ]

23 голосов
/ 25 октября 2009

С MySQL люди обычно делают то, что называется основанным на приложениях шардингом .

В двух словах, у вас будет одна и та же база данных структура на нескольких серверах баз данных. Но он не будет содержать те же данные.

Так, например:

Users 1 - 10000: server A
Users 10001 - 20000: server B

Раздробление (конечно) не является техникой резервного копирования, оно предназначено для распределения операций чтения и записи по кластеру.

Методы, используемые для шардинга, например, MySQL-Proxy. Это не то, что придумал HScale, это более или менее простой сценарий LUA, который распределяет операции чтения и записи на разные серверы. В кузнице MySQL должно быть много примеров.

Другим инструментом (на основе MySQL Proxy) является SpockProxy . Полностью с учетом шардинга. Они также избавились от Lua и работали над различными вещами, чтобы сделать его быстрее, чем прокси. До сих пор я только тестировал SpockProxy, но никогда не запускал его в работе.

Теперь, кроме этих прокси, вы также можете осквернять себя. Требуется главная таблица, например ::1022*

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------

Затем создайте ваши операции чтения и записи на сервере. Не очень красиво, но это работает. Следующим препятствием было бы сделать его более терпимым. Так, например, server1, server2 и server3 каждый должен быть небольшим кластером.

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

Дайте мне знать, если это поможет!

4 голосов
/ 23 апреля 2011

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

  1. Вы вошли в систему, и БД была выбрана (своп БД) на основе таблицы организации пользователя
  2. Это будет новый мастер-стол, с которым вы сейчас разговариваете, с его собственными рабами
  3. Но пункт 2 выше также нуждается в разделении, поскольку вы хотите убедиться, что масштабирование не станет узким местом.

Так что теперь вопрос в том, что вам, вероятно, нужно подумать, как вы можете сделать это разделение в среде en-mster-slave, где slaves обычно предназначены для чтения и master для записи.

ура! Gary

0 голосов
/ 23 октября 2009

Вот что написано в объявлении HSCALE 0.1:

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

Посмотрите на этот проект: http://sourceforge.net/projects/hscale/ возможно, он подойдет вам.

...