EDB Postgres Containers

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 09:59, 11 декабря 2017.
EDB Postgres Containers
Enterprisedb corporate logo.png
Создатели: EnterpriseDB
Выпущена: Май 2017
Постоянный выпуск: 1.0
Операционная система: Linux
Лицензия: Коммерческая лицензия
Веб-сайт www.enterprisedb.com

EDB Postgres Containers - набор из двух сертифицированных образов Linux-контейнеров, опубликованных в RedHat Container Catalog. Один из контейнеров сконфигурирован из базы данных EDB Postgres Advanced Server 9.5, EDB Postgres Failover Manager и pgPool для балансировки нагрузки. Другой контейнер сконфигурирован из EDB Postgres Backup and Recovery.

Платформа EDB Postgres Platform for Containers позволяет использовать Docker-контейнеры для развертывания и управления сервером EDB Postgres Advanced Server (Advanced Server) в среде Red Hat OpenShift. OpenShift предоставляет среду, в которой можно легко:

  • развернуть или отключить Advanced Server'а по мере необходимости;
  • организовать автоматическое масштабирование Advanced Server'а под требования приложений.
  • обеспечить отказоустойчивость с помощью Failover Manager.
  • использовать балансировку нагрузки для выполнения запросов на чтение или запись на доступных серверах.
  • управлять в среде контейнера Advanced Server'ом с учетом пользовательских настроек.

Платформа EDB Postgres Platform for Containers автоматизирует развертывание контейнеров, содержащих Advanced Server и следующие вспомогательные компоненты:

  • EDB Failover Manager
  • pgPool

Платформа EDB Postgres Platform for Containers также автоматизирует развертывание Docker-контейнеров, которые устанавливают инструмент резервного копирования и восстановления EDB Postgres Backup and Recovery Tool (BART). BART обеспечивает упрощенное управление резервным копированием и восстановлением Advanced Server'а.

Установка Advanced Server Container Deployment

Контейнеры Advanced Server поддерживаются OpenShift Origin версии 3.0 или новее.

Создание Advanced Server 9.5 Container

Шаг 1 - Получение учетные данные репозитория и доступ к регистру

Для развертывания контейнера Advanced Server необходимо иметь учетные данные доступа к соответствующему репозиторию GitHub.[1] Необходимо также иметь доступ к регистру EDB Docker. [2][3]

Шаг 2 - Создание общего тома NFS

Системный администратор должен определить том на главном узле, который будет доступен через NFS. Это позволит выполнять операции чтения и записи; точка монтирования по умолчанию:

/volumes/edb-95

Шаг 3 - Скачивание .yaml файлов

Получив необходимые учетные данные, необходимо подключиться к репозиторию GitHub, перейти в папку 9.5 и загрузить следующие файлы:

edb-bart.yaml
persistent-volume-claim.yaml
persistent-volume.yaml
ppas95-persistent.yaml

Шаг 4 - Развертывание образа контейнера

Необходимо войти в регистр Docker:

docker login containers.enterprisedb.com

При появлении запроса ввести имя пользователя и пароль, предоставленные EnterpriseDB.
Далее необходимо скачать образ контейнера EDB Advanced Server 9.5 из docker-регистра и присвоить ему метку:

docker pull containers.enterprisedb.com/edb/edb-as:9.5
docker tag containers.enterprisedb.com/edb/edb-as:9.5 edb-as:9.5

Шаг 5 - Настройка OpenShift Следующие шаги предполагают, что уже был произведен вход в OpenShift и были получены необходимые привилегии.

Создать новый OpenShift проект с именем ppas-95:

oc new-project ppas-95

Определить файлы persistent volume и a persistent volume claim

oc create -f persistent-volume.yaml
oc create -f persistent-volume-claim.yaml

Использовать файл ppas95-persistent.yaml для создания шаблона:

oc create -f ppas95-persistent.yaml

Настройка развертывания контейнера

