23
Архитектура MySQL Cluster Григорий Рубцов MySQL AB / Sun Microsystems

Архитектура MySQL Cluster

  • Upload
    jackie

  • View
    71

  • Download
    2

Embed Size (px)

DESCRIPTION

Архитектура MySQL Cluster. Григорий Рубцов MySQL AB / Sun Microsystems. План доклада. Архитектура Отказоустойчивость Производительность плюсы минусы Практика. Приобретение MySQL компанией Sun. Сделка завершилась в 2008 году - PowerPoint PPT Presentation

Citation preview

Page 1: Архитектура  MySQL Cluster

Архитектура MySQL Cluster

Григорий Рубцов

MySQL AB / Sun Microsystems

Page 2: Архитектура  MySQL Cluster

План доклада• Архитектура• Отказоустойчивость• Производительность

– плюсы– минусы

• Практика

Page 3: Архитектура  MySQL Cluster

Приобретение MySQL компанией Sun• Сделка завершилась в 2008 году• Sun и MySQL совместными усилиями сделают продукты и услуги

ближе к заказчику.– Корпоративная поддержка 24x7x365 географически ближе– Больше поддерживаемых платформ– Профессиональные услуги и обучение в России

• Обе компании твердо стоят на позициях Open Source

Миссия Sun/MySQL: Сделать доступную каждому

высококлассную СУБД.

Page 4: Архитектура  MySQL Cluster

Архитектура сервера MySQL

Page 5: Архитектура  MySQL Cluster

Общая архитектура кластера

Page 6: Архитектура  MySQL Cluster

Особенности архитектуры:• Избыточность

– Данных NoOfReplicas (min: 2)– SQL-нод– mgm-нод (управляющих нод)

• Разбиение данных– число долей равно числу дата-нод– критерий разбиения – первичный хэш-индекс таблицы

• “Shared nothing”, общая только сеть• Транзакционность ( READ_COMMITTED )

Page 7: Архитектура  MySQL Cluster

Лицензия• Две формы издания

– Community, 100% GPL– Enterprise, коммерческий продукт с поддержкой

(MySQL Cluster Carrier Grade Edition)• Исходный код общий• MySQL Cluster 6.2 можно скачать, 6.2 - это версия

ndb (не связана с MySQL 6)

Page 8: Архитектура  MySQL Cluster

Открытый NDB API

• Позволяет обойти SQL-сервер или самому им быть

• http://dev.mysql.com/doc/ndbapi/en/

Page 9: Архитектура  MySQL Cluster

NDB API (пример)NdbOperation *myOperation

= myTransaction->getNdbOperation(myTable);if (myOperation == NULL)

APIERROR(myTransaction->getNdbError());

myOperation->insertTuple();myOperation->equal("ATTR1", i);myOperation->setValue("ATTR2", i);if (myTransaction->execute( NdbTransaction::Commit ) == -1)

APIERROR(myTransaction->getNdbError());

Page 10: Архитектура  MySQL Cluster

Хранение данных• Фрагментация по первичному хэш-индексу• Хранение в памяти и на диске (с версии 5.1)• B-tree индексы – отдельные таблицы – также

фрагментируются• До 48 дата-нод• Сеть должна быть быстрой (гигабит)• Все соединения между нодами без

авторизации и без шифрования

Page 11: Архитектура  MySQL Cluster

6 нод, NoOfReplicas=2

Page 12: Архитектура  MySQL Cluster

Отказоустойчивость• Возможность резервирования всего

– отсутствие единой точки отказа

• Не забудьте про резервирование сети– два свича, по 2 сетевых карты

• Географическая распределенность:– репликация кластеров

• Автоматическое восстановление дата-ноды

Page 13: Архитектура  MySQL Cluster
Page 14: Архитектура  MySQL Cluster

Арбитраж• Фрагментация кластера может привести к

двум потенциально работоспособным частям.• «Split brain» - это плохо!• Для этого есть арбитр (mgm или sql-нода)

– выборы арбитра только после того, как все алгоритмы арбитража отработали

– ArbitratorRank=0 (never), 1 (high), 2 (low)– при равном ArbitrationRank, min(nodeid)

Page 15: Архитектура  MySQL Cluster

Алгоритм арбитража1. Вижу ли я по крайней мере одну дата-ноду из каждой группы?

– нет – выключиться– да – продолжить алгоритм

2. Есть ли среди отключившихся дата-нод по одной ноде из каждой группы?

– нет – продолжить работу (вторая часть выключится по правилу 1)– да – продолжить алгоритм.

3. Спросить арбитра.– арбитр недоступен – выключиться.– арбитр доступен, узнать присутствую ли я в текущей конфигурации?

• нет – выключиться• да – продолжить работу

Page 16: Архитектура  MySQL Cluster

Производительность• Дата-нода осуществляет выборку данных и поиск по

btree-индексу в своем фрагменте• Условие WHERE может выполняться на дата-ноде• SET engine_condition_pushdown=1;

