1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gitcrazy-cetus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
cetus-sharding.md 26 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 15:50 8feb600

Использование руководства Cetus sharding

Введение

Cetus sharding поддерживает разделение базы данных для серверной части и может распределённо развёртывать большие таблицы по hash/range, что повышает общую производительность и ёмкость системы.

Установка и развёртывание

Подготовка

  1. MySQL:
  • версия 5.7.17 или выше (требуется для распределённых транзакций);
  • дизайн базы данных (разделение на несколько групп);
  • создание пользователя и пароля;
  • подтверждение возможности удалённого подключения Cetus к MySQL.
  1. Cetus:
  • настройка users.json, sharding.json и shard.conf в соответствии с информацией MySQL (подробное описание см. в разделе «Cetus Sharding Profile Configuration File» на GitHub);
  • переменные.json — опционально.
  1. LVS & keepalived:
  • определение IP-адреса и порта прослушивания LVS;
  • распределение веса распределения Cetus в зависимости от фактической ситуации и требований;
  • настройка keepalived.conf.

Установка Cetus поддерживает только Linux и подробно описан в руководстве по установке.

Развёртывание Во время развёртывания Cetus архитектура выглядит следующим образом: Cetus находится между приложением и базой данных MySQL, выступая в качестве интерфейса связи между ними. Приложение подключается к узлу LVS, который перенаправляет запросы на несколько сервисов Cetus, которые, в свою очередь, подключаются к серверной базе данных через пул соединений. MySQL и Cetus могут быть установлены на одном сервере или на разных серверах, но обычно LVS и keepalived размещаются на отдельном сервере от MySQL и Cetus.

Запуск Для запуска Cetus можно использовать bin/cetus:

bin/cetus --defaults-file=conf/shard.conf [--conf-dir=/home/user/cetus_install/conf/]

При запуске Cetus можно добавить параметры командной строки, --defaults-file используется для загрузки файла конфигурации запуска, а перед запуском необходимо убедиться, что права доступа к файлу конфигурации равны 660. --conf-dir является необязательным параметром для загрузки других файлов конфигурации (.json), и по умолчанию используется каталог conf текущего каталога. Cetus может запускать фоновые процессы и автоматически перезапускать их при неожиданном завершении. Эти настройки можно выполнить с помощью параметров запуска.

Проектирование базы данных

Термины

  • Разделение данных: разделение данных таблицы на несколько частей и их размещение на различных узлах данных.
  • Таблица разделения: таблица разделения, которая разделяет данные, принадлежащие одной таблице, на основе правил и размещает их на разных узлах хранения.
  • Ключ разделения: ключ разделения, который используется вместе с правилами разделения для формирования таблицы разделения.
  • Метод разделения: текущий поддерживаемый метод разделения включает hash, range, где hash поддерживает числовые и строковые типы, а range поддерживает числовые, строковые и временные типы (дата/дата и время).
  • Hash разделение: аналогично разделению хэш-сегментов в базе данных. Сначала данные ключа разделения хэшируются, а затем данные хранятся в соответствии с определёнными правилами разделения. Ключ разделения обычно использует числовой тип.
  • Range разделение: подобно разделению диапазона в базе данных, данные ключа разделения разделяются в соответствии с диапазоном, и данные хранятся в соответствии с правилами. Ключ разделения часто использует числовые или временные типы.
  • Глобальная таблица: публичная таблица, данные которой являются общими для всех узлов хранения, и все данные являются полными. Однако данные в глобальной таблице на разных узлах различаются, и если требуется одинаковая глобальная таблица, её необходимо настроить отдельно, например, настроить таблицу conf. VDB1 и VDB2 должны быть настроены отдельно.
  • Одноточечная глобальная таблица: одноточечная глобальная таблица используется, когда операции записи в таблице часты и не подходят для разделения, или когда таблица не связана с другими таблицами разделения или одноточечными глобальными таблицами. Данные этой таблицы хранятся на уникальном узле хранения, и только операции записи для одноточечной глобальной таблицы являются одномашинными транзакциями, без запуска распределённых транзакций, что снижает стоимость транзакции. Недостатком является то, что одноточечная глобальная таблица может быть связана только с глобальной таблицей.
  • VDB: VDB (виртуальная база данных) не является физической базой данных, а представляет собой логическую базу данных, соответствующую таблице разделения. Она представляет данные в бизнес-слое и разделяет данные на основе атрибутов, чтобы сформировать таблицу разделения. Например, данные о заказах и клиентах принадлежат одному и тому же VDB, и клиент может быть разделён на основе идентификатора клиента, а данные о запасах и товарах могут быть помещены в другой VDB. Данные между различными VDB не могут быть связаны, и связь возможна только внутри одного и того же VDB.

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

  • Пользователь VDB (VDB_ACCOUNT): связан с пользовательскими заказами. Ключ разделения: ACCOUNT_ID. TB_ORDER (таблица заказов), TB_ACCOUNT (таблица информации о клиенте), TB_PAY_ORDER (таблица оплаты заказа), TB_CHARGE_ORDER (таблица пополнения заказа), TB_TRANSFER_RECORD (таблица записей перевода), TB_ACTIVITY_RECORD (таблица активности), TB_REFUND_ORDER (таблица возврата заказа).
  • Товар VDB (VDB_PRODUCT): связан с товарами. Ключ разделения: PERIOD_ID. TB_PRODUCT (информация о товаре), TB_PRODUCT_PERIOD (таблица периодов товара).

