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

OSCHINA-MIRROR/sgoby-myhub

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:10 982742c

MyHub: введение

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

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

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

Пожалуйста, получите последнюю версию установочного пакета RPM со страницы релизов.

Основы:

  • соответствует собственному протоколу MySQL и поддерживает кросс-языки;
  • поддерживает пул соединений MySQL, нет необходимости каждый раз создавать новое соединение;
  • поддерживает несколько «Slave», балансировку нагрузки между «Slave»;
  • поддерживает разделение чтения и записи (необходимо настроить автоматическую синхронизацию данных мастер-ведомого MySQL);
  • поддерживает конфигурацию мультиарендности;
  • поддерживает горячую загрузку файла конфигурации (только для режима установки RPM, измените файл конфигурации, чтобы он вступил в силу с помощью команды «myhub reload»);
  • поддерживает функцию «Prepare»;
  • поддерживает максимальный лимит подключений к серверной БД;
  • поддерживает вывод журнала SQL и медленного журнала;
  • поддерживает белый список IP-адресов клиентов;
  • поддерживает механизм чёрного списка SQL;
  • поддерживает настройки кодировки;
  • поддерживает last_insert_id;
  • поддерживает команду MySQL: show databases, show tables.

Фрагментация:

  • поддерживает сегментацию по хешу и диапазону с использованием целых чисел;
  • поддерживает фрагментацию по дате с использованием года, месяца и дня;
  • поддерживает кросс-узловые подтаблицы, подтаблицы могут быть распределены по разным узлам;
  • поддерживает выполнение агрегатных функций count, sum, max и min на кросс-узлах;
  • поддерживает операцию соединения одной подтаблицы с другой отдельной таблицей и на одном и том же узле базы данных;
  • поддерживает операции cross-node: (order by, group by, limit);
  • поддерживает распределённые транзакции (низкий XA);
  • поддерживает прямой прокси и переадресацию базы данных;
  • поддерживает (вставку, удаление, обновление, замену) в таблицы нескольких узлов;
  • поддерживает автоматическое создание подтаблиц на нескольких узлах;
  • поддерживает первичный ключ ID с автоинкрементом, также поддерживает распределённый уникальный идентификатор Twitter Snowflake, просто измените тип поля AUTO_INCREMENT на «bigint».

Установка:

RPM-установка:

Сборка и установка:

  • установите Golang и Git;
  • установка на Linux (build_linux.sh):
    • dir=pwd;
    • git clone https://github.com/sgoby/myhub src/github.com/sgoby/myhub;
    • export GOPATH=$dir;
    • echo $GOPATH;
    • go build -o bin/myhub src/github.com/sgoby/myhub/cmd/myhub/main.go;
    • echo Congratulations. Build success!;
  • установка в Windows (build_windows.bat):
    • git clone https://://github.com/sgoby/myhub src/github.com/sgoby/myhub;
    • set dir=%cd%;
    • set GOPATH=%GOPATH%;%dir%;
    • go build -o bin/myhub.exe src/github.com/sgoby/myhub/cmd/myhub/main.go;
    • echo Congratulations. Build success!.

Конфигурация MyHub

Основы:

  • аргументы запуска:
    • -cnf путь к конфигурационному файлу, по умолчанию: conf/myhub.xml, например: myhub.exe -cnf conf/myhub.xml;
    • serveListen — хост и порт слушателя MyHub, по умолчанию 8520;
    • workerProcesses — количество рабочих процессов, по умолчанию 0 означает использование количества ядер ЦП;
    • maxConnections — максимальное количество подключённых клиентов Myhub, по умолчанию 2048.

Журнал:

  • logPath — каталог вывода журнала. По умолчанию: logs;
  • logLevel — уровень журнала. Пользователи:
<users>
    <!-- db1,db2,ip1,ip2 * означает любую базу данных или IP -->
    <user name="root" passwrod="123456" charset="utf-8" db="db1" ip="*"/>
</users>

