Статьи

Поддержка ZFS в Blackbirds 2.0

Привет читатели Techblog. С большой вероятностью вы читали о новых функциях в Blackbirds Release 2.0. К большим билетам относятся геораспределение , автоматизация и  хранимые процедуры Java . В дополнение к этим удивительным новым функциям мы отказались от поддержки ZFS, в частности Native ZFS в Linux . Ты говоришь, черт возьми, да! Ну, вы должны быть, и вот почему.

Поддержка ZFS была запрошена несколькими людьми, желающими использовать функцию моментальных снимков в своей стратегии резервного копирования. ZFS может предоставить комплексную стратегию резервного копирования для хранения базы данных NuoDB по доступной цене. ZFS очень бдительно относится к защите ваших данных и имеет длинный список функций для их резервного копирования, таких как; целостность данных (контрольные суммы, зеркалирование, raid-z, scrub, снимки), пулы хранения, кэш (ARC, L2ARC, ZIL), транзакционная модель копирования при записи, дедупликация, сжатие и многое другое.

Возможно, вы помните, что наш технический директор Сет прокурор опубликовал блог под названием « Наш подход к резервному копированию баз данных» . Сет описывает запуск второго диспетчера хранилища (SM), позволяет ему синхронизировать базу данных, затем завершает работу второго SM и сохраняет архив в резервном каталоге. В случае ZFS снимок ZFS может быть сделан на шаге 3 «Скопировать куда-нибудь локальный архив» вместо того, чтобы делать копию. Возможность запуска NuoDB на ZFS позволяет вам еще больше расширить стратегию резервного копирования. В Blackbirds снимок может быть сделан во время работы базы данных (живой снимок). Как это круто? Хорошо, так в чем же дело? Ограничение для живого снимка заключается в том, что и каталог архива, и каталог журнала должны находиться в одном наборе данных ZFS.

Вот пошаговое руководство по созданию моментальных снимков в Ubuntu с использованием исходного домена Сета и чайной базы данных.

Установите родной ZFSOnLinux

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:zfs-native/stable
sudo apt-get update
sudo apt-get install ubuntu-zfs

Создайте бассейн. ZFS raid-z используется для объединения 3 дисков.

cat /proc/partitions 
major minor  #blocks  name
  11        0    1048575 sr0
   8        0   16777216 sda
   8        1   12581888 sda1
   8        2          1 sda2
   8        5    4192256 sda5
   8       16    4194304 sdb
   8       17    4184064 sdb1
   8       25       8192 sdb9
   8       32    4194304 sdc
   8       33    4184064 sdc1
   8       41       8192 sdc9
   8       48    4194304 sdd
   8       49    4184064 sdd1
   8       57       8192 sdd9

sudo zpool list
    no pools available

sudo zpool create tank raidz sdb sdc sdd

sudo zpool list
    NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
    tank  11.9G   231K  11.9G     0%  1.00x  ONLINE  -

sudo zpool status
      pool: tank
     state: ONLINE
      scan: none requested
    config:
        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0

Теперь создайте набор данных ZFS и установите несколько свойств для повышения производительности. Наиболее заметная настройка — это настройка размера записи, которая должна соответствовать размеру IO. Для NuoDB это должно быть установлено в 64 КБ, что является размером атома (50 КБ), округленным до степени 2.

sudo zfs create tank/db
sudo zfs create tank/db/tea
sudo zfs set primarycache=metadata tank/db/tea
sudo zfs set recordsize=64k tank/db/tea
sudo zfs set compression=gzip tank/db/tea
sudo zfs set atime=off tank
sudo zfs set quota=6G tank/db
sudo zfs set quota=4G tank/db/tea
sudo zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
tank          782K  7.83G  40.0K  /tank
tank/db      78.6K  6.00G  40.0K  /tank/db
tank/db/tea  38.6K  4.00G  38.6K  /tank/db/tea

Вы заметили свойство сжатия? Архив и журнал NuoDB могут быть сжаты через ZFS. Мы видели где-то от 1,52x до 2,24x коэффициентов сжатия с алгоритмом сжатия gzip. Помимо экономии места, включение сжатия может привести к повышению производительности! К вашему сведению, ZFSOnLinux имеет множество поддерживаемых алгоритмов сжатия, таких как; LZJB, ZLE, LZ4, GZIP и GZIP- [1-9].

Итак, на данный момент ZFS настроен. Давайте запустим базу данных.

nuodbmgr --broker localhost --password bird
nuodb [domain] > start process sm
Database: tea
Host: localhost
Process command-line options: --commit remote --journal enable --journal-dir /tank/db/tea/journal
Archive directory: /tank/db/tea/archive
Initialize archive: true
Started: [SM] ubuntu-zfs/192.168.240.189:48005 [ pid = 16862 ] ACTIVE

nuodb [domain/tea] > start process te
Host: 192.168.240.1
Process command-line options: --commit remote --dba-user dba --dba-password oolong
Started: [TE] macbook/192.168.240.1:48005 [ pid = 34230 ] ACTIVE

