MariaDB Server е един от най-популярните сървъри за бази данни с отворен код. Създаден е от оригиналните разработчици на MySQL и стана популярен с това, че е бърз, мащабируем и здрав. MariaDB има богата екосистема от машини за съхранение, плъгини и други инструменти, които я правят много гъвкава за голямо разнообразие от случаи на употреба.
Изискванията за дисково пространство и I/O ефективност на нашите бази данни продължават да нарастват. Това е така, за да можем да управляваме правилно нарастването на информацията си.
Що се отнася до механизма за съхранение на MariaDB, имаме различни типове, от които да избирате, като XtraDB, InnoDB, Aria или MyISAM. От версията на MariaDB 10.2.5 се предлага и MyRocks. MyRocks е тип двигател за съхранение, който наистина може да ни помогне да изпълним изискванията, които споменахме по-рано.
В този блог ще научим повече информация за новия двигател MyRocks и как можем да го използваме в сървър на MariaDB.
Какво е MyRocks?
MyRocks е двигател за съхранение с отворен код, базиран на RocksDB, който първоначално е разработен от Facebook.
MyRocks може да бъде добро решение за съхранение, когато имате натоварвания, които изискват по-голяма компресия и I/O ефективност. Той използва архитектура на Log Structured Merge (LSM), която има по-добра компресия от алгоритмите на B-дървото, използвани от двигателя InnoDB (2 пъти по-добра компресия в сравнение с данните, компресирани от InnoDB). Освен това е оптимизирана за запис машина за съхранение (10 пъти по-малко усилване при запис в сравнение с InnoDB) и има по-бързо зареждане и репликация на данни. MyRocks записва данни директно на най-долното ниво, което избягва всички разходи за уплътняване, когато активирате по-бързото зареждане на данни за сесия.
LSM работи, като съхранява операции за промяна в буфер (memtable) и сортира и съхранява данните, когато този буфер е пълен.
По подразбиране таблиците и базите данни се съхраняват в директория #rocksdb вътре в MySQL datadir. Тази информация се съхранява в .sst файлове без разделяне по таблица.
MyRocks поддържа изолирани нива за ЧЕТЕНЕ COMMITTED и REPEATABLE READ и не поддържа SERIALIZABLE.
Как да внедрите MyRocks на сървър на MariaDB
Инсталиране
Първо, трябва да инсталираме MariaDB сървър. В този пример ще използваме CentOS Linux версия 7.6 като операционна система.
По подразбиране тази версия на ОС ще се опита да инсталира MariaDB 5.5, така че ще добавим хранилището на MariaDB, за да инсталираме MariaDB версия 10.3.
$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
След това ще инсталираме пакета MariaDB Server:
$ yum install MariaDB-server
Тази команда ще инсталира различни пакетни зависимости, не само MariaDB Server.
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-server x86_64 10.3.15-1.el7.centos mariadb 24 M
Installing for dependencies:
MariaDB-client x86_64 10.3.15-1.el7.centos mariadb 11 M
MariaDB-common x86_64 10.3.15-1.el7.centos mariadb 78 k
MariaDB-compat x86_64 10.3.15-1.el7.centos mariadb 2.8 M
boost-program-options x86_64 1.53.0-27.el7 base 156 k
galera x86_64 25.3.26-1.rhel7.el7.centos mariadb 8.1 M
libaio x86_64 0.3.109-13.el7 base 24 k
lsof x86_64 4.87-6.el7 base 331 k
make x86_64 1:3.82-23.el7 base 420 k
openssl x86_64 1:1.0.2k-16.el7_6.1 updates 493 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
perl-DBI x86_64 1.627-4.el7 base 802 k
perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
perl-IO-Compress noarch 2.061-2.el7 base 260 k
perl-Net-Daemon noarch 0.48-5.el7 base 51 k
perl-PlRPC noarch 0.2020-14.el7 base 36 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+16 Dependent packages)
По подразбиране сървърът MariaDB е инсталиран с InnoDB механизма за съхранение, така че трябва да инсталираме двигателя RocksDB, за да можем да го използваме.
$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-rocksdb-engine x86_64 10.3.15-1.el7.centos mariadb 4.4 M
Installing for dependencies:
libzstd x86_64 1.3.4-1.el7 mariadb 211 k
snappy x86_64 1.1.0-3.el7 base 40 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+2 Dependent packages)
Тази команда ще инсталира някои необходими зависимости и ще активира приставката на сървъра MariaDB. Той също така ще създаде конфигурационен файл в /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Можем да проверим тази инсталация, като изпълним командата SHOW PLUGINS в сървъра MariaDB.
$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB | ACTIVE | STORAGE ENGINE | ha_rocksdb.so | GPL |
| ROCKSDB_CFSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DBSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT_GLOBAL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_CF_OPTIONS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_COMPACTION_STATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_GLOBAL_INFO | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DDL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_SST_PROPS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_INDEX_FILE_MAP | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_LOCKS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_TRX | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DEADLOCK | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
+-------------------------------+----------+--------------------+---------------+---------+
Ако по някаква причина не сме активирали приставката, можем да я инсталираме динамично, като изпълним командата INSTALL SONAME или INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Друга възможност може да бъде рестартиране на услугите на базата данни. Това действие трябва да прочете файла /etc/my.cnf.d/rocksdb.cnf и да активира приставката.
$ service mariadb restart
Можем да намерим подробна информация за нашия RocksDB двигател, като използваме следната команда:
$ SHOW ENGINE ROCKSDB STATUS
Конфигурация
Относно конфигурационните файлове основният е /etc/my.cnf, който включва директорията /etc/my.cnf.d, където можем да намерим останалите конфигурационни файлове. В тази директория ще имаме следните конфигурационни файлове по подразбиране:
- enable_encryption.preset:Ще активира криптирането на данни в покой.
- mysql-clients.cnf:Тук има конфигурации за различни групи като [mysqladmin], [mysqlcheck], [mysqldump] и др.
- rocksdb.cnf:В този файл ще добавим конкретната конфигурация за MyRocks, като default-storage-engine или rocksdb_block_size.
- server.cnf:Тук имаме конфигурация, свързана със сървъра на базата данни, като адрес на свързване и binlog_format.
Всички системни променливи и променливи на състоянието на MyRocks са предварителни с "rocksdb". Нека да разгледаме това.
Системни променливи:
$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name | Value |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start | 1 |
| rocksdb_advise_random_on_open | ON |
| rocksdb_allow_concurrent_memtable_write | OFF |
| rocksdb_allow_mmap_reads | OFF |
| rocksdb_allow_mmap_writes | OFF |
| rocksdb_allow_to_start_after_corruption | OFF |
| rocksdb_blind_delete_primary_key | OFF |
| rocksdb_block_cache_size | 536870912 |
| rocksdb_block_restart_interval | 16 |
| rocksdb_block_size | 4096 |
…
+-------------------------------------------------+------------------------------------------+
Променливи на състоянието:
$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted | 0 |
| Rocksdb_rows_inserted | 0 |
| Rocksdb_rows_read | 0 |
| Rocksdb_rows_updated | 0 |
| Rocksdb_rows_deleted_blind | 0 |
| Rocksdb_rows_expired | 0 |
| Rocksdb_rows_filtered | 0 |
| Rocksdb_system_rows_deleted | 0 |
| Rocksdb_system_rows_inserted | 0 |
| Rocksdb_system_rows_read | 0 |
…
+----------------------------------------------------+-------+
Можете да намерите повече информация за състоянието и системните променливи на уебсайта на MariaDB.
Резервни копия за MariaDB с помощта на MyRocks
Архивите са задължителни във всички среди на база данни. Те са от съществено значение за възстановяване на системата, миграции, одит, тестване и други.
Можем да категоризираме архивите в два различни типа, логически и физически. Логическото архивиране се съхранява в четим от човека формат като SQL, а физическото архивиране съдържа допълнителните двоични данни.
За логически архиви на MariaDB с MyRocks като машина за база данни, най-често срещаният инструмент за архивиране е класическият mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
А за физическо архивиране можем да използваме Mariabackup, който е съвместим с MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Друг вариант може да бъде myrocks_hotbackup, създаден от Facebook. Може да се използва за вземане на физическо копие от работещ екземпляр на MyRocks на локален или отдалечен сървър, без да спира изходния екземпляр.
Ограничения при използването на MyRocks за MariaDB
Нека разгледаме някои от ограниченията при използването на двигателя MyRocks...
- Оптимистичната паралелна репликация на MariaDB може да не се поддържа
- MyRocks не е наличен за 32-битови платформи
- MariaDB Cluster (Galera Cluster) не работи с MyRocks (само InnoDB или XtraDB машини за съхранение)
- Транзакцията трябва да се побере в паметта
- Изисква специални настройки за зареждане на данни
- SERIALIZABLE не се поддържа
- Транспортируемо пространство за таблици, външен ключ, пространствен индекс и пълнотекстов индекс не се поддържат
Заключение
MyRocks е наличен в MariaDB от версии по-високи от 10.2.5. Както споменахме по-рано, този механизъм за съхранение може да ви бъде полезен, когато имате натоварвания, които изискват висока компресия на данни и по-високи нива на I/O ефективност. За да научите повече за MyRocks, можете да проверите това.