Описание:

  • 'name' представляет имя пользователя клиента для подключения к Myhub.
  • 'passwrod' представляет пароль клиента для подключения к Myhub.
  • 'charset' представляет кодировку клиента для подключения к Myhub. По умолчанию: UTF-8.
  • 'db' представляет схему базы данных, которую может использовать пользователь, несколько значений разделяются ','. Например: 'db1', 'db2', '*' представляет все. По умолчанию: *.
  • 'ip' представляет разрешённый IP-адрес клиента для подключения к Myhub, поддерживает любое соответствие шаблону '', несколько значений разделены ','; например: '192.168.1.20', '192.168.2.', по умолчанию: '127.0.0.1'.

Узлы:

Добавить узел Mysql на Myhub.

<node>
    <hosts>
        <!-- только для записи (master) --->
        <host type="write" name="host_1" address="127.0.0.1:3306" user="root" password="123456">
            <!-- только для чтения (slave) --->
            <!-- <host type="read" name="host_1_1"  address = "192.168.31.231:3306" user = "root" password = "123456" weight="1"/> -->
        </host>
        <host type="write" name="host_2" address="192.168.31.231:3306" user="root" password="123456"/>
    </hosts>
    <dataBases>
        <dataBase name="test" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
        <dataBase name="shard_01" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
        <dataBase name="shard_02" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
        <dataBase name="lb_ss" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
        <dataBase name="lb_livegame" host="host_2" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
    </dataBases>
</node>

Описание:

  • 'host' представляет конфигурацию хоста бэкэнда mysql.
  • 'host -> type' представляет тип узла. Значение: [запись | чтение].
  • 'host -> name' представляет имя хоста бэкэнд mysql.
  • 'host -> address' представляет адрес хоста бэкенд mysql.
  • 'host -> user' представляет учётную запись пользователя бэкэнд mysql.
  • 'host -> password' представляет пароль учётной записи бэкэнд mysql.
  • 'host -> weight' представляет вес хоста-ведомого.
  • 'dataBase' представляет конфигурацию базы данных бэкэнд mysql.
  • 'dataBase -> name' представляет название базы данных.
  • 'dataBase -> host' представляет имя узла, где расположена база данных, Ссылка: 'host -> name'.
  • 'dataBase -> maxOpenConns' представляет максимальное количество соединений в базе данных, по умолчанию: 16.
  • 'dataBase -> maxIdleConns' представляет максимально допустимое количество незанятых соединений в базе данных, по умолчанию: 4.
  • 'dataBase -> maxIdleTime' представляет максимальное время простоя соединения с базой данных (в секундах), по умолчанию: 60.

Схема:

Добавьте схему базы данных в Myhub.

<schema>
    <dataBase name="db1" proxyDataBase="lb_ss" blacklistSql="blacklist/db1.sql">
        <!--  правило: хеш | диапазон | дата_месяц | дата_день  -->
        <table name="dealer_info" ruleKey="id" rule="rang_1" createSql="dealer_info.sql"/>
        <table name="cash_record" ruleKey="add_time" rule="rang_2" createSql="cash_record.sql"/>
        <table name="api_log" ruleKey="id" rule="hash_1" createSql="api_log.sql"/>
    </dataBase>
    <!-- прямой прокси -->
    <dataBase name="test_1" proxyDataBase="test"/>
</schema>

Описание:

  • 'dataBase' представляет конфигурацию схемы базы данных.
  • 'dataBase -> name' представляет имя схемы базы данных.
  • 'dataBase -> proxyDataBase' представляет имя базы данных узла, которая является проксируемой, используется для прямого прокси.
  • 'dataBase -> blacklistSql' представляет оператор SQL чёрного списка, значение может быть путём к файлу SQL или оператором SQL, например: delete from user where id = ?.
  • 'table' представляет конфигурацию таблицы схемы.
  • 'table -> name' представляет имя таблицы, оно должно быть уникальным.
  • 'table -> ruleKey' представляет ключ правила сегментации, это должно быть имя поля в таблице. Правило представляет собой правило сегментации.

Таблица -> createSql представляет автоматическое создание инструкции create для подтаблицы, значением может быть путь к файлу SQL или инструкция SQL.

Правило сегментации:

Myhub поддерживает три типа правил фрагментации:

  1. Хеш. Это правило использует операцию по модулю. Этот алгоритм позволяет разделить соседние данные на один и тот же срез в соответствии со значением «rowLimit» в конфигурации, что снижает сложность управления транзакциями.

  2. Диапазон. Алгоритм этого правила заключается в разделении таблицы в зависимости от диапазона значения поля ключа правила. Например: start <= диапазон < end.

  3. Дата (год, месяц, день). Это правило можно сегментировать по (году, месяцу, дню) и оно поддерживает несколько циклов дат, например: rowLimit = «7d» означает, что каждый 7-дневный период является сегментом, start <= дата < end.

<rules>
    <rule name="rang_1" ruleType="range" format="%04d">
        <!-- tableRowLimit : 2d,m,y,h-->
        <shard nodeDataBase="test" rowLimit="10000" between="1-8" />
        <shard nodeDataBase="shard_01" rowLimit="10000" between="8-10" />
    </rule>
    <rule name="rang_2" ruleType="date" format="ym">
        <!-- tableRowLimit : 2d,m,y,h-->
        <shard nodeDataBase="test" rowLimit="1m" between="201801-201901" />
    </rule>
    <!-- 'maxLen' представляет количество сегментов хеширования всего, по умолчанию 1024 -->
    <rule name="hash_1" ruleType="hash" format="%04d"  maxLen = "12">
        <!-- 'rowLimit' представляет непрерывное количество строк каждой таблицы, разделённой 'ruleKey', по умолчанию 1;
             'between' представляет диапазон значений хеш-модуля. например:'between="0-3",ruleKey's значение равно 10,
             а 'maxlen'= 10, 10%3 = 1, это означает в диапазоне 0–3 -->
        <shard nodeDataBase="test" rowLimit="2" between="0-6" />
        <shard nodeDataBase="shard_01" rowLimit="2" between="6-12" />
    </rule>
</rules>

Описание:

  • Rule представляет конфигурацию правила.
  • Name представляет имя правила, которое должно быть уникальным.
  • ruleType представляет тип правила. Значение: [range|hash|date].
  • Format представляет суффикс формата подтаблицы при автоматическом создании.
    • Если ruleType равен [range|hash], используется формат %d, например, format = "%04d", будет создана таблица с именем tablename_0001.
    • Если ruleType равно date, используется формат в [y|m|d], он представляет [год|месяц|день]. Например, format = "ym" будет создана таблица с именем tablename_201805.
  • MaxLen представляет значение модуля, настраивается только при ruleType = "hash".
  • Shard представляет конфигурацию сегмента.
  • Shard -> nodeDatabase представляет связанное имя базы данных узла, значение должно находиться в конфигурации базы данных узлов.
  • Shard -> rowLimit представляет максимальное количество строк на таблицу, его значение следующее:
    • Если ruleType = range, представляет количество строк на подтаблицу, тип значения — число. Например, rowLimit = "100000" представляет максимальное количество строк на одну таблицу — 100 000.
    • Если ruleType = date, представляет количество строк за определённый период времени, значение представляет собой комбинацию чисел и [y|m|d]. Например, rowLimit = "1ym" представляет данные за один месяц на сегмент.
    • Если ruleType = hash, представляет разделение каждой подтаблицы остатком от деления по модулю, тип значения — число. Например, rowLimit = "2" представляет 10 % 0 и 10 % 1 будут сохранены в одной таблице.
  • Shard -> between представляет диапазон значений правила фрагментации.

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

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

1
https://api.gitlife.ru/oschina-mirror/sgoby-myhub.git
git@api.gitlife.ru:oschina-mirror/sgoby-myhub.git
oschina-mirror
sgoby-myhub
sgoby-myhub
master