Привет, Хабр.

А давайте поговорим про автоматизацию в мире систем хранения данных. Мы в компании АЭРОДИСК регулярно проводим опросы наших и не только наших заказчиков по желаемым функциям в наших продуктах. Желание клиента для нас, может быть, еще не закон, но желание нескольких десятков клиентов обязательно находит отражение в роадмапе. Одними из таких функций в новой версии программного обеспечения A-CORE 5.1.0 для СХД ВОСТОК-5 и ENGINE-5 явились управление СХД посредством REST API и группы консистентости при создании снимков данных на группе взаимозависимых томов. В нашей сегодняшней статье мы на наглядном (хоть и искусственном) примере покажем, зачем это нужно и как использовать этот функционал в системах хранения АЭРОДИСК. А послушать про это можно будет на вебинаре "Около ИТ", который пройдёт 6 июня 2023 г. в 15:00 – регистрируйтесь по ссылке.

Итак, немного теории

REST API – набор веб-сервисов, которые позволяют разработчикам взаимодействовать с системой хранения данных, используя HTTP-запросы. Данные API обеспечивают стандартный способ управления для автоматизированных систем, то есть обеспечивают автоматизацию обычного набора функций управления СХД: создание и удаление пулов и томов, маппинг томов, оркестрацию снимков данных, управление репликацией, QOS, файловыми системами и другие. REST API позволяет унифицировать управление СХД от разных производителей, интегрировать необходимые функции во внешние системы и приложения: системы виртуализации, системы резервного копирования и восстановления, порталы самообслуживания в облачных инфраструктурах и т.д.

Группы консистентности

Современные ИТ-ландшафты состоят из множества информационных систем, плотно связанных между собой потоками данных. Например, в ритейле покупка товара на кассе магазина отражается во многих ИТ-системах, включая CRM, склад, финансовую отчетность и планирование и т. д. То есть в каждый момент времени информационные системы связаны между собой, что приводит к дополнительным сложностям в обеспечении целостности данных при восстановлении из резервных копий. Представим себе, что из-за разницы во времени резервного копирования систем после сбоя и восстановления из резервной копии в одной системе товар был продан, а в другой – нет: не сходятся бухгалтерские балансы, на складах лежат неучтённые товары, происходят сбои в логистике и другие неприятные истории.

Если мы имеем дело с современной СХД, то тут на помощь приходит технология обеспечения консистентности групп томов (LUN). Объединив тома в логическую группу, СХД обеспечивает их связанность при операциях локальной или удаленной репликации. Если создаётся снимок данных, то можно быть уверенным, что снимок данных для всех томов в группе создается на определенный момент времени одновременно и синхронность систем будет обеспечена.

Настраиваемся

Для демонстрации работы функциональности мы организовали следующий тестовый стенд:

Для эмулирования взаимозависимых ИТ-систем создадим экземпляр БД PostgreSQL, в который будем записывать тестовые данные с указанием timestamp. Исходя из данных, генерируемых в таблице, будем создавать одинаковые текстовые файлы на разных файловых системах. Естественно, чтобы у нас получился эксперимент, расположим базу данных и файловые системы на трех разных томах СХД (например, размером 200GB).

Итак, начнем

Создадим RDG группу RAID 6/60 (4+2) на дисковом массиве АЭРОДИСК:

Создадим 3 логических тома на группе R00 объемом 200GB:

Сделаем маппинг томов размеров 200GB на сервер Ubuntu через FC:

Просканируем новые LUN на сервере Ubuntu:

root@tester:~# echo 1 > /sys/class/fc_host/host11/issue_lip
root@tester:~# echo 1 > /sys/class/fc_host/host0/issue_lip

Проверим наличие трех блочных устройств размера 200GB:

Смонтируем созданные файловые системы в операционную систему в точки монтирования /vol6 /vol7 и /vol8.

Создадим табличное пространство и экземпляр базы данных PostgreSQL DB6. Для генерации набора тестовых данных используем python скрипт, вставляющий в таблицу БД db_test тестовые данные ID 100 .. 20000 и current_timestamp. После вставки данных создаем текстовые файлы с именем ID и минимальным текстом в точках монтирования /vol7 и /vol8.

Скрипт работает несколько минут, в результате чего мы имеем эмуляцию работы взаимосвязанных систем. Примерами из реальных ИТ систем могут быть конструкторские системы, хранящие чертежи на файловой системе с каталогом в СУБД, или системы управления медиа-контентом, также имеющие похожую структуру как в неструктурированных файловых системах, так и в структурированных СУБД.

Итак, во время работы эмулятора нагрузки сделаем обычный аппаратный снимок томов файловой системы /vol7 и /vol8:

Теперь попробуем восстановить аппаратные снимки двух томов и сделать маппинг восстановленных томов:

Можно увидеть, что из-за несинхронности времени создания снимков мы получаем разное количество файлов на восстановленных файловых системах:

Данная проблема актуальна и при создании снимков вручную, и при использовании скриптов. Для решения этой проблемы мы реализовали функциональность «Группы консистентности», которая обеспечивает консистентность данных для всех томов, объединенных в группу.

Сделаем это по-новому

Создадим группу консистентности связанных клонов SAVEMYDATA и добавим тома VOL_1  и VOL_3:

Во время создания тестовых данных создадим связанные клоны для группы SAVEMYDATA:

После создания клонов удалим файловые данные с /vol7 и /vol8 и восстановим данные со снимков, созданных в группе консистентности:

Проверим восстановленные данные: как видно, файловые системы /vol7 и /vol8 синхронны:

А теперь про автоматизацию

Как видно, мы совершили множество действий для того, чтобы продемонстрировать работу лишь малой части функциональности СХД. Каждый день администраторы систем хранения данных работают с сотнями хостов и несколькими сотнями томов, а в таком окружении выполнять все настройки из графического интерфейса довольно трудоёмко. Традиционный помощник админа в этом – CLI или полноценный REST API для автоматизации рутинных операций и полноценной интеграции СХД в экосистему приложений.

В версии ПО A-Core 5.1.0 мы представили полноценный REST API для наших систем хранения данных, который поможет настроить и использовать СХД без множества операций в GUI. Какие типовые применения REST API мы видим:

  • выделение ёмкости, презентация хостам в больших ИТ ландшафтах;

  • создание типовых конфигураций для быстрого развёртывания;

  • интеграция в порталы самообслуживания;

  • интеграция с аппаратными снимками данных для резервного копирования;

  • интеграция с системами мониторинга конфигураций.  

Все методы REST API, доступные для использования, описаны и доступны из интерфейса СХД по адресу https://controller_ip/api/docs. Там же можно найти примеры запросов и в режиме реального времени эти запросы создавать и выполнять.

Пример автоматизации

Для примера давайте проделаем работу со снимками, которую мы выполняли в начале с помощью REST-запросов. Скрипты будем создавать с помощью нашего любимого Python.

Итак, авторизуемся на СХД и получим token:

URL_auth = "https://my_ip/api/auth/token"

headers = {

"accept": "application/json",

"Content-Type": "application/x-www-form-urlencoded"

}

resp = requests.post(URL_auth, headers = headers ,data='grant_type=&username=admin&password=*****&scope=&client_id=&client_secret=')

tk = json.loads(resp.text)['access_token']

Сделаем снимок тома VOL_1 в группе R00:

URL_snaplun = "https://my_ip/api/rdg/snapshot"

auth_str = ("Bearer " + str(tk))

headers = {

    'accept': 'application/json',

    'Authorization': 'Bearer '+str (tk),

    'Content-Type': 'application/json',

}

json_data = {

    'pool': 'R00',

    'lun': 'VOL_1',

}

response = requests.post (URL_snaplun, headers=headers, json=json_data)

Сделаем снимок тома VOL_3 в группе R00:

json_data = {

    'pool': 'R00',

    'lun': 'VOL_3',

}

response = requests.post (URL_snaplun, headers=headers, json=json_data)

После восстановления томов со снимков данных нам также понадобится процедура добавления маппингов, которую мы тоже сделаем с помощью REST-запросов. Авторизация и получение токена будут идентичны предыдущему шагу, создание же маппинга можно реализовать следующим кодом:

URL = "https://my_ip/api/fc/mapping"

auth_str = ("Bearer " +  str(tk))

headers = {

    'accept': 'application/json',

    'Authorization': 'Bearer '+str (tk),

    'Content-Type': 'application/json',

}

json_data = {

    'group': 'host2_79',

    'pool': 'R00',

    'lun': 'VOL_1',

    'lun_id': '1'

}

response = requests.post(URL_snaplun, headers=headers, json=json_data)

json_data = {

    'group': 'host2_79',

    'pool': 'R00',

    'lun': 'VOL_3',

    'lun_id': '3'

}

Процесс управления снимками данных в дальнейшем можно интегрировать с системой СРК или приложениями. Таким нехитрым образом процесс создания снимков и восстановления может быть выполнен одной командой. Применение REST-запросов для администрирования позволяет сэкономить множество кликов мышки в рутинных операциях и, надеюсь, сделает жизнь наших пользователей существенно проще.

Чтобы узнать больше про REST API и использование аппаратных снимков данных записывайтесь на наш вебинар "Около ИТ" 6 июня по ссылке. На нём вы увидите демонстрацию работы технологий, поговорим о внутренней кухне разработки новых фич АЭРОДИСК, и, естественно, ответим на любые вопросы по теме и не по теме ????

Комментарии (0)