VERTICA Data Base. Построение кластера из 3х нод Community версии 9.1 на Centos7.

Итак, Вертика — это реляционная база данных специализирующаяся на анализе огромного потока аналитических данных в real-time режиме.
 
Почему Вертика?
 
Особенностью хранения и обработки информации данной субд является использование столбцов вместо строк, что из-за особенности реализации кластера в данной субд несет линейное увеличение производительности в зависимости от количества и качества серверных мощностей, а также реализует возможность более простого алгоритма поиска по нужным полям. «Столбец – это последовательность значений одного и того же поля, а поскольку в нем могут встречаться повторяющиеся значения (как нулевые, так и, например, относящиеся к одному и тому же времени или одному и тому же имени объекта), то после сортировки сжатие данных оказывается эффективным».
 
«Сжатие применяется для упаковки столбцов путем записи числа повторений вместе с собственно значением поля, использования дельта-кодирования последовательных значений, сжатия LZ (Lempel-Ziv) для столбцов с большим количеством уникальных значений и неотсортированных колонок. Кроме того, столбцы упаковываются с помощью специальных алгоритмов компрессии для чисел в формате с плавающей запятой, для дат и ряда других типов полей. В результате, степень сжатия достигает 90 %, а на таких данных, как журналы телекоммуникационных сетей еще выше, причем способ компрессии для каждого типа данных выбирается автоматически».
 
Так же одной из отличительных особенностей является, в большинстве случаев, возможность выполнения операций без декомпрессии, что значительно снижает нагрузку на систему.
 
Можно упомянуть и специальный механизм обеспечения отказоустойчивости K-Safety, при использовании которого «копии каждого сегмента базы данных сохраняются на К+1 узлах кластера, и при отказе K узлов можно автоматически восстановить базу данных. Если необходимо заменить неисправный узел или расширить кластер, часть объектов с исправных узлов переносится на добавляемые машины, при этом поддерживаются целостность и заданное значение параметра K. K-Safety обеспечивает не только увеличение надежности, но и увеличение производительности пропорционально величине К, поскольку К+1 узлов могут обрабатывать аналитические запросы, относящиеся к одним и тем же данным».
 
«Кластер не содержит разделяемых ресурсов, следовательно, не тратит время на ожидание их блокировок и потому не нуждается в средствах управления распределенными блокировками. Важной особенностью архитектуры Вертика является полный отказ от ведения журналов, поскольку в большинстве случаев журнал становится узким местом при загрузке данных – вместо этого поддерживается множество копий колонок на разных узлах кластера, что и способствует повышению масштабируемости и отказоустойчивости».
 
«Согласно самой сути Больших Данных, невозможно остановить выполнение запросов на загрузку данных – это непрерывный поток. Однако бизнесу нужна аналитика в реальном времени, поэтому в Вертика предусмотрен специальный механизм непрерывной загрузки данных без снижения скорости их чтения. Чтение происходит в режиме snapshot isolation mode (изоляции мгновенного снимка): читается последняя целостная копия данных, не зависящая от текущих вставок и удалений, поэтому блокировки базы данных на запись не требуется. Кроме того, запись ведется в специальную область WOS (Write Only Store) оперативной памяти, а чтение происходит с дисков – из области хранения типа ROS (Read Only Store), причем информация в WOS не сортируется и не индексируется. Перенос записей из WOS в ROS происходит большими блоками, автоматически и асинхронно с помощью специального процесса перемещения записей Tuple Mover. Так как этот процесс оперирует целиком всей WOS, то перемещение записей может быть очень эффективным, с одновременной сортировкой многих записей и переносом их на диск в пакетном режиме».
 
Про остальные особенности построения и использования данной субд Вы можете почитать на оф сайте проекта – https://www.vertica.com/.
 
В данной статье речь пойдет про построение кластера из 3х нод Community версии 9.1 на Centos7.
 
0. Подготовка к инсталляции кластера.
 
1. Убедимся, что Sudo установлен на всех нодах и пользователь, от которого пойдет установка, указан в списке sudoers.
2. Настроен беспарольный ssh-доступ между нодами для пользователя системы, который будет указан как Dbadmin при установке.
3. На нодах открыты следующие порты:
22(tcp) – ssh
5433(tcp + udp) – vsql (вертика клиент)
5434(tcp) – кластерное взаимодействие
5444(tcp) – Консоль управления (MC) и вертика-агент.
5450(tcp) – Порт веб-интерфейса консоли управления(MC)
4803(tcp) – Клиенсткие подключения
4804,4803,6543(udp) – Подключение и монитор даемонов.
4. Под swap выделено минимум 2Гб, disk block size задан 4096 bytes ( по умолчанию у ext4 файловой системы),
минимум выделен 1 Гб озу для 1 логического процессора.
5. На все ноды скачен в заданную директорию и проинсталлирован установочный пакет (rpm\deb).
6. Крайне желательна установка и настройка демона NTP на всех нодах.
7. Настройте файл hosts следующим образом:
 
