Репликация между из MySQL в Tarantool

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:24, 12 июня 2018.

СУБД Tarantool – собственная разработка Mail.Ru Group, которая используется в компании около девяти лет. Она сочетает высокую скорость обработки запросов, характерную для систем кэширования (например, Memcached и Redis) c надежностью таких промышленных решений, как Oracle, MySQL и PostgreSQL. Tarantool выложена в открытый доступ под лицензией BSD. Согласно результатам внутреннего тестирования Mail.Ru Group, ее производительность составляет миллион транзакций в секунду на одном ядре простейшего commodity-сервера. Один сервер с Tarantool способен заменить более 30 серверов с классической СУБД (по внутренним данным Mail.Ru Group). Как opensource-продукт Tarantool успешно внедрена в ряде крупных российских и международных компаний, среди которых Badoo, Avito, QIWI и Wallarm.

Разработчики сообщества СУБД Tarantool представили систему репликации из MySQL в Tarantool. Система, позволяющая разгрузить базы данных MySQL, выложена в открытый доступ по лицензии BSD.

Механизм репликации позволяет автоматически синхронизировать данные между двумя базами. Один сервер с Tarantool способен обработать нагрузку, с которой не справлялись 20 серверов с MySQL [1]. Таким образом, используя новую систему репликации, администратор MySQL может существенно снизить нагрузку на серверы, переадресовав Tarantool операции чтения.

Система разработана в первую очередь для интернет- и IT-компаний, которые активно используют MySQL. Ее применение позволит ускорить работу мобильных и веб-приложений для конечных пользователей.

«Часто переход на новую СУБД требует от бизнеса серьезной перестройки инфраструктуры: для тех, кто пока не готов к такому шагу, сообщество разработчиков Tarantool создало систему репликации. Благодаря ей компания может воспользоваться преимуществами, которые дает Tarantool, внеся лишь точечные изменения в инфраструктуру. Теперь любой бизнес, который использует MySQL, может легко настроить репликацию в Tarantool, повысив производительность и ускорив выполнение запросов. Кстати, ранее компания Yota внедрила механизм репликации из Oracle в Tarantool, серьезно ускорив работу сервисов и снизив нагрузку на Oracle. Таким образом, в Tarantool можно реплицировать данные из двух самых популярных в мире СУБД — Oracle и MySQL», — говорит Денис Аникин, технический директор почтовых и облачных сервисов Mail.Ru Group.

Исходный код разработанной системы полностью открыт.

Key features:

Listens to a MySQL server as a replication client and translates incoming replication events into Tarantool space operations. Handles a mapping between MySQL tables and Tarantool spaces. Note: MySQL binary log should be in the row-based format. Will not work with a MariaDB master. Tested with MySQL 5.6 and lower. Not tested with MySQL 5.7 with new replication protocol improvements.

Compilation and installation Build from source bash git clone https://github.com/tarantool/mysql-tarantool-replication.git mysql_tarantool-replication cd mysql-tarantool-replication git submodule update --init --recursive cmake . make Back to contents

MySQL configuration Set the binlog_format to ROW. That can be done by editing the MySQL configuration file at /etc/mysql/my.cnf: binlog_format = ROW Create a user for replication, for example: CREATE USER <username>@'<host>' IDENTIFIED BY '<password>'; Grant replication privileges to the new user:

GRANT REPLICATION CLIENT ON '<db>'.'' TO <username>@'<domain>'; GRANT REPLICATION SLAVE ON '<db>'.'
' TO <username>@'<domain>'; GRANT SELECT ON '<db>'.'
' TO <username>@'<domain>'; Note: you can use an asterisk (*) as a wildcard instead of specifying a database and a table. Flush the changes: FLUSH PRIVILEGES Back to contents Tarantool configuration Create one space for replication daemon purposes. This space will store the current replication state. Create more spaces to store replicated data. Create a user for the replication daemon and enable read/write operations on target spaces. Back to contents Replicator configuration Set up MySQL connection parameters: host, port, login and password. Set up Tarantool connection options: host, port, login and password. Set binlog_pos_space to the space id created for the replication state and binlog_pos_key to identify the corresponding tuple in a given space. Mappings Replicator can map MySQL tables to one or more Tarantool spaces. Each mapping item contains the names of a database and a table, a list of replicated columns, a space id (if the space id is the same as for the previous item, it is left blank) and space key fields numbers. Multiple MySQL tables can be mapped to one Tarantool space, and the first table in the mapping is primary. In this case, each subsequent mapping item adds its columns to the end of the list of replicated columns for the space. When a non-primary table deletes its row, the corresponding fields in the tuple are reset to NULL. When a row is inserted into a non-primary table, the corresponding tuple is updated if it already exists or inserted if not, and all the fields before the field mapping are set to NULL. Note: the configuration file contains a Spaces section, where you can set default values for tuples - for example, for indexed fields.