Установка
Установка через плейбук
Для установки Greenplum необходимо запустить плейбук GP_core согласно инструкции на соответствующей странице.
Ручная установка
Установка Greenplum состоит из следующих этапов:
- Подготовка виртуальных машин к установке Greenplum
- Установка Greenplum Database Software
- Создание каталогов данных
- Валидация системы
- Инициализация Greenplum
- Создание ресурсных групп
- Настройка Kerberos аутентификации в Greenplum
Подготовка серверов к установке Greenplum
Для корректной работы Greenplum необходимо настроить хосты перед установкой. Следующие действия необходимо выполнить на каждом хосте Greenplum:
-
Отключить SELinux
-
Отключить сервис firewalld:
-
Изменить настройки ядра Linux в файле
/etc/sysctl.conf. В таблице ниже представлено описание каждого параметра ядра Linux, который необходимо задать:
| Параметр | Пример значения | Расчет | Описание |
|---|---|---|---|
kernel.shmall |
197951838 | PHYS_PAGES / 2 | Устанавливает общий объем разделяемой памяти в страницах, который может использоваться в масштабе всей системы |
kernel.shmmax |
810810728448 | kernel.shmall * PAGE_SIZE | Устанавливает максимальный размер одного сегмента разделяемой памяти в байтах |
kernel.shmmni |
4096 | 256*(RAM GB) | Определяет максимальное количество сегментов разделяемой памяти для всей системы |
vm.overcommit_memory |
2 | Для GP всегда 2 | Определяет объем памяти, который может быть выделен процессам |
vm.overcommit_ratio |
95 | При использовании ресурсных очередей:vm.overcommit_ratio = (RAM - 0.026 * gp_vmem_rq) / RAMgp_vmem_rq = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7 |
Процент ОЗУ, который используется для процессов приложений. Остальная часть зарезервирована под ОС |
net.ipv4.ip_local_port_range |
10000 65535 | — | Порты, выделенные под ОС |
kernel.sem |
500 2048000 200 4096 | — | Описывает количество семафоров, доступных для ОС |
kernel.sysrq |
1 | Фиксированное значение 1 | Флаг включения SysRq комбинаций |
kernel.core_uses_pid |
1 | Фиксированное значение 1 | Добавляет к имени файла дампа номер PID процесса |
kernel.msgmnb |
65536 | Фиксированное значение 65536 | Размер очереди сообщений |
kernel.msgmax |
65536 | Фиксированное значение 65536 | Влияет на размер сообщения, которое можно поместить в очередь |
kernel.msgmni |
2048 | 1024*(RAM GB) | Влияет на число агентов, которые можно запустить |
net.ipv4.tcp_syncookies |
1 | Документация GP рекомендует 1 (несмотря на рекомендации Linux для высоконагруженных систем) | Флаг, который включает/отключает передачу syncookies вызывающему хосту в случае переполнения очереди SYN-пакетов для заданного сокета |
net.ipv4.conf.default.accept_source_route |
0 | Для GP всегда 0 | Флаг, заставляет сетевые интерфейсы принимать пакеты с установленной опцией Strict Source Route (SSR) или Loose Source Routing (LSR) |
net.ipv4.tcp_max_syn_backlog |
4096 | Документация GP рекомендует 4096 | Определяет максимальное время хранения SYN-запросов в памяти до момента получения третьего, завершающего установление соединения, пакета |
net.ipv4.conf.all.arp_filter |
1 | Документация GP рекомендует 1 | Флаг, который включает/выключает связывание IP-адреса с ARP-адресом. Если включена, то ответ передается через тот интерфейс, через который поступил запрос |
net.core.netdev_max_backlog |
10000 | Может потребоваться настройка для обработки пиковых нагрузок | Регулирует размер очереди пакетов между сетевой картой и ядром. При переполнении очереди новые пакеты отбрасываются |
net.core.rmem_max |
2097152 | Документация GP рекомендует 2097152 | Максимальный размер приемного буфера сокета |
net.core.wmem_max |
2097152 | Документация GP рекомендует 2097152 | Максимальный размер буфера отправки сокета |
vm.swappiness |
10 | Документация GP рекомендует 10 | Настройка агрессивности "высвапливания" памяти. Поддерживает максимальный объем оперативной памяти доступным для приложений |
vm.zone_reclaim_mode |
0 | Фиксированное значение 0 | — |
vm.dirty_expire_centisecs |
500 | Документация GP рекомендует 500 | Время в миллисекундах, определяющее интервал сброса на диск данных в dirty pages |
vm.dirty_writeback_centisecs |
100 | Документация GP рекомендует 100 | Интервал в миллисекундах для запуска синхронизации обработки данных dirty pages |
vm.dirty_background_ratio |
0 | Если RAM > 64GB, то 0; иначе 3 | Процент памяти, занятый dirty pages, при котором необходимо запускать синхронизацию |
vm.dirty_ratio |
0 | — | Процент памяти, который можно занять под dirty pages |
vm.dirty_background_bytes |
1610612736 | Рекомендуемое значение 1610612736 Если RAM ≤ 64GB, то удалить параметр |
Количество байт под dirty pages до автоматической синхронизации на диск |
vm.dirty_bytes |
4294967296 | Рекомендуемое значение 4294967296 Если RAM ≤ 64GB, то удалить параметр |
Общее количество байт, которое можно занять под dirty pages |
- Заполнить информацию о хостах системы в файле
/etc/hosts:
- Настроить System Resources Limits, прописав следующие значения в файлы
/etc/security/limits.confи/etc/security/limits.d/20-nproc.conf:
-
Примонтировать диски в формате XFS
-
Выставить Disk I/O settings. Значение blockdev должно быть равно 16384 на каждом диске:
sudo /sbin/blockdev --setra 16384 /dev/[device_name]
sudo echo "/sbin/blockdev --setra 16384 /dev/[device_name]" >> /etc/rc.d/rc.local
sudo chmod +x /etc/rc.d/rc.local
- Выставить Disk I/O scheduler. Должен принимать значение deadline:
sudo echo deadline > /sys/block/[device]/queue/scheduler
sudo grubby --update-kernel=ALL --args="elevator=deadline"
- Выставить Transparent Huge Pages в значение never:
-
Настроить IPC Object Removal. В файле
/etc/systemd/logind.confустановить RemoveIPC в значение no -
Настроить SSH Connection Threshold, выставив следующие значения в файле
/etc/ssh/sshd_config: -
Синхронизировать системные часы
-
Создать пользователя gpadmin с правами на sudo
-
Сгенерировать SSH-ключ
-
Выполнить перезагрузку хоста
Установка Greenplum Database Software
Для установки СУБД Greenplum необходимо скачать дистрибутив и выполнить следующие действия под пользователем gpadmin:
-
Загрузить дистрибутив на все хосты Greenplum в папку
/home/gpadmin -
На каждом хосте Greenplum выполнить распаковку дистрибутива в папку
/usr/local/greenplum-[version]и создать symlink на/usr/local/greenplum:
tar -xvf [package] -C /usr/local/greenplum-[version]/
sudo ln -s /usr/local/greenplum-[version] /usr/local/greenplum
- На каждом хосте Greenplum добавить подгрузку переменных окружений в файл
.bashrc:
-
С мастер-хоста Greenplum выполнить обмен SSH-ключами между остальными серверами Greenplum при помощи утилиты
ssh-copy-id -
Произвести обмен SSH-ключами между всеми хостами Greenplum. Для этого необходимо создать файл
hostfile_exkeysсо списком всех хостов Greenplum и выполнить следующую команду с мастер-хоста:
Создание каталогов данных
Для инициализации системы необходимо создать каталоги, в которые будут установлены компоненты Greenplum.
- На мастер-хосте и резервном мастер-хосте создать папку под системные каталоги:
- Создать папки для хранения данных на сегмент-хостах GP. Для этого необходимо создать файл
hostfile_gpssh_segonlyсо списком сегмент-хостов Greenplum и выполнить с мастер-хоста следующие команды:
gpssh -f hostfile_gpssh_segonly -e 'mkdir -p //primary'
gpssh -f hostfile_gpssh_segonly -e 'mkdir -p //mirror'
gpssh -f hostfile_gpssh_segonly -e 'chown -R gpadmin //*'
Валидация системы
Перед инициализацией системы необходимо провести проверку сети и дисков. Для этого с мастер-хоста необходимо выполнить следующие действия:
-
Создать файл
hostfile_gpchecknetсо списком тестируемых сетевых интерфейсов Greenplum -
Запустить проверку сети в параллельном и полноматричном режиме:
gpcheckperf -f hostfile_gpchecknet -r N -d /tmp > N_net_test.out
gpcheckperf -f hostfile_gpchecknet -r M -d /tmp > M_net_test.out
-
Создать файл
hostfile_gpcheckperfсо списком тестируемых сегмент-хостов Greenplum -
Запустить проверку дисков:
gpcheckperf -f hostfile_gpcheckperf -r ds -D -d /data1/primary -d /data2/primary -d /data1/mirror -d /data2/mirror > perfcheck.out
Инициализация Greenplum
Для инициализации Greenplum необходимо с мастер-хоста выполнить следующие действия:
-
Создать файл
hostfile_gpinitsystemсо списком сегмент-хостов Greenplum -
Перенести шаблон инициирующей конфигурации:
- Заполнить инициирующую конфигурацию согласно таблице параметров:
| Параметр | Пример заполнения | Обязательный | Описание |
|---|---|---|---|
ARRAY_NAME |
Greenplum Data Platform | * | Имя кластера |
MACHINE_LIST_FILE |
— | * | При запуске без флага -h указывает на файл со списком сегментов |
SEG_PREFIX |
gpseg | * | Задает префикс названий папок для сегментов |
PORT_BASE |
6000 | * | Базовый номер порта, по которому рассчитываются номера портов сегментов |
DATA_DIRECTORY |
declare -a DATA_DIRECTORY=(//primary //primary //primary //primary //primary //primary //primary //primary) | * | Указывает директории, в которых нужно создать директории под сегменты. Количество директорий задает количество сегментов на хосте (в данном случае 8) |
MASTER_HOSTNAME |
— | * | DNS имя мастера |
MASTER_DIRECTORY |
//master | * | Директория для системных каталогов мастера |
MASTER_PORT |
5432 | * | Порт для клиентского подключения |
TRUSTED_SHELL |
ssh | * | Протокол, по которому происходит взаимодействие с сегментами |
CHECK_POINT_SEGMENTS |
8 | * | Максимальное расстояние между контрольными точками WAL в сегментах файла журнала |
ENCODING |
UNICODE | * | Задает кодировку |
DATABASE_NAME |
gpdb | * | Название базы данных |
MIRROR_PORT_BASE |
7000 | * | Базовый номер порта для зеркал |
MIRROR_DATA_DIRECTORY |
declare -a MIRROR_DATA_DIRECTORY=(//mirror //mirror //mirror //mirror //mirror //mirror //mirror //mirror) | * | Аналогично DATA_DIRECTORY, только для зеркал |
QD_PRIMARY_ARRAY, PRIMARY_ARRAY, MIRROR_ARRAY |
— | * для флага -I | Задает альтернативный формат конфигурации инициализации |
HEAP_CHECKSUM |
— | * | — |
HBA_HOSTNAMES |
— | * | — |
- Запустить утилиту инициализации Greenplum:
- Выставить часовой пояс Europe/Moscow:
- Заполнить переменные окружения на мастер и резервном мастер-хостах Greenplum:
echo "export MASTER_DATA_DIRECTORY=//master/gpseg-1" >> .bashrc
echo "export LD_PRELOAD=/lib64/libz.so.1 ps" >> .bashrc
- Инициировать резервный мастер-хост:
Создание ресурсных групп
Для включения ресурсных групп необходимо выполнить следующие шаги:
- На каждом хосте GP создать файл конфигурации для cgroups
/etc/cgconfig.d/gpdb.confсо следующим содержанием:
group gpdb {
perm {
task {
uid = gpadmin;
gid = gpadmin;
}
admin {
uid = gpadmin;
gid = gpadmin;
}
}
cpu {
}
cpuacct {
}
cpuset {
}
memory {
}
}
- Установить libcgroup-tools на каждом хосте GP при помощи менеджера пакетов (необходим доступ в интернет или локальный репозиторий):
sudo yum install libcgroup-tools # CentOS
sudo apt install cgroup-tools # Ubuntu
sudo cgconfigparser -l /etc/cgconfig.d/gpdb.conf
- На каждом хосте Greenplum запустить сервисы cgroups:
- Выставить ресурсные группы в качестве ресурсного менеджера Greenplum:
- Перезапустить кластер GP
О выявленных проблемах и замечаниях просьба обращаться к Марку Лебедеву.
К обращению приложите файл logfile из директории дистрибутива и подробное описание ошибки с указанием параметров среды выполнения.