Через какие интерфейсы пользователи и клиентские приложения могут подключиться к базе данных Greenplum, как происходит подключение, какие параметры и конфигурации надо задать при этом, а также почему для этого так важна библиотека libpq.
Параметры подключения к Greenplum
Пользователи могут подключаться к базе данных Greenplum с помощью клиентской программы, совместимой с PostgreSQL, например psql. Подключение всегда выполняется через координатора, непосредственно сегменты не могут принимать клиентские запросы. При установке подключения с координатором Greenplum, необходимо указать следующие параметры в клиентской программе:
- Название приложения (Application name), которое подключается к базе данных. Значением по умолчанию, хранящимся в параметре подключения application_name, является psql;
- Имя базы данных (Database name), к которой следует подключиться. Для только что инициализированной системы надо использовать базу данных PostgreSQL для самого первого подключения.
- Имя хоста (Host name) координатора Greenplum, по умолчанию локальный хост;
- Порт (Port) — номер порта, на котором работает экземпляр координатора Greenplum, по умолчанию 5432;
- Имя пользователя (User name) или пользовательская роль для подключения, которая не обязательно должна совпадать с именем пользователя ОС. Каждая СУБД Greenplum имеет одну учетную запись суперпользователя, которая создается автоматически во время инициализации. Эта учетная запись имеет то же имя, что и имя ОС пользователя, инициализировавшего систему Greenplum, обычно это gpadmin.
Пользователи могут подключаться к базе данных Greenplum с помощью различных клиентских приложений. Например, psql предоставляет интерактивный CLI-интерфейс. Также можно создать свое собственное клиентское приложение, взаимодействующее с Greenplum, используя стандартные интерфейсы такие как ODBC и JDBC. Впрочем, совсем не обязательно писать новый код – большинство клиентских инструментов, использующих ODBC и JDBC, можно настроить для подключения к Greenplum.
Если же есть потребность или желание разработать собственное клиентское приложение, PostgreSQL, на которой основана MPP-СУБД Greenplum, предоставляет ряд драйверов баз данных для популярных API, которые также можно использовать с Greenplum. Эти драйверы доступны для отдельной загрузки: ODBC, JDBC, Perl DBI, Python DBI, libpq C Library. Каждый драйвер, кроме libpq, поставляемого с PostgreSQL, является независимым проектом разработки PostgreSQL и должен быть загружен, установлен и настроен для подключения к Greenplum.
Программный доступ к данным и расширение возможностей с библиотекой libpq
Чтобы организовать доступ к Greenplum через API, сперва следует загрузить платформу языка программирования и API из соответствующего источника. Например, Java Development Kit (JDK) и JDBC API от Oracle. Далее надо написать свое клиентское приложение в соответствии со спецификациями API, учитывая поддержку SQL в Greenplum. При этом придется загрузить соответствующий драйвер и настроить подключение к экземпляру координатора Greenplum.
Чтобы база данных Greenplum могла принимать подключения удаленных клиентов, необходимо настроить в экземпляре координатора разрешения подключений от клиентских хостов и пользователей. Это делается путем добавления соответствующих записей в файл конфигурации pg_hba.conf, расположенный в каталоге данных экземпляра координатора. Если экземпляр координатора не работает, клиентские подключения невозможны. Убедиться, что СУБД Greenplum запущена, можно с помощью утилиты gpstate, запущенной на хосте-координаторе.
В случае сетевых проблем необходимо проверить доступность хоста-координатору с помощью команды ping. Если имена и IP-адреса хостов Greenplum не разрешены, запросы и подключения не будут выполняться. Для некоторых операций подключения к координатору используют локальный хост, а для других нужно фактическое имя хоста. Поэтому следует разрешить и то, и другое, задав правильные имена и IP-адреса хостов в файле /etc/hosts координатора и всех сегментов. Разумеется, IP-адрес 127.0.0.1 должен разрешаться в localhost.
Клиенты подключаются по протоколу TCP к главному экземпляру Greenplum через порт подключения клиента, по умолчанию 5432. Перенастроить этот порт можно в файле конфигурации postgresql.conf. Клиентские соединения используют API PostgreSQL libpq. Интерфейс командной строки psql, несколько утилит Greenplum и программные API для конкретных языков напрямую используют библиотеку libpq или реализуют протокол libpq внутри себя. Впрочем, библиотека libpq нужна как для клиентского подключения к базе данных, так и для выполнения запросов из кода приложения.
В частности, она используется во встраиваемом SQL, который имеет ряд преимуществ по сравнению с другими методами вызова SQL-команд из кода C. Код SQL в клиентском приложении проверяется на синтаксическую правильность во время сборки. Программы, написанные для интерфейса встраиваемого SQL, представляют собой обычные программы на C с добавленным специальным кодом, который выполняет действия, связанные с базой данных. При этом используется ECPG — встроенный SQL-препроцессор для программ, написанных на языке C. Он преобразует программы на C, содержащие SQL-выражения, заменяя их вызовами встроенных функций. Получаемые на выходе файлы можно затем скомпилировать и скомпоновать. Преобразованные приложения ECPG-процессора вызывают функции в библиотеке libpq через ecpglib-библиотеку встраиваемого SQL и взаимодействуют с сервером по обычному клиент-серверному протоколу.
Greenplum можно расширить для запуска пользовательского кода в отдельных процессах, которые запускаются, останавливаются и контролируются PostgreSQL, что позволяет им иметь время жизни, тесно связанное со статусом сервера. Эти процессы могут подключаться к области общей памяти базы данных Greenplum и внутренним базам данных, выполнять несколько транзакций последовательно, как обычный серверный процесс, подключенный к клиенту. Кроме того, связавшись с библиотекой libpq, они могут подключаться к серверу и вести себя как обычное клиентское приложение.
Однако, при использовании фоновых рабочих процессов есть значительные риски для надежности и безопасности, поскольку они написаны на языке C и имеют неограниченный доступ к данным. Поэтому администратор кластера Greenplum при включении фоновых рабочих процессов, должен проявлять крайнюю осторожность, разрешая это делать лишь тщательно проверенным модулям.
Фоновые рабочие процессы могут быть инициализированы во время запуска базы данных Greenplum путем включения имени модуля в параметр конфигурации сервера shared_preload_libraries. Модуль, желающий запустить фоновый рабочий процесс, может зарегистрировать его, вызвав метод RegisterBackgroundWorker(BackgroundWorker *worker) из своего метода инициализации _PG_init(). Фоновые рабочие процессы также можно запустить после запуска системы, вызвав функцию RegisterDynamicBackgroundWorker(BackgroundWorker *worker, BackgroundWorkerHandle **handle). В отличие от RegisterBackgroundWorker(), который можно вызывать только из PostgreSQL-мастера, RegisterDynamicBackgroundWorker() необходимо вызывать из обычного бэкенда.
Узнайте больше подробностей про администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники