Усовершенствование MySQL с помощью Tarantool
Репликация MySQL — одна из ключевых возможностей Tarantool. Это позволяет сохранить существующую базу данных MySQL, одновременно ускоряя её и масштабируя горизонтально. Даже если масштабное расширение не требуется, замена существующих реплик на Tarantool может сэкономить деньги, поскольку Tarantool эффективнее использует ресурсы процессора по сравнению с MySQL. Ознакомиться с отзывом компании, которая внедрила репликацию Tarantool в больших масштабах, можно в следующей статье.
Если возникнут трудности с основами Tarantool,
см. руководство для начинающих или описание модели данных.
Для устранения неполадок в ходе этого руководства полезен лог-файл replicatord.log в каталоге
/var/log. Также можно просмотреть лог-файл экземпляра example.log в каталоге /var/log/tarantool.
Руководство предназначено для CentOS 7.5 и MySQL 5.7. Для
выполнения руководства требуется установить systemd и MySQL.
В этом разделе выполняется настройка MySQL и создание базы данных.
-
Сначала установите необходимые пакеты в CentOS:
$ yum -y install git ncurses-devel cmake gcc-c++ boost boost-devel wget unzip nano bzip2 mysql-devel mysql-lib -
Склонируйте пакет репликации Tarantool-MySQL из GitHub:
$ git clone https://github.com/tarantool/mysql-tarantool-replication.git -
Соберите репликатор с помощью
cmake:$ cd mysql-tarantool-replication$ git submodule update --init --recursive$ cmake .$ make -
Репликатор будет работать как демон
systemdпод именемreplicatord, поэтому отредактируйте файл службыsystemd(replicatord.service) в репозиторииmysql-tarantool-replication:$ nano replicatord.serviceОтредактируйте следующую строку:
ExecStart=/usr/local/sbin/replicatord -c /usr/local/etc/replicatord.cfgЗдесь нужно заменить расширение
.cfgна.yml:ExecStart=/usr/local/sbin/replicatord -c /usr/local/etc/replicatord.yml -
Затем скопируйте файлы из репозитория
replicatordв другие необходимые каталоги:$ cp replicatord /usr/local/sbin/replicatord$ cp replicatord.service /etc/systemd/system -
Войдите в консоль MySQL и создайте пример базы данных (в зависимости от существующей установки, пользователь может отличаться от root):
mysql -u root -pCREATE DATABASE menagerie;QUIT -
Загрузите пример данных из MySQL. Данные будут загружены в корневой каталог. После этого установите их из терминала.
cdwget http://downloads.mysql.com/docs/menagerie-db.zipunzip menagerie-db.zipcd menagerie-dbmysql -u root -p menagerie < cr_pet_tbl.sqlmysql -u root -p menagerie < load_pet_tbl.sqlmysql menagerie -u root -p < ins_puff_rec.sqlmysql menagerie -u root -p < cr_event_tbl.sql -
Войдите в консоль MySQL и подготовьте данные для использования с репликатором Tarantool. На этом шаге выполняется:
- добавление идентификатора
- изменение имени поля во избежание конфликта
- уменьшение количества полей При работе с реальными данными этот шаг требует наибольшей настройки.
mysql -u root -pUSE menagerie;ALTER TABLE pet ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;ALTER TABLE pet CHANGE COLUMN 'name' 'name2' VARCHAR(255);ALTER TABLE pet DROP sex, DROP birth, DROP death;QUIT -
Пример данных готов. Отредактируйте конфигурационный файл MySQL для использования с репликатором:
$ cd$ nano /etc/my.cnfОбратите внимание, что путь к файлу
my.cnfдля MySQL может отличаться от вышеуказанного. Задайте следующие параметры:[mysqld]binlog_format = ROWserver_id = 1log-bin = mysql-bininteractive_timeout = 3600wait_timeout = 3600max_allowed_packet = 32Msocket = /var/lib/mysql/mysql.sockbind-address = 127.0.0.1[client]socket = /var/lib/mysql/mysql.sock -
После выхода из
nanoперезапуститеmysqld:$ systemctl restart mysqld
В этом разделе выполняется установка Tarantool и настройка спейсов для репликации.
-
Перейдите на страницу загрузки и следуйте инструкциям по установке.
-
Установите утилиту tt CLI.
-
Создайте новое окружение
ttв текущем каталоге с помощью команды tt init. -
В каталоге
/etc/tarantool/instances.available/mysqlсоздайте конфигурационные файлы экземпляраtt:config.yaml— задаёт следующую конфигурацию
app:file: 'myapp.lua'groups:group001:replicasets:replicaset001:instances:instance001:iproto:listen:- uri: '127.0.0.1:3301'
- `instances.yml` — задаёт экземпляры для запуска в текущем окружении
instance001:
- `myapp.lua` — содержит Lua-скрипт с приложением для загрузки
box.schema.user.grant('guest', 'read,write,execute', 'universe')local function bootstrap()if not box.space.mysqldaemon thens = box.schema.space.create('mysqldaemon')s:create_index('primary',{ type = 'tree', parts = { 1, 'unsigned' }, if_not_exists = true })endif not box.space.mysqldata thent = box.schema.space.create('mysqldata')t:create_index('primary',{ type = 'tree', parts = { 1, 'unsigned' }, if_not_exists = true })endendbootstrap()
Подробнее см. в разделе [Конфигурация](../../../configuration#configuration).
5. В каталоге instances.enabled созданного окружения tt создайте
символическую ссылку (mysql) на каталог из предыдущего шага:
```bash$ ln -s /etc/tarantool/instances.available/mysql mysql```
6. Затем запустите Lua-программу с помощью tt — утилиты командной
строки Tarantool:
```bash$ tt start mysql```
7. Подключитесь к экземпляру Tarantool:
```bash$ tt connect mysql:instance001```
8. Убедитесь, что целевые спейсы успешно созданы:
```bashmysql:instance001> box.space._space:select()```В конце вывода будут указаны спейсы `mysqldaemon` и `mysqldata`.Теперь нажмите "CTRL+C", чтобы выйти.
MySQL и Tarantool настроены. Можно переходить к настройке репликатора.
-
Отредактируйте файл
replicatord.ymlв основном каталогеtarantool-mysql-replication:nano replicatord.yml -
Измените весь файл следующим образом. Не забудьте добавить свой пароль MySQL и задать соответствующего пользователя:
mysql:host: 127.0.0.1port: 3306user: rootpassword:connect_retry: 15 # secondstarantool:host: 127.0.0.1:3301binlog_pos_space: 512binlog_pos_key: 0connect_retry: 15 # secondssync_retry: 1000 # millisecondsmappings:- database: menagerietable: petcolumns: [ id, name2, owner, species ]space: 513key_fields: [ 0 ]# insert_call: function_name# update_call: function_name# delete_call: function_name -
Скопируйте
replicatord.ymlв каталог, гдеsystemdищет его:$ cp replicatord.yml /usr/local/etc/replicatord.yml -
Затем запустите репликатор:
$ systemctl start replicatord -
Подключитесь к экземпляру Tarantool:
$ tt connect mysql:instance001 -
Выполните выборку из спейса
mysqldata. Реплицированные из MySQL данные выглядят следующим образом:mysql:instance001> box.space.mysqldata:select()---- - [1, 'Fluffy', 'Harold', 'cat']- [2, 'Claws', 'Gwen', 'cat']- [3, 'Buffy', 'Harold', 'dog']- [4, 'Fang', 'Benny', 'dog']- [5, 'Bowser', 'Diane', 'dog']- [6, 'Chirpy', 'Gwen', 'bird']- [7, 'Whistler', 'Gwen', 'bird']- [8, 'Slim', 'Benny', 'snake']- [9, 'Puffball', 'Diane', 'hamster']
В этом разделе выполняется добавление записи в MySQL и проверка того, что запись реплицирована в Tarantool. Для этого:
-
Выйдите из экземпляра Tarantool с помощью
CTRL-D. -
Добавьте запись в MySQL:
mysql -u root -pUSE menagerie;INSERT INTO pet(name2, owner, species) VALUES ('Spot', 'Brad', 'dog');QUIT -
В терминале подключитесь к экземпляру Tarantool:
$ tt connect mysql:instance001 -
Чтобы просмотреть реплицированные данные в Tarantool, выполните следующую команду:
mysql:instance001> box.space.mysqldata:select()