Поддержка DB2 в OpenStack

Настройка среды OpenStack для поддержки DB2

OpenStack ― это облачная операционная система, которая управляет большими пулами вычислительных, дисковых и сетевых ресурсов в центре обработки данных. Управление всеми ресурсами осуществляется через информационную панель, которая предоставляет администраторам средства управления, в то же время обеспечивая пользователям возможность получать доступ к ресурсам через Web-интерфейс. В качестве своих баз данных по умолчанию OpenStack поддерживает MySQL, SQLite и PostgreSQL — в этой статье показано, как быстро настроить OpenStack на поддержку DB2®.

Шен Бо Хоу, инженер-программист, IBM

Хоу Шен Бо (Sheng Bo Hou) работает инженером-программистом в группе открытых стандартов и ПО с открытым исходным кодом IBM. С момента своего прихода в IBM в 2010 году занимается стандартами облачных вычислений. В настоящее время выступает в сообществе OpenStack с идеями в области обнаружения и исправления ошибок, подключения моделей и т.п. для согласования с поддержкой стандартов IBM и интеграции разработок компании с ПО с открытым исходным кодом.



02.04.2013

OpenStack — это великолепная облачная операционная система; разработчик, администратор и оператор поступят мудро, если освоят и включат ее в свой виртуальный инструментарий. Эффективное облако нуждается в эффективной базе данных, и многие базы данных подходят для этой цели. Но что делать, если с OpenStack нужно использовать с IBM® DB2... а по умолчанию она не поддерживается?

Это краткое упражнение показывает, как добавить поддержку DB2 в среду OpenStack. Требуется выполнить шесть шагов:

  1. Собрать материалы для начала работы.
  2. Установить пакеты доступа к базе данных.
  3. Добавить поддержку DB2.
  4. Использовать сценарии OpenStack.
  5. Настроить OpenStack для DB2.
  6. Запустить OpenStack и DB2.

Итак, приступим.

Шаг 1. Сбор материалов для начала работы

OpenStack построен на базе Python 2.7 и некоторых дополнительных пакетов 64-разрядной версии Ubuntu 11.10. IBM DB2 ― это целевая база данных, которую нужно поддерживать. Для начала нам понадобится следующее:

  • физическая машина;
  • 64-разрядная ОС операционная система, такая как Ubuntu 11.10 или более поздняя версия;
  • язык программирования вроде Python 2.7+. В случае Python, когда система будет готова, выполните следующие команды:
    sudo apt-get install python-software-properties
    sudo apt-get update, sudo apt-get install python-dev libaio-dev
    Install pip: sudo apt-get install python-pip
    Install ez_setup: sudo pip install ez_setup
  • рекомендуется DB2 9.7 или более поздняя версия.

Шаг 2. Установка пакетов доступа к базе данных

SQLAlchemy ― это инструментарий Python SQL и объектно-реляционный маппер, который позволяет разработчикам приложений на Python использовать SQL с помощью набора шаблонов персистенции уровня предприятия, предназначенных для эффективного и высокопроизводительного доступа к базе данных. SQLAlchemy пытается применять принципы размера/производительности и абстракции, рассматривая базу данных скорее как механизм реляционной алгебры, чем просто набор таблиц.

Объектно-реляционный маппер в SQLAlchemy (который отображает классы на базу данных самыми разными способами) позволяет разрабатывать объектную модель и схему базы данных абсолютно изолированно.

