Установка
Ссылка на публичный репозиторий: https://git.angara.cloud/gbgreenplum/greenplum.playbook.core
Поддерживаются три способа установки:
-
Установка через Ansible - полностью автоматизированное разворачивание кластера. Требует подготовки среды, заполнения inventory-файла и выполнения инструкций по установке. Подробнее см. в разделе Установка через Ansible.
-
Установка через Bash-скрипты - вариант с автоматизацией настройки среды. Достаточно распаковать архив и запустить скрипт. Требует наличия актуальной версии Python в системе. Подробнее см. в разделе Установка через Bash-скрипты.
-
Установка через 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 Frameworkext_install- установка дополнительных расширений:diskquota- позволяет администраторам ограничивать объем дискового пространства для схем, ролей и табличных пространств (для пропуска шага, необходимо закомментировать данную задачу в роли)
finalize- финальная настройка, включая исключение администратора кластера из sudo-групп (sudo, wheel)
Важно: При необходимости пропустить инициализацию кластера или включение резервного мастера на этапе
gp_install(например, при добавлении хостов в уже инициализированный кластер или при повторном запуске после ошибки на этапе инициализации) используйте тегиinit_mstrиinit_sbmrс опцией--skip-tags.
Подготовка среды
Установить Python3 и pip:
Рекомендуется создать виртуальную среду, активировать её и установить в нее 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
После успешной активации приглашение командной строки будет дополнено именем виртуальной среды, например:
По завершении работы виртуальную среду можно деактивировать следующей командой:
Установка кластера
Перед запуском отредактировать 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
Примеры значений переменных см. на странице Общие сведения.
Для выполнения полной установки использовать следующую команду:
Для выполнения конкретного этапа использовать опцию --tags с указанием соответствующего тега:
Для исключения определенного этапа использовать опцию --skip-tags с указанием соответствующего тега:
Установка через Bash-скрипты
Скрипт выполняет автоматическую настройку и активацию предварительно подготовленной виртуальной среды со всеми необходимыми компонентами для установки (включаяя Python, Ansible), после чего предлагает интерактивную конфигурацию установки и запуск плейбуков.
В ходе конфигурации установки скрипт заполняет inventory-файл с параметрами серверов и настройками установки. При запуске плейбука предоставляется возможность выбора необходимых этапов развертывания.
Подробное описание параметров конфигурации доступно в комментариях inventory-файла.
Запустить скрипт и следовать инструкциям:
Скрипт выполняет интерактивную настройку, включающую заполнение inventory-файла, выбор необходимых этапов установки и автоматический запуск процесса развертывания кластера.Установка через Docker
Данный метод представляет установку через Bash-скрипты, упакованную в Docker-контейнер со всеми необходимыми компонентами. Это исключает необходимость предварительной подготовки среды и решает проблемы совместимости на устаревших системах.
Поддерживаются два варианта выполнения установки: интерактивный и автоматический, а также возможность их комбинирования.
Интерактивный режим подходит для стандартных установок и не требует специальных знаний.
Автоматический режим предназначен для опытных пользователей и запуска в неинтерактивных средах, таких как Kubernetes.
По умолчанию используется образ x86, однако известно об успешных запусках на Apple M2 с архитектурой ARM.
Предварительные требования
Для работы необходим Docker или его полнофункциональный аналог. Инструкции по установке для различных платформ доступны на официальном сайте.
Интерактивная установка
Для запуска в интерактивном режиме необходимо запустить контейнер с монтированием директории SSH-ключей в /ssh:
После запуска процесс установки полностью соответствует методу через Bash-скрипты и позволяет абстрагироваться от сущностей Ansible (теги, инвентарь, плейбуки).
Ограничение: Inventory-файл не сохраняется между запусками, что требует повторного ввода всех параметров при каждом новом запуске.
Автоматическая установка
Для получения шаблона inventory-файла используйте аргумент cat следующим образом:
Отредактировать полученный 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
Данный подход позволяет интерактивно выбрать этапы установки, сохранив при этом настройки конфигурации между запусками.