Skip to content

Установка

Ссылка на публичный репозиторий: https://git.angara.cloud/gbgreenplum/greenplum.playbook.core

Поддерживаются три способа установки:

  1. Установка через Ansible - полностью автоматизированное разворачивание кластера. Требует подготовки среды, заполнения inventory-файла и выполнения инструкций по установке. Подробнее см. в разделе Установка через Ansible.

  2. Установка через Bash-скрипты - вариант с автоматизацией настройки среды. Достаточно распаковать архив и запустить скрипт. Требует наличия актуальной версии Python в системе. Подробнее см. в разделе Установка через Bash-скрипты.

  3. Установка через Docker - способ, позволяющий выполнять установку с любой системы, совместимой с Docker. Подробнее см. в разделе Установка через Docker.

Установка на localhost невозможна.

Предварительные требования

  • Управляющий хост - на хосте необходима актуальная версия Ansible (протестировано на ansible-core 2.16.1, Python 3.12.0) или Bash (протестировано на версии 5.2.15)

  • Мастер-хост кластера:

    • Диск для системы
    • Отдельно выделенный диск для данных кластера
    • 4 процессорных ядра
    • 16GB оперативной памяти
  • Резервный мастер-хост - standby master (опционально) - требования аналогичны основному мастер-хосту

  • Хосты сегментов хранения данных (минимум один):

    • Диск для системы
    • Отдельно выделенные диски для данных (дисков может быть много)
    • 4 процессорных ядра
    • 16GB оперативной памяти
  • Поддерживаемые операционные системы: Ubuntu 22.04, CentOS 7, CentOS 8, RHEL 7, RHEL 8

  • Требования к персоналу: инженер, выполняющий установку, должен иметь понимание архитектуры и принципов работы GreenPlum и операционных систем GNU/Linux

Инструкции по установке

Установка через Ansible

Плейбук содержит следующие теги:

  • add_host - настройка и подготовка новых узлов для добавления в кластер (без фактического добавления). Несовместимо с остальными тегами и должно использоваться отдельно
  • pre_install - предварительная подготовка кластера (настройка ОС, подготовка и тюнинг дисков)
  • packages_install - установка необходимых пакетов
  • gp_install - установка и инициализация кластера
  • pxf_install - установка Platform eXtension Framework
  • ext_install - установка дополнительных расширений:
    • diskquota - позволяет администраторам ограничивать объем дискового пространства для схем, ролей и табличных пространств (для пропуска шага, необходимо закомментировать данную задачу в роли)
  • finalize - финальная настройка, включая исключение администратора кластера из sudo-групп (sudo, wheel)

Важно: При необходимости пропустить инициализацию кластера или включение резервного мастера на этапе gp_install (например, при добавлении хостов в уже инициализированный кластер или при повторном запуске после ошибки на этапе инициализации) используйте теги init_mstr и init_sbmr с опцией --skip-tags.

Подготовка среды

Установить Python3 и pip:

apt install python3-pip    # Ubuntu/Debian
yum install python3-pip    # CentOS/RHEL

Рекомендуется создать виртуальную среду, активировать её и установить в нее Ansible с необходимыми коллекциями через ansible-galaxy (требуется доступ к интернету):

mkdir -p venv_ansible
python3 -m pip install --upgrade pip
python3 -m venv venv_ansible
source venv_ansible/bin/activate
pip3 install -r requirements.txt
ansible-galaxy collection install -r requirements.yml

После успешной активации приглашение командной строки будет дополнено именем виртуальной среды, например:

(venv_ansible) user@pc:/opt/greenplum_installer$

По завершении работы виртуальную среду можно деактивировать следующей командой:

deactivate

Установка кластера

Перед запуском отредактировать inventory-файл в соответствии с комментариями в файле.

Пример inventory-файла

[master]
# Valid is ONLY ONE master! Other will be ignored!
gp-mstr ansible_host=192.168.1.11 ansible_ssh_user=user