Скрипт deploy.sh создает контейнер с расширенными функциями управления (включая упрощенное удаление контейнера и создание шаблонов). Чтобы создать контейнер с deploy.sh, который включает в себя Advanced Server и поддерживает компоненты ручной установки, можно использовать локальный или размещенный в Docker-репозиторий. Чтобы настроить развертывание контейнера, необходимо сделать:

  • убедиться, что хост имеет доступ к Docker-хостингу или локальному репозиторию
  • определить на хосте контейнера том, который содержит файлы развертывания
  • чтобы указать пользовательские параметры для контейнера, нужно использовать скрипт deploy.sh

После развертывания контейнера все будет готово для использования консоли OpenShift

Доступ к репозиторию

При создании контейнера можно использовать образы из Docker- или локального репозитория

Вход в репозиторий

Перед развертыванием контейнера необходимо войти или в репозиторий EnterpriseDB (containers.enterprisedb.com), или репозиторий RedHat (registry.connect.redhat.com). Для входа используется следующая команда:

docker login registry_address [–u username] [–p password]
  • registry_address - адрес регистра, который будет использоваться
  • username - имя пользователя, под которым будет осуществляться вход в регистр
  • password - пароль пользователя

Если имя пользователя и пароль не будут указаны, будет предложено ввести учетные данные при входе в систему. Чтобы задать учетные данные для подключения к репозиторию EnterpriseDB, нужно обратиться в EnterpriseDB по адресу: https://www.enterprisedb.com/general-inquiry-form

Создание локального репозитория

Чтобы создать локальный репозиторий, содержащий образы EDB Postgres, необходимо создать локальный Docker-регистр.[4]

Для запуска регистра можно использовать скрипт deploy.sh; при вызове скрипта используйте флаг -sr. По умолчанию флаг -sr запустит регистр на localhost:5000:

deploy.sh –sr

Также скрипт deploy.sh может использоваться для опубликования образа в репозитории:

./deploy.sh -c component -rp repository -dc -it 9.5 -lr local_repo:port –pi
  • component - параметр, указывающий имя компонента, который будет опубликован в локальном репозитории
  • repository - репозиторий, из которого будет получен образ
  • local_repo - адрес локального репозитория
  • port - порт локального репозитория

Определение тома

Перед использованием консоли OpenShift администратор должен определить persistent volume и persistent volume claim. Они должны содержать информацию, которая будет передана при создании вашего проекта в OpenShift PersistentVolume API и OpenShift PersistentVolumeClaim API. Установщик предоставляет следующие примеры файлов, на которые можно ссылаться при определении persistent volume и persistent volume claim: persistent-volume-claim.yaml, persistent-volume.yaml. Установочные файлы предоставляют скрипт (deploy.sh), который можно использовать для развертывания контейнера Advanced Server и создания шаблона контейнера.

Развертывание образа контейнера

Перед развертыванием контейнера необходимо войти в регистр Docker и указать точку монтирования NFS, которая будет использоваться для хранения данных, файлов журналов и любых файлов поддержки. После определения точки монтирования NFS можно использовать скрипт deploy.sh для развертывания контейнера:

deploy.sh -c component_name -rp registry –dc [-it]
  • component_name - имя компонента (edb-as для развертки EDB Postgres Advanced Server, edb-bart - EDB Postgres Backup and Recovery Tool)
  • registry - имя регистра (необходимо войти в регистр с помощью docker command до развертывания контейнера)
  • -it - флаг, позволяющий указать, какая версия компонента будет установлена.

После развертки контейнера можно использовать скрипт deploy.sh для создания шаблона, который позволит пользоваться OpenShift консолью. Для создания шаблона нужно добавить опцию -сt:

deploy.sh –c edb-as –ct

После развертывания контейнера и создании шаблона через браузер можно подключиться к среде OpenShift и создать модули Advanced Server'а.
Скрипт deploy.sh включает в себя настройки, которые позволяют управлять контейнером EDB или определять детали, которые будут присоединены к проекту. Для просмотра всех поддерживаемых опций необходимо выполнить команду:

deploy.sh -h

Удаление проекта

Для удаление контейнера проекта используется скрипт deploy.sh: при вызове данного скрипта необходимо определить опцию -r и указать установленный компонент, имя проекта и базы данных:

deploy.sh -r component –p project_name –dn db_name
  • component - имя компонента
  • project_name - имя проекта
  • db_name - имя базы данных

Стоит отметить, что удаление проекта не удаляет файлы данных. Если для удаление проекта используется командная строка OpenShift, то необходимо перед запуском другого модуля с тем же компонентом и версией вручную удалить файл /volumes/edb/project_name/.db_name-master

Управление контейнером из командной строки

Для развертки, управления и использования контейнером Advanced Server можно использовать командную строку Docker или Atomic. Рекомендуется включать следующие опции docker-команд при использовании командной строки:

  • -d - заставляет Docker запускаться как демон (в случае выполнения atomic команды эта опция обязательна, в случае docker команды - по желанию)
  • --privileged - может потребоваться, если локальные параметры безопасности не позволяют монтировать локальный том с возможностью чтения и записи. В качестве альтернативы рекомендуется предоставить контейнеру права на чтение/запись в установленный том. По возможности можно отрегулировать настройки доступа SELinux.
  • --restart=always - контейнер перезагружается автоматически.

Развертывание контейнера с помощью Docker-команд

Чтобы использовать командную строку Docker для развертывания контейнера Advanced Server, который включает Failover Manager, необходимо четыре раза выполнить команду docker run, тем самым создавая главный узел и три резервных узла. Первая команда docker run создаст главный узел, каждая последующая - резервный узел.
Возможно указать переменные среды в командной строке (при вызове команды docker run) или в файле, расположенном в точке подключения к сети контейнера. Файл окружения:

  • atomic-env.sh для EDB Postgres Advanced Server
  • atomic-bart-env.sh для EDB Postgres Backup and Recovery Tool

Также можно указать параметры и переменные среды в командной строке при развертывании контейнера. Следующая команда использует командную строку docker для создания контейнера:

docker run --restart option
 --name node_name
 -v network_mountpoint
 -e DATABASE_NAME="database_name"
 -e PGPORT="as_listener_port"
 -e DATABASE_USER="db_user_name"
 -e DATABASE_USER_PASSWORD=" db_user_password"
 -e ENTERPRISEDB_PASSWORD=" user_password "
 -e REPL_USER="repl_user_name"
 -e REPL_PASSWORD="repl_user_password" 
 -e LOCALEPARAMETER="locale"
 -e MASTER_HOST=
 "none
 |`docker inspect -f {{.NetworkSettings.IPAddress}} master`"
 -e RESTORE_FILE="path_to_restore_file"
 ${db_name}/latest.tar"
 -e NAMESERVER="nameserver 8.8.8.8"
 -e CLEANUP_SCHEDULE="0:0:*:*:*"
 -e EFM_EMAIL="email@address.com"
 -d edb-as:95
  • docker run --restart option - параметры перезагрузки контейнера
  • --name node_name - имя узла репликации кластера
  • -v network_mountpoint - том, в котом будет находиться контейнер
  • DATABASE_NAME="database_name" - переменная окружения, которая определяет имя базы данных Advanced Server'а
  • PGPORT="as_listener_port" - переменная окружения, которая определяет порт, по которому будет доступна база данных Advanced Server'а (по умолчанию 5444 порт)
  • DATABASE_USER="db_user_name" - переменная окружения, которая определяет имя суперпользователя базы данных, который будет создан при инициализации базы данных(по умолчанию имя суперпользователя enterprisedb)
  • DATABASE_USER_PASSWORD=" db_user_password" - переменная окружения, которая определяет пароль суперпользователя базы данных в случае, если имя суперпользователя отлично от имени по умолчанию (пароль не должен меняться после инициализации модуля)
  • ENTERPRISEDB_PASSWORD=" user_password" - переменная, которая задает пароль суперпользователя базы данных, заданного по умолчанию (данный пароль так же не должен быть изменен после инициализации модуля)
  • REPL_USER="repl_user_name" - переменная окружения для указания имени репликатора потоковой передачи Postgres
  • REPL_PASSWORD="repl_user_password" - переменная среды для указания пароля репликатора
  • MASTER_HOST - переменная, которая определяет, является узел основным или резервным
  • RESTORE_FILE="path_to_restore_file" - переменная, определяющая путь к файлу восстановления кластера
  • NAMESERVER="nameserver 8.8.8.8" - идентификатор сервера имен, который будет использоваться для уведомлений от Failover Manager
  • CLEANUP_SCHEDULE="0:0:*:*:*" - расписание запуска скрипта очистки (скрипт рассмотрит каталоги данных и отметит любой каталог для удаления, который не использовался в течение последних 24 часов)
  • EFM_EMAIL="email@address.com" - адрес электронный почты, на который будут присылаться уведомления от Failover Manager.