Основные функции

1. Функция пула соединений В Cetus пул соединений автоматически создаётся при запуске с использованием учётных данных по умолчанию для подключения к серверной части. Параметры базы данных настраиваются администратором базы данных в соответствии с реальной ситуацией. Это гарантирует, что основные бизнес-запросы не требуют временного создания соединения и переключения баз данных. 2. Функция разделения данных Cetus позволяет разделять данные серверной базы данных и распределять их по разным базам данных на основе hash/range. Разделение данных улучшает общую производительность системы и её пропускную способность. Из-за разделения данных целостность данных нарушается, поэтому для обеспечения согласованности результатов запросов необходимо анализировать и переписывать SQL-запросы перед отправкой их в разные серверные базы данных. 3. Обработка распределённых транзакций Если SQL выполняется во время транзакции (start transaction), то по умолчанию будет использоваться распределённая обработка транзакций (если не включена аннотация для запуска одноточечных транзакций). Если транзакция не запущена, SQL отправляется напрямую, и Cetus определяет, следует ли запускать распределённую обработку транзакций во время обработки. 4. Сжатие результатов запроса Сжатие результатов полезно при больших задержках в сети, поскольку оно может значительно сократить время передачи данных и повысить производительность. Чем больше задержка в сети, тем больше преимуществ даёт сжатие результатов. Когда задержка в сети невелика, использование сжатия результатов может привести к снижению производительности из-за дополнительных шагов сжатия и распаковки, поэтому его не рекомендуется использовать в таких случаях. 5. Управление безопасностью Функции управления безопасностью включают управление серверной частью, базовую настройку, просмотр информации о соединении, управление паролями пользователей, управление IP-разрешениями, управление удалённой конфигурацией и общий запрос информации. Пользователи могут войти в систему управления через порт управления и выполнять такие действия, как просмотр состояния серверной части, добавление, удаление и изменение определённых серверных частей, просмотр и изменение базовой конфигурации (включая конфигурацию пула соединений и обнаружение задержки ведомого устройства), просмотр текущей информации о соединениях, запрос и изменение паролей пользователей, подключённых к Cetus, просмотр и добавление/удаление разрешений IP (можно указать разрешённые исходные IP-адреса для каждого пользователя или администратора, но невозможно предоставить разные разрешения для одного и того же пользователя из разных исходных IP-адресов), перезагрузка удалённой конфигурации и запрос общей информации о состоянии Cetus и т. д. Подробные инструкции по управлению см. в «Руководстве по администрированию Cetus Sharding». 6. Мониторинг состояния Cetus имеет встроенную функцию мониторинга, которую можно включить или отключить с помощью конфигурации. После включения Cetus периодически связывается с серверной частью для проверки состояния серверной части и основной/ведомой задержки. Состояние серверной части можно просмотреть, выполнив SELECT * FROM backends через порт управления. Состояние серверной части включает unknown (начальное состояние серверной части до установления соединения), up (нормальное соединение с серверной частью и предоставление услуг), down (невозможно установить соединение с серверной частью), maintaining (серверная часть находится в обслуживании и соединение не может быть установлено) и delete (серверная часть была удалена). Основная/ведомая задержка обнаружения проверяет значения порогов slave-delay-down и slave-delay-recover. Если основная/ведомая задержка превышает slave-delay-down, состояние серверной части устанавливается в DOWN. Если основная/ведомая задержка меньше slave-delay-recover, состояние серверной части восстанавливается до UP. 7. TCP потоковая передача Потоковая передача TCP полезна при обработке больших объёмов данных, поскольку она может уменьшить нагрузку на память и улучшить производительность. Ограничения DML-операторов:

  • Update/Delete поддерживают подзапросы, но в подзапросах не должно быть вложенности (только для фрагментированных таблиц);
  • Не поддерживают обновление столбцов, которые являются ключом фрагментации (только для фрагментированных таблиц);
  • Insert требует указания полного имени столбца, например: insert into a(col1,col2) values(xx,xx);
  • Insert не поддерживает подзапросы. Однако при наличии особых бизнес-потребностей можно использовать комментарии (только для фрагментированных таблиц, см. раздел «Комментарии»);
  • Insert поддерживает многозначные операторы, например: insert into a(col1, col2) values (x, x), (xx, xx);
  • Поддерживают синтаксис replace into/insert on duplicate key.