[standbymaster]
# If you don't need SB-master, remove or comment line below
# and leave the section empty
gp-sbmr ansible_host=192.168.1.12 ansible_ssh_user=user

[segments]
gp-seg1 ansible_host=192.168.1.21 ansible_ssh_user=user
gp-seg2 ansible_host=192.168.1.22 ansible_ssh_user=user
gp-seg3 ansible_host=192.168.1.23 ansible_ssh_user=user

[masters:children]
master
standbymaster

[greenplum_cluster:children]
masters
segments

[all:vars]

#### Install ntp on master master_ntp maybe 'True' or 'False'
master_ntp=True

#### NTP hostname or IP
ntp_server=["0.ru.pool.ntp.org", "1.ru.pool.ntp.org", "2.ru.pool.ntp.org", "3.ru.pool.ntp.org"]

#### Path to GP install
gphome=/usr/local/greenplum

#### Login of user, who been owner of GP service
cluster_admin_user=gpadmin

#### If set to 'True', then try to create mkfs XFS on block devices on master
master_mkfs=True

#### If set to 'True', then try to create mkfs XFS on block devices on segments
segment_mkfs=True

#### Device name on master
master_devname=vdb

#### Mount point of datadisk on Master
master_datadir=/data1

#### Devices names on segment servers
segment_devname=["vdb", "vdc"]

#### Please set pairs of mount points and volume names
segment_datadisks=[["/data1", "/dev/vdb"], ["/data2", "/dev/vdc"]]

#### File system location where the master data directory
#### will be created.
master_directory=master

#### If set to 'True', then try to create and mount directories to vols on master
master_force_mount=True

#### If set to 'True', then try to create and mount directories to vols on segments
segment_force_mount=True

#### Folder for primary segments
primary_directory=primary

#### Naming convention for utility-generated data directories.
seg_prefix=gpseg

#### Create a database of this name after initialization.
database_name=gpdb

#### Port number for the master instance.
master_port=5432

#### Base number by which primary segment port numbers
#### are calculated.
port_base=6000

#### File system location(s) where primary segment data directories
#### will be created. The number of locations in the list dictate
#### the number of primary segments that will get created per
#### physical host (if multiple addresses for a host are listed in
#### the hostfile, the number of segments will be spread evenly across
#### the specified interface addresses).
#### You can omit this parameter, in this case the configurator will proceed from the values of the variables "segments_count" and "distribute".
#### Uncomment this, if you know, what you do for fine tuning.
; data_directory=/data1/primary /data1/primary /data2/primary /data2/primary

#### Number of segments on each drive.
segments_count=2

#### Need to distribute segments on all disks?
#### If `True` then segments will be created on all disk drives.
#### Else data-segments will be created on first disk drive on segment-server
#### and mirror-segments will be screated on last disk drive on segment-server (it can be same).
distribute=True

#### If 'True' is selected, then mirrors are created, relevant for seg>1
mirror=True

#### Folder for mirror segments
mirror_directory=mirror

#### Base number by which mirror segment port numbers
#### are calculated.
mirror_port_base=7000

#### File system location(s) where mirror segment data directories
#### will be created. The number of mirror locations must equal the
#### number of primary locations as specified in the
#### DATA_DIRECTORY parameter.
#### You can omit this parameter, in this case the configurator will proceed from the values of the variables "seg_count" and "distribute".
; mirror_data_directory=/data1/mirror /data1/mirror /data2/mirror /data2/mirror

#### Maximum log file segments between automatic WAL checkpoints.
check_point_segments=8

#### The number of segments to create in parallel.
init_parallel_processes=4

Примеры значений переменных см. на странице Общие сведения.

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

ansible-playbook playbook.yml

Для выполнения конкретного этапа использовать опцию --tags с указанием соответствующего тега:

ansible-playbook playbook.yml --tags pre_install

