MySQL Cluster

Как вы уже знаете, вообще-то это Oracle MySQL Cluster. Вот мне и стало интересно, а зачем Oracle два кластера, ведь у нас уже есть Real Application Cluster ? Попробуем разобраться. Вся документация доступна на сайте mysql.com, правда для этого необходимо зарегистрироваться.




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





Мы приходим в выводу, что есть узлы, содержащие данные (Data Nodes)  и есть центральный сервер (MySQL server) который способен обращаться за данными сразу к нескольким Data Nodes.

В случае гибели одной из DataNodes у нас есть копия данных на другой DataNodes.  Обещают, что даже можно добавлять Data Nodes не останавливая кластер. При этом часть данных будет перераспределяться на новый узел.



Как вы очевидно знаете из предыдущих 700 сообщений в этом блоге, Oracle RAC содержит централизованное хранилище данных. К хранилищу можно подключать новые узлы, и так как хранилище центральное перераспределять ничего не надо. Кстати, можно и добавлять диски, вот тогда уровень Automatic Storage Management (ASM) и начнет перебалансировку данных между физическими дисками. Еще один важный уровень который отсутствует в MySQL - Cache Fusion, возможность читать блоки данных  с любого узла кластера, напрямую из памяти другого узла.


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



Вместо заключения: Весьма полнофункциональное кластерное ПО, правда требует определенного подхода к построению систем.  Ключевая фраза, из "Optimizing Perfomance of the MySQL Database" :  Simple access patterns are key to building scalable and high performing solutions. MySQL Весьма широко используется в мире.




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

PS Я бы конечно, если говорить про архитектуру, сделал бы центральную БД на Oracle RAC, а вот дальше поставил бы столько копий на MySQL, сколько мне нужно для обеспечения производительности...

1 комментарий:

  1. всё даже не так плохо, как вы описали, Дмитрий
    всё - хуже

    пару лет назад я тестировал MySQL Cluster версии 5 (отчет можно найти на сайте битрикса), выводы:
    требовалось хранить все данные и индексы в ОЗУ на кажном из Data Nodes (в новой версии данные можно хранить на диске, но вряд ли это ускорило работу)
    скорость обработки типовых запросов падает на порядок и более (по сравнению с некластерными конфигурациями) при использовании 1GB Ethernet в качестве interconnect, производитель рекомендует использовать Infiniband и SCI

    Судя по тому, что по-прежнему используется "shared nothing" технология кластеризации и есть жуткие ограничения на "сложность" запросов, MySQL Cluster 7 нужно по крайней мере тщательно тестировать ;)

    P.S.кроме Data Nodes и MySQL servers потребуются ещё и Management Nodes, т.е. количество "железа" растёт в прогрессии

    ОтветитьУдалить