– только сравнения с константами• age>27 OK

• (age – 27) > 0 плохо

• Используйте EXPLAIN EXTENDED + SHOW WARNINGS

Page 17: Архитектура  MySQL Cluster

Производительность• Выполняются на SQL-ноде:

– WHERE, когда не работает pushdown– ORDER BY– JOIN– Подзапросы

• Простые запросы – быстро и эффективно• Не все составные запросы одинаково полезны• Нельзя вслепую заменить MyISAM на NDB

Page 18: Архитектура  MySQL Cluster

Практика применения• Alcatel-Lucent

– 60млн абонентов, аутентификация, управление данными

• neckermann.de– 500к уникальных посетителей в день

• Paggo– 25к транзакций в день, 25млн$/мес, мобильные платежи

• M1– 1млн абонентов мобильной связи, Сингапур

• здесь могла быть ваша реклама

Page 19: Архитектура  MySQL Cluster

Почта University of California Berkeley• 70,000 аккаунтов в 39 доменах • 20,000 рассылок, 1.1 миллион подписчиков• 4 миллиона сообщений в день• 1 миллион принятых сообщений в день• 120 поступающих сообщений в секунду• Акаунты, рассылки, greylisting и др.

• http://www.mysql.com/customers/customer.php?id=497

Page 20: Архитектура  MySQL Cluster

Конфигурация (Berkeley)• 10 машин с Cyrus (4 Гб ОЗУ)• На этих же машинах дата-ноды

– данные в памяти с бэкапом на диск• sql-ноды на других машинах

MYSQL_ACCOUNT_QUERY = ${lookup mysql \{select a.* from calmail.account a, \calmail.domain d \ where \ a.domain_id=d.id and \a.localpart='${quote_mysql:$local_part}' and \d.name='${quote_mysql:$domain}' and \a.state='active';}}

cyrus: verify = false driver = manualroute transport = cyrus_lmtp route_data = ${extract{host}{MYSQL_ACCOUNT_QUERY}{$value}fail}

Page 21: Архитектура  MySQL Cluster

Конфигурация кластера (Berkeley)ndb_mgm> showConnected to Management Server at: 192.168.1.15:1186Cluster Configuration---------------------[ndbd(NDB)] 10 node(s)id=1 @192.168.3.1 (Version: 5.0.30, Nodegroup: 0)id=2 @192.168.3.2 (Version: 5.0.30, Nodegroup: 0)id=3 @192.168.3.3 (Version: 5.0.30, Nodegroup: 1)id=4 @192.168.3.4 (Version: 5.0.30, Nodegroup: 1, Master)id=5 @192.168.3.5 (Version: 5.0.30, Nodegroup: 2)id=6 @192.168.3.6 (Version: 5.0.30, Nodegroup: 2)id=7 @192.168.3.7 (Version: 5.0.30, Nodegroup: 3)id=8 @192.168.3.8 (Version: 5.0.30, Nodegroup: 3)id=9 @192.168.3.9 (Version: 5.0.30, Nodegroup: 4)id=10 @192.168.3.10 (Version: 5.0.30, Nodegroup: 4)

[ndb_mgmd(MGM)] 2 node(s)id=41 @192.168.1.15 (Version: 5.0.30)id=42 @192.168.1.70 (Version: 5.0.30)

[mysqld(API)] 15 node(s)id=21 @192.168.1.15 (Version: 5.0.30)id=22 @192.168.1.70 (Version: 5.0.30)id=23 @192.168.1.20 (Version: 5.0.30)id=24 @192.168.1.65 (Version: 5.0.30)id=25 @192.168.1.75 (Version: 5.0.30)id=26 @192.168.1.85 (Version: 5.0.30)id=31 @192.168.2.20 (Version: 5.0.30)id=32 @192.168.2.22 (Version: 5.0.30)id=33 @192.168.2.24 (Version: 5.0.30)id=34 @192.168.2.29 (Version: 5.0.30)id=37 @192.168.1.93 (Version: 5.0.30)id=39 @192.168.1.80 (Version: 5.0.30)id=61 @192.168.2.10 (Version: 5.0.30)id=62 @192.168.2.12 (Version: 5.0.30)id=63 @192.168.2.14 (Version: 5.0.30)

Page 22: Архитектура  MySQL Cluster

Особенности (Berkeley)• set ipn = inet_aton(in_ip_addr);

– 4 байта, а не 15• не используем блобы

– они приводят к неявному созданию скрытой вспомогательной таблицы

• избегаем ENUM– изменение ENUM – ALTER TABLE, что приводит к простою

• Не было незапланированного даунтайма за год работы• Может масштабироваться до нагрузок в 500 раз

превышающих текущие

Page 23: Архитектура  MySQL Cluster

Заключение

• Кластером нельзя забивать гвозди!

• Пишите: [email protected], http://sqlinfo.ru/forum/