Содержание


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

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

Comments

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.


Ресурсы для скачивания


Похожие темы


Комментарии

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

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