SQLAlchemy-migrate ― это инструмент для переноса схемы. Он позволяет работать с изменениями схемы базы данных в проектах SQLAlchemy и предоставляет механизм репозитория изменений базы данных, который можно использовать как из командной строки, так и из кода Python.

  1. Загрузите SQLAlchemy. Установите sudo pip install SQLAlchemy==0.7.2 (или любую другую версию).
  2. Загрузите SQLAlchemy-migrate. Так как DB2 не поддерживается, установите патч для DB2, называемый ibmdb2.patch (см. раздел Загрузки. Сохраните этот патч в корневой папке SQLAlchemy-migrate и выполните команду -p1 < ibmdb2.patch. Затем установите SQLAlchemy-migrate.

Шаг 3. Добавление поддержки DB2

Чтобы подключить DB2 к Python, установите IBM Data Server Driver, ibm_db и ibm_db_sa. Кроме того, чтобы установить OpenStack, нужны права суперпользователя; настройте необходимые переменные как sudo и global. Для добавления поддержки DB2 в OpenStack понадобятся следующие драйверы и адаптеры.

Загрузите BM Data Server Driver для ODBC и CLI из Fix Central; выберите подходящую версию с именем файла типа ibm_data_server_driver_for_odbc_cli_linuxxXX_vXX.tar.gz. Разархивируйте ее.

Сделайте три переменные глобальными; в OpenStack многие команды выполняются посредством sudo, для чего необходимо зарезервировать следующие три переменные:

  • Defaults env_keep+="IBM_DB_DIR"
  • Defaults env_keep+="IBM_DB_LIB"s
  • Defaults env_keep+="LD_LIBRARY_PATH"

Добавьте код после Defaults env_reset.

Все три переменные должны быть прописаны в среде. Их можно поместить в файл ~/.bashrc. Добавьте в ~ / .bashrc следующие строки:

export IBM_DB_DIR=<ODBC and CLI DIR>/clidriver
export IBM_DB_LIB=<ODBC and CLI DIR>/clidriver/lib
export LD_LIBRARY_PATH=<ODBC and CLI DIR>/clidriver/lib
alias sudo='sudo LD_LIBRARY_PATH=/<ODBC and CLI DIR>/clidriver/lib'

Загрузите ibm_db, драйвер Python и оболочку DBI для баз данных IBM, что обеспечит Python-интерфейс для баз данных IBM.

  1. Перейдите в каталог
    cd <ibm_db directory>
  2. Выполните команды sudo python setup.py build и sudo python setup.py install.

Загрузите ibm_db_sa. Этот адаптер обеспечивает интерфейс Python/SQLAlchemy для серверов данных IBM. В код внесены некоторые изменения в соответствии с требованиям кода SQLAlchemy-migrate и OpenStack. Используйте прилагаемый ibm_db_sa.zip.

  1. Перейдите в каталог
    cd <ibm_db_sa directory>
  2. Выполните команды sudo python setup.py build и sudo python setup.py install.

Шаг 4. Использование сценариев OpenStack

По умолчанию OpenStack записывает код поддержки MySQL. IBM DB2 предъявляет более строгие требования в отношении полей nullable (позволяет устанавливать типы данных) и index, принятия ограничителя UNIQUE (однозначно определяет каждую запись в таблице базы данных) и т.д. Поэтому код Python для SQLAlchemy-migrate необходимо заменить кодом, поддерживающим требований IBM DB2 (включая проект Nova/Compute OpenStack, контроллер фабрики облачных вычислений ― основную часть системы IaaS).

Примечание. Как показали мои тесты, Nova не поддерживает эти требования должным образом, поэтому я подготовил специальные сценарии на языке Python, 082_essex.py и 096_recreate_dns_domains. Они содержатся в Загрузке. Чтобы включить Nova для DB2, установите сценарий Python.

Существует два альтернативных варианта.

  1. При установке из исходного кода создайте его резервную копию в каталоге <nova dir>/nova/db/sqlalchemy/migrate_repo/versions и скопируйте два файла сценариев в этот каталог.
  2. При установке по команде создайте резервную копию файла в каталоге <nova dir*gt;/nova/db/sqlalchemy/migrate_repo/versions и скопируйте два файла сценариев в этот каталог.

Я уже составил отчет об ошибках для этой проблемы, которому можно следовать:

Некоторые столбцы должны быть определены как nullable=False, так как они уникальны 
в пределах таблицы. Например, адрес в virtual_interfaces, хост в aggregate_hosts, имя в 
aggregates и др. В MySQL все нормально, но базы данных с более строгими правилами 
создания столбцов могут выдавать ошибки, если это строго не задано.

По той же причине метод register_models в nova/db/sqlalchemy/models.py 
не работает для MYSQL. uuid в экземпляре необходимо определить как unique, а не null.

Шаг 5. Настройка OpenStack для DB2

Настройте подключение к базе данных на соответствующий адрес для IBM DB2; затем инициализируйте все таблицы базы данных. Здесь показано, как это сделать.

Для компонента Nova (cloud fabric controller):

  1. Создайте таблицу с именем nova; это особая таблица. Нужно, чтобы размер страниц составлял 8K (PAGESIZE=8K), а не 4K, как задано по умолчанию. В SQL команда выглядит так: CREATE DATABASE nova AUTOMATIC STORAGE YES ON '/home/db2inst1' DBPATH ON '/home/db2inst1' USING CODESET UTF-8 TERRITORY CN COLLATE USING SYSTEM PAGESIZE 8192.
  2. Измените sql_connection или connection в файле /etc/nova/nova.conf, установив значение ibmdb://name:password@address:50000/nova.

Для компонента Glance (компонент службы образов, который обеспечивает обнаружение, регистрацию и предоставление услуг для образов виртуальных дисков):

  1. Создайте таблицу с именем glance.
  2. Измените sql_connection в файле /etc/glance/glance-registry.conf, установив значение ibmdb://name:password@address:50000/glance.

Для компонента Keystone (обеспечивает службы учетных записей, маркеров, каталога и политик):

  1. Создайте таблицу с именем keystone.
  2. Измените sql_connection или connection в файле /etc/keystone/keystone.conf, установив значение ibmdb://name:password@address:50000/keystone.

Для компонента Cinder (обеспечивает хранение блоков как сервис):

  1. Создайте таблицу с именем cinder.
  2. Измените sql_connection или connection в файле /etc/cinder/cinder.conf, установив значение ibm_db_sa://name:password@address:50000/cinder.

Шаг 6. Запуск OpenStack с DB2

После выполнения этих шагов можно установить OpenStack (например, с помощью DevStack, сценария оболочки, облегчающего создание полной среды разработки OpenStack). После этого можно запускать новую среду OpenStack dev с DB2.

Примечание. При работе с DevStack измените в файле stack.sh следующую строку:

screen_it n-cpu "cd $NOVA_DIR && sg libvirtd $NOVA_DIR/bin/nova-compute"

на эту:

screen_it n-cpu "cd $NOVA_DIR && $NOVA_DIR/bin/nova-compute"

Иначе вы получите примерно такое сообщение об ошибке:

ImportError: libdb2.so.1: cannot open shared object file: No such file or directory

Однако текущий пользователь должен находиться в группе libvirtd. Ее можно добавить, отредактировав /etc/group.

И последнее замечание: OpenStack — развивающаяся платформа, а это означает, что сценарии для каждого из компонентов проекта, скорее всего, время от времени придется обновлять. Следите за всеми изменениями компонентов на сайте OpenStack.


Загрузка

ОписаниеИмяРазмер
Файлы сценариевscript_and_patches.zip42 КБ

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Облачные вычисления, Information Management, Open source
ArticleID=863564
ArticleTitle=Поддержка DB2 в OpenStack
publish-date=04022013