Для исключения определенного этапа использовать опцию --skip-tags с указанием соответствующего тега:

ansible-playbook playbook.yml --skip-tags pxf_install

Установка через Bash-скрипты

Скрипт выполняет автоматическую настройку и активацию предварительно подготовленной виртуальной среды со всеми необходимыми компонентами для установки (включаяя Python, Ansible), после чего предлагает интерактивную конфигурацию установки и запуск плейбуков.
В ходе конфигурации установки скрипт заполняет inventory-файл с параметрами серверов и настройками установки. При запуске плейбука предоставляется возможность выбора необходимых этапов развертывания.

Подробное описание параметров конфигурации доступно в комментариях inventory-файла.

Запустить скрипт и следовать инструкциям:

./install.bash
Скрипт выполняет интерактивную настройку, включающую заполнение inventory-файла, выбор необходимых этапов установки и автоматический запуск процесса развертывания кластера.

Установка через Docker

Данный метод представляет установку через Bash-скрипты, упакованную в Docker-контейнер со всеми необходимыми компонентами. Это исключает необходимость предварительной подготовки среды и решает проблемы совместимости на устаревших системах.

Поддерживаются два варианта выполнения установки: интерактивный и автоматический, а также возможность их комбинирования.
Интерактивный режим подходит для стандартных установок и не требует специальных знаний.
Автоматический режим предназначен для опытных пользователей и запуска в неинтерактивных средах, таких как Kubernetes.

По умолчанию используется образ x86, однако известно об успешных запусках на Apple M2 с архитектурой ARM.

Предварительные требования

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

Интерактивная установка

Для запуска в интерактивном режиме необходимо запустить контейнер с монтированием директории SSH-ключей в /ssh:

docker run --interactive --tty -v ${HOME}/.ssh:/ssh your_registry/playbook-core-ubuntu22.04:latest

После запуска процесс установки полностью соответствует методу через Bash-скрипты и позволяет абстрагироваться от сущностей Ansible (теги, инвентарь, плейбуки).

Ограничение: Inventory-файл не сохраняется между запусками, что требует повторного ввода всех параметров при каждом новом запуске.

Автоматическая установка

Для получения шаблона inventory-файла используйте аргумент cat следующим образом:

docker run --interactive --tty your_registry/playbook-core-ubuntu22.04:latest cat > inventory

Отредактировать полученный inventory-файл под параметры вашей среды.

Запуск с параметрами

Запустить контейнер с монтированием файла конфигурации и указанием параметров запуска:

  • Первый аргумент - команда run
  • Второй аргумент - параметры установки: теги выполнения, пароль пользователя (иначе будет запрошен интерактивно) и другие переопределяемые значения
docker run --interactive --tty --name "ansible-installer" \
  --volume $(pwd)/inventory:/inventory \
  --volume ${HOME}/.ssh:/ssh \
  your_registry/playbook-core-ubuntu22.04:latest \
  run "--tags pre_install --extra-vars cluster_admin_password=VerySecurePassword"
Фоновое выполнение

При автоматической установке контейнер можно запускать в фоновом режиме с флагом --detach (требуется обязательно указать пароль в параметрах):

docker run --detach --name "ansible-installer" \
  --volume $(pwd)/inventory:/inventory \
  --volume ${HOME}/.ssh:/ssh \
  your_registry/playbook-core-ubuntu22.04:latest \
  run "--extra-vars cluster_admin_password=SecurePassword"

Мониторинг процесса

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

# Проверка статуса контейнера
docker ps -a | grep "ansible-installer"

# Просмотр логов установки
docker logs ansible-installer

Смешанный режим

Выполнить интерактивный запуск с предварительно настроенным и сохраненным inventory-файлом:

docker run --interactive --tty --name "ansible-installer" \
  --volume $(pwd)/inventory:/inventory \
  --volume ${HOME}/.ssh:/ssh \
  your_registry/playbook-core-ubuntu22.04:latest

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