Настройка контейнера в файле окружения

В скрипте развертывания контейнера EDB используются переменные окружения для определения свойств Advanced Server'а и контейнера BART. Можно указать значения для переменных окружения в командной строке или в файле переменных окружения. Файлы-образцы создаются в сетевой точке установки установщиком:

  • atomic-env.sh определяет свойства контейнера Advanced Server'а
  • atomic-bart-env.sh определяет свойства контейнера edb-bart

Файл окружение должен быть изменен до использования командной строки Docker или atomic.
При разворачивании главного узла контейнеризованного кластера, стоит обратить внимание, что для свойства MASTER_HOST должно быть установлено значение none. При развертывании контейнера файл atomic-env.sh автоматически обновляется для включения значений NetworkSettings.IPAddress главного узла. Каждый последующий узел, который будет создаваться, будет резервным; если произойдет переход на другой ресурс, свойство MASTER_HOST будет обновляться с IP-адресом нового главного узла.

Остановка или удаление контейнера с помощью командной строки Atomic

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

atomic stop --opt1=node_name container_name
  • node_name - имя узла (внутри кластера репликации, который должен быть остановлен)
  • container_name - имя контейнера

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

atomic uninstall --opt1= node_name container_name
  • node_name - имя узла (внутри кластера репликации, который должен быть остановлен)
  • container_name - имя контейнера

Лейблы

Выполнение команд atomic в Docker возможно производить с помощью инструкций LABEL. Каждый лейбл может содержать:

  • OPT1 - любой допустимый параметр Docker команды
  • OPT2 - имя управляемого узла кластера
  • OPT3 - сетевая точка монтирования тома (или локальной директории), в котором размещаются настройки директорий или файлов

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

RUN

Лейбл RUN отправляют хосту контейнера команду atomic run ppas, которая запускает контейнер:

LABEL RUN=docker run ${OPT1} --name ${OPT2} -v
${OPT3}:/edbvolume:z -d ppas:latest
INSTALL

Лейбл INSTALL выполняет команду atomic install ppas, которая устанавливает и запускает контейнер:

LABEL INSTALL=docker run ${OPT1} --name ${OPT2} -v
${OPT3}:/edbvolume:z -d ppas:latest
STOP

Лейбл STOP выполняет команду atomic stop ppas, которая останавливает контейнер:

LABEL STOP=`docker stop ${OPT1}
UNINSTALL

Лейбл UNINSTALL выполняет команду atomic uninstall ppas, которая удаляет контейнер:

LABEL UNINSTALL=`docker stop ${OPT1}

Примечания

Ссылки/Литература

  • Официальный сайт EnterpriseDB // EnterpriseDB | The Postgres Database Company: сайт. URL: https://www.enterprisedb.com/ (дата обращения 01.11.2017).