nuodb [domain/tea] > start process te
Host: 192.168.240.1
Process command-line options: --commit remote --dba-user dba --dba-password oolong
Started: [TE] macbook/192.168.240.1:48006 [ pid = 34236 ] ACTIVE

nuodb [domain/tea] > show domain summary
Hosts:
 [agent] macbook/192.168.240.1:48004
[broker] ubuntu-zfs/192.168.240.189:48004

Database: tea
[TE] macbook/192.168.240.1:48005 [ pid = 34230 ] RUNNING
[TE] macbook/192.168.240.1:48006 [ pid = 34236 ] RUNNING
[SM] ubuntu-zfs/192.168.240.189:48005 [ pid = 16933 ] RUNNING

Отлично. База данных чая теперь работает с ZFS. Следующим шагом является демонстрация снимков ZFS путем создания некоторых данных и создания снимка с работающим NuoDB. Затем мы отбросим таблицу и восстановим ее, используя снимок ZFS.

nuosql tea@localhost --user dba --password oolong
SQL> create table great_teas (name string, style string);
SQL> insert into great_teas (name,style) values ('tieguanyin', 'oolong');
SQL> insert into great_teas (name,style) values ('biluochun', 'green');
SQL> insert into great_teas (name,style) values ('longjing', 'green');
SQL> select * from great_teas;

    NAME    STYLE  
 ---------- ------ 
 tieguanyin oolong 
 biluochun  green  
 longjing   green  

Сделайте снимок работающей базы данных.

sudo zfs snapshot tank/db/tea@saveTheTeas
sudo zfs list -t snapshot
NAME                      USED  AVAIL  REFER  MOUNTPOINT
tank/db/tea@saveTheTeas      0      -   272K  -

Тогда бросьте стол.

SQL> drop table great_teas;

Ой! Мы поняли, что сбросить таблицу great_tea — очень плохая идея. Сет больше не сможет искать свои любимые чаи. Это катастрофа! 

SQL> select * from great_teas;
can't find table "GREAT_TEAS"
SQL: select * from great_teas;

К счастью, таблицу great_tea можно восстановить, потому что мы сделали снимок, когда он существовал. Вот шаги по восстановлению таблицы. Во-первых, база данных должна быть закрыта.

nuodb [domain] > shutdown database tea
Shutdown database tea

nuodb [domain] > show domain summary
Hosts:
 [agent] macbook/192.168.240.1:48004
[broker] ubuntu-zfs/192.168.240.189:48004

Можно использовать другие базы данных, но не те чайные базы, которые мы пытаемся восстановить. Кроме того, брокер и агент могут оставаться в рабочем состоянии. Чтобы выполнить откат из снимка ZFS, набор данных должен быть размонтирован.

sudo zfs unmount tank/db/tea
sudo zfs rollback tank/db/tea@saveTheTeas
sudo zfs mount tank/db/tea

Затем восстановите базу данных. Поле «initialize» должно быть ложным на этот раз, потому что SM должен восстановить откат архивной директории.

nuodb [domain] > start process sm
Database: tea
Host: localhost
Process command-line options: --commit remote --journal enable --journal-dir /tank/db/tea/journal
Archive directory: /tank/db/tea/archive
Initialize archive: false
Started: [SM] ubuntu-zfs/192.168.240.189:48005 [ pid = 17004 ] ACTIVE

nuodb [domain/tea] > start process te
Host: 192.168.240.1
Process command-line options: --commit remote --dba-user dba --dba-password oolong
Started: [TE] macbook/192.168.240.1:48005 [ pid = 34379 ] ACTIVE

nuodb [domain/tea] > start process te
Host: 192.168.240.1
Process command-line options: --commit remote --dba-user dba --dba-password oolong
Started: [TE] macbook/192.168.240.1:48006 [ pid = 34380 ] ACTIVE

nuodb [domain/tea] > show domain summary
Hosts:
 [agent] macbook/192.168.240.1:48004
[broker] ubuntu-zfs/192.168.240.189:48004

Database: tea
[TE] macbook/192.168.240.1:48005 [ pid = 34379 ] RUNNING
[TE] macbook/192.168.240.1:48006 [ pid = 34380 ] RUNNING
[SM] ubuntu-zfs/192.168.240.189:48005 [ pid = 17004 ] RUNNING

Проверьте, была ли восстановлена ​​таблица great_tea.

nuosql tea@localhost --user dba --password oolong
SQL> select * from great_teas;

    NAME    STYLE  
 ---------- ------ 
 tieguanyin oolong 
 biluochun  green  
 longjing   green  

Успех! Снимок ZFS сохранил день. Это быстрая и простая демонстрация мощности и гибкости, которые моментальные снимки ZFS предоставляют с NuoDB. Если вы заинтересованы в настройке ZFS, я рекомендую проверить ZFS для баз данных [1]  & [2]  и ZFS Intent Log  для более подробной информации. Я также рекомендую прочитать серию публикаций Аарона Топонсе по администрированию Zpool & ZFS . Следите за моим следующим сообщением в блоге о шифровании архивов!