а) убедитесь в том, что файл /etc/hosts существует. Убедитесь в том, что этот файл содержит адрес обратной связи 127.0.0.1 только с полным и кратким именем localhost.
 
б) а также следует добавить все хосты, которые станут частью кластера

#Vertica cluster
10.10.10.1     DBname01.node0001
10.10.10.2     DBname02.node0002
10.10.10.3     DBname03.node0003

 

1. Установка и создание кластера
 
/opt/vertica/sbin/install_vertica – основной скрипт установки, при выполнении желательно использовать sudo или быть root.
 
Основные параметры, которые будут использоваться в моем примере:
 
--rpm — rpm пакет установки
--license — файл лицензии
--ssh-identity — root private key file
--hosts – список хостов
--point-to-point – использование подключения point-to-point между нодами в кластере.
Крайне желательный параметр для нод, которые расположены не в одной подсети, или если инсталляция производится в виртуальной среде, независимо от типа подсети.
--dba-user – имя администратора базы данных, под ним будет запускаться Administration Tools.
--dba-user-password – указание пароля для пользователя при установке.
--accept-eula – принятие EULA соглашения
--failure-threshold — остановка инсталляции при обнаружении несоблюдения одного из пунктов рекомендаций по настройке системы.
 
Пример рабочей команды:

/opt/vertica/sbin/install_vertica --rpm /home/centos/*.rpm --hosts 10.0.0.1,10.0.0.2,10.0.0.3 --dba-user %User -p %password --ssh-identity /home/centos/.ssh/id_rsa --point-to-point --accept-eula --license /opt/vertica/config/licensing/vertica_community_edition.license.key –failure-threshold 

 

2. Создание базы данных
 
После успешной инсталляции кластера базу данных можно создать из “admintools”, консольного интерфейса управления базой данных в интерактивном режиме, запустив :

su %User -c “/opt/vertica/bin/admintools” > Configuration Menu > Create Database

либо в неинтерактивном режиме:

su %User -c "/opt/vertica/bin/admintools -t create_db -d %db_name -s 10.0.0.1,10.0.0.2,10.0.0.3 -l /opt/vertica/config/licensing/vertica_community_edition.license.key"

основные параметры, которые будут использоваться в моем примере:
 
-d %db_name – задать имя базы данных
-l – файл лицензии
-s – список хостов на которых будет создана база данных
--skip-fs-checks – пропуск проверки требований для файловой системы
 
Так же создать базу данных можно через Консоль управления (MC), выбрав существующую инфраструктуру, Create Database, далее следовать интерактивному помощнику.
 
Проверить создалась ли база данных можно следующей командой:

/opt/vertica/bin/vsql -U %User -c "SELECT NOW();

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

su %User -c “/opt/vertica/bin/admintools -t view_cluster”

 

3. Установка Консоли управления (MC)
 
Убедитесь, что свободны порты 22, 5444 и 5450.
Убедитесь, что на всех нодах кластера активен vertica-agent (/opt/vertica/sbin/vertica_agent status)
a)rpm -Uvh vertica-console-current-version.*.rpm
b)systemctl enable vertica-consoled
c)systemctl start vertica-consoled
 
MC будет доступен по:

https://Имя_или_IP_адрес_сервера:5450/webui/


 

Импортирование кластера происходит в интерактивном режиме, следовав инструкциям wizardпосле инициализации, залогинившись администратором выберите Databases and Clusters, cluster cube, выберите View в диалоговом окне, слева страницы выберите Import Discovered. Начнется интерактивный диалог, который предложит выбрать импортируемую базу данных, задайте пароль и логин и нажмите Import. После MC подключится к выбранный базе данных и откроется страница управления, которая покажет кластерные ноды.

 

 

 

 

4. Создание резервных копий \ Восстановление
 
Вертика поддерживает несколько методов создания резервных копий, но в данной статье пойдет речь прежде всего про два из них, это создание полных локальных резервных копий и восстановление из них, и копирование кластера на другой кластер.
 
Убедитесь в том, что исходный и целевой кластеры Вертика имеют одинаковое количество узлов.
 
Вам может потребоваться добавление имени хоста каждого узла целевого кластера в файл hosts на исходном и целевом кластере для всех нод. Поскольку этот экземпляр базы данных инициируется с одного из узлов исходного кластера, все файлы hosts исходных узлов должны содержать имена целевых хостов.
 
На целевом кластере должен быть создан тот же пользователь, с тем же паролем и пустой базой данных с тем же именем, директория хранения базы данных тоже должна совпадать, а также должна совпадать версия Вертики.
 
Идентификация имени узла базы данных:

Su %User -c “/opt/vertica/bin/admintools -t node_map -d %Db_name”

 

Создание локальной резервной копии:
 
1. Создаем конфигурационный файл бекапирования, взяв за основу пример backup_restore_full_local.ini с оф сайта https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/BackupRestore/SampleConfigFiles/full_local_backup_restore.htm
 
Изменив некоторые интересующие нас параметры:
[Mapping]
Указание директории хранения бекапов относительно нод.
Задается по следующему принципу:
node_name = backup_host:backup_dir
Пример:
v_db_node0001 = []:/home/dbadmin/backups
[Database]
dbName = %имя базы данных
Пример:
dbName = db
 
dbUser = %имя пользователя с правами на создание бекапа \ администратора базыданных
Пример:
dbUser = dbadmin
 
dbPassword = %пароль от базы данных%
Пример:
dbPassword = 123456
 
2.Создаем директорию, где будет создана резервная копия

mkdir /home/dbadmin/backups && chown verticadba:verticadba /home/dbadmin/backups

3. Инициируем хранилище

su - %User -c "/opt/vertica/bin/vbr.py --task init --config-file /home/verticadba/backup_restore_full_local.ini"

4. Тестовый запуск без внесения изменения на диск

su - %User -c "/opt/vertica/bin/vbr.py -t backup --config-file /home/verticadba/ backup_restore_full_local.ini --dry-run"

5. Запускаем бекапирование

su - %User -c "/opt/vertica/bin/vbr.py --task backup --config-file /home/verticadba/backup_restore_full_local.ini"

6. Смотрим список сделанных бекапов

su - %User -c "/opt/vertica/bin/vbr.py --task listbackup --config-file /home/verticadba/backup_restore_full_local.ini"

 

Восстановление из локальной резервной копии
 
После успешного создания бекапа восстановление возможно коммандой:

su - %User -c "/opt/vertica/bin/vbr --task restore --config-file /home/verticadba/backup_restore_full_local.ini"

 

Копирование кластера:
 
1. Создаем конфигурационный файл бекапирования, взяв за основу пример copycluster.ini
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/BackupRestore/SampleConfigFiles/copycluster.htm%3FTocPath%3DAdministrator’s%2520Guide%7CBacking%2520Up%2520and%2520Restoring%2520the%2520Database%7CSample%2520VBR%2520.ini%2520Files%7C_____1
Изменив некоторые интересующие нас параметры:
[Mapping]
Указывает соотношение нод источников и целевых нод.
Задается по следующему принципу:
node_name = new_host/ip (no defaults)
 
Пример:
v_exampledb_node0001 = destination_host1.example
[Database]
dbName = %имя базы данных
Пример:
dbName = db
 
dbUser = %имя пользователя с правами на создание бекапа \ администратора базыданных
Пример:
dbUser = dbadmin
 
dbPassword = %пароль от базы данных%
Пример:
dbPassword = 123456
 
2. Инициируем кластеры

su - %User -c "/opt/vertica/bin/vbr.py --task init --config-file /home/verticadba/copycluster.ini"

3. Тестовый запуск без внесения изменения на диск

su - %User -c "/opt/vertica/bin/vbr.py -t copycluster --config-file /home/verticadba/ copycluster.ini –dry-run"

4. Останавливаем базу данных на кластере-источнике.

su - %User -c "/opt/vertica/bin/admintools -t stop_db -d db-name”

5. Запускаем копирование

su - %User -c "/opt/vertica/bin/vbr.py --task copycluster --config-file /home/verticadba/copycluster.ini"

 

Если имеет место несовпадение количества нод и поэтому нет возможности восстановить резервную копию, то данный аспект можно изменить с помощью скрипта /opt/vertica/sbin/update_vertica (который служит для изменения базовых конфигураций Вертики, которые задаются при установке) сократить кол-во нод или наоборот повысить их количество.
 
Примеры использования:
 
удаление нод с заданными ip из кластера

opt/vertica/sbin/update_vertica --remove-hosts %IP% --ssh-identity /home/centos/.ssh/id_rsa –failure=NONE

или добавление нод с указанными ip в кластер

/opt/vertica/sbin/update_vertica --add-hosts %IP% --ssh-identity /home/centos/.ssh/id_rsa –failure=NONE

 

5. Инструменты
 
Вертика обладает прекрасным механизмом импорта из csv, json. Пример использования:

COPY %название таблицы FROM '/opt/vertica/bin/name.csv ' DELIMITER ',' DIRECT;

COPY %название таблицы FROM '/opt/vertica/bin/name.json' WITH PARSER JsonParser();

 

Администрировать Вертику можно с помощью нескольких утилит:
 
Командная строка vsql
Эта утилита устанавливается по вместе с самой СУБД или отдельно пакетом с оф. Сайта и запускается командой:

vsql -h Имя_или_IP_адрес_сервера -p Порт_по_умолчанию_5433 -U Имя_пользователя Имя_БД

Administration Tools
Тоже встроенная утилита, работающая из консоли с некоторым графическим интерфейсом. Запустить её можно командой:

/opt/vertica/bin/admintools

Management Console
Отдельный устанавливаемый инструмент, работающий из браузера. Для входа набираем следующую строку:

https://Имя_или_IP_адрес_сервера:5450/webui/

Скачать Management Console можно на официальном сайте проекта.
 
Как визуальный программный клиент для Вертики может использоваться Dbeaver.

 

Статьи

Оставить комментарий