Типы ключей фрагментации

Столбцы, используемые для фрагментации, могут быть типа int или char. Тип int соответствует различным типам целых чисел в MySQL, а тип char — различным типам строк фиксированной и переменной длины. Если в SQL обрабатывать даты как строки, то они также будут поддерживаться. В будущем будет поддерживаться определённый формат представления времени в виде символьных типов, таких как YYYY-MM-DD и YYYY-MM-DD HH24:MI:SS. Формат времени не поддерживает преобразование часовых поясов и использует местное время.

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

Формат комментария: /*# key=value */.

Он начинается с символов /*#, где символы # и * не должны разделяться пробелами, и заканчивается символами */. Значения записываются в формате ключ-значение. Если значение содержит какие-либо специальные символы, кроме [a-zA-Z0-9_-.], то оно должно быть заключено в двойные кавычки. Значения ключа и значения могут быть записаны в любом регистре, но рекомендуется использовать нижний регистр.

Поддерживаемые ключи для версии с фрагментацией: table|group|mode|transaction. Поддерживаемые значения включают all/readwrite/readonly/single_node.

Примечание: если вы используете комментарии, добавьте параметр -c при подключении к Cetus, например, mysql --prompt="proxy> " --comments -hxxx.xxx.xxx.xxx -Pxxxx -uxxxx -pxxx -c.

Примеры использования функции комментариев:

  1. Использование ключа table: /*#table=employee*/ SQL: select /*# table=employee key=123*/emp_no, emp_name from employee; Объяснение: SQL будет направлен на фрагмент, где находится ключ 123, для выполнения.

  2. Использование ключа group: /*# group=dataA*/ SQL: select /*# group=dataA */ count(*) from employee; Объяснение: подсчитывает количество записей в таблице employee на узле dataA.

  3. Использование ключа mode: /*# mode=readwrite */ SQL: select /*# mode=readwrite */ count(*) fromemployee; Объяснение: этот запрос будет выполнен на основном сервере вместо подчинённого сервера по умолчанию.

  4. Использование ключа transaction: /*# transaction=single_node */ SQL: update /*# transaction=single_node */ departmentsset dept_name='ecbj' where dept_no='d010'; Объяснение: эта команда DML будет выполняться как нераспределённая транзакция. Если Cetus определит, что должна использоваться распределённая транзакция, он вернёт ошибку.

  5. Комбинированное использование: /*# table=employee key=123*/ /*#mode=readwrite*/ SQL: select /*# table=employee key=123*/ /*#mode=readwrite*/ emp_no,emp_name from employee; Объяснение: направляет SQL на фрагмент с ключом 123 для выполнения и принудительно выполняет чтение с основного сервера этого фрагмента.

Обратите внимание, что ключи table и group являются взаимоисключающими, то есть можно использовать либо table, либо group, но не оба одновременно, иначе будет возвращена ошибка. Кроме того, комментарий должен быть помещён после первого ключевого слова. Как только используется комментарий, его приоритет выше, чем у последующих условий where (если таковые имеются) в информации о маршрутизации разделов.

Пример применения Cetus:

Подключение к Cetus: $ mysql --prompt="proxy> " --comments -h**...** -P**** -u**** -p*** proxy>

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

Управление Cetus: $ mysql --prompt="admin> " --comments -h**...** -P**** -u**** -p*** admin> show connectionist;

Используйте имя пользователя и пароль admin, указанные в файле конфигурации, для входа в MySQL для управления Cetus. Адрес администратора — это адрес MySQL, указанный в admin-address. Например, чтобы просмотреть подробную информацию о соединениях Cetus, можно выполнить команду show connectionlist, которая покажет сопоставление портов между передним и задним концами, а также связанную информацию xa.

Для получения более подробной информации см. руководство по управлению версией Cetus для сегментирования (sharding).

Просмотр параметров Cetus: $ cd /home/user/cetus_install/ bin/cetus --help | -h

Можно просмотреть справку и получить параметры запуска и их значения для Cetus.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/gitcrazy-cetus.git
git@api.gitlife.ru:oschina-mirror/gitcrazy-cetus.git
oschina-mirror
gitcrazy-cetus
gitcrazy-cetus
master