Конфигурация¶
Конфигурация TCS¶
В этом разделе пошагово описаны типовые сценарии конфигурирования TCS.
См. также:
Настройка кластера¶
Настройка кластера в режиме проксирования¶
Примечание
Убедитесь, что используется инсталлятор ATE требуемой версии.
Укажите следующие параметры в конфигурации TCS:
Настройте конфигурацию экземпляров Storage:
a. Задайте набор реплик с экземплярами типа Storage.
Примечание
В текущей версии TCS в режиме проксирования поддерживается только один набор реплик типа Storage.
b. Для всех экземпляров Storage настройте поддержку драйверов JDBC/ADBC.
Настройте конфигурацию экземпляров Scheduler:
a. Задайте набор реплик с экземплярами типа Scheduler.
Примечание
В текущей версии TCS в режиме проксирования поддерживается только один набор реплик типа Scheduler.
b. Для экземпляров Scheduler задайте параметр
mode.proxy.target_replicasetи укажите название набора реплик Storage, куда должны перенаправляться запросы.roles_cfg: tcs_roles/scheduler: mode: proxy: target_replicaset: storages
Настройка кластера в режиме шардирования¶
Настройте конфигурацию экземпляров Storage:
a. Задайте нужное количество наборов реплик (шардов) с экземплярами типа Storage.
Примечание
Рекомендуется указывать как минимум 2 шарда. Но можно использовать и 1 шард, если вставка будет происходить через экземпляр Scheduler, используя его ADBC/JDBC интерфейс.
b. Для всех экземпляров Storage:
Задайте параметр
enable_sharding:true.
roles_cfg: tcs_roles/storage: enable_sharding: true
Настройте поддержку драйверов JDBC/ADBC.
Настройте конфигурацию экземпляров Scheduler:
a. Задайте набор реплик с экземплярами типа Scheduler.
Примечание
В текущей версии TCS в режиме шардирования поддерживается только один набор реплик типа Scheduler.
b. Для всех экземпляров Scheduler задайте параметр
mode.sharded.bucket_countи укажите число на 2-3 порядка больше количества шардов в кластере.roles_cfg: tcs_roles/scheduler: mode: sharded: bucket_count: 1000
Настройка драйверов JDBC/ADBC¶
Для экземпляров Storage задайте параметры в разделе arrow_flight_sql:
(обязательно)
credentials– логин и пароль (параметрыusernameиpassword).listen– идентификатор URI с номером порта для соединений по SQL-протоколу Apache Arrow Flight. По умолчанию:0.0.0.0:50051.advertise.client– идентификатор URI с номером порта или доменный Unix-сокет, на котором экземпляр хранилища виден клиентским приложениям в соединениях по SQL-протоколу Apache Arrow Flight.advertise.sharding.uri– идентификатор URI с номером порта для связи данного экземпляра хранилища с экземплярами Scheduler по SQL-протоколу Apache Arrow Flight.session_expiration_secs– максимальная длительность сессии (в секундах). По умолчанию:28800(8 часов).
Примечание
Если экземпляры Storage запущены на одном хосте, то для них нужно явно указать разные номера портов в параметре listen.
Важно
Если порт listen, указанный при настройке Arrow Flight SQL для экземпляра Storage, был занят любым другим сервисом на момент настройки,
то операции с данными, направленные на этот порт, не отработают для этого экземпляра Storage. Для того чтобы убедиться, что порт
доступен и подключен, необходимо после настройки проверить журнал экземпляра Storage на наличие ошибки Arrow Flight SQL failed to serve on {addr}: {e}
где addr – это порт, на котором пытался подняться интерфейс Arrow Flight SQL, а e – произошедшая ошибка.
Отсутствие этой ошибки укажет на то, что соединение Arrow Flight доступно для экземпляра Storage.
Пример:
roles_cfg:
tcs_roles/storage:
arrow_flight_sql:
listen: "10.95.207.113:50051"
credentials:
username: tcs
password: tcs
advertise:
client: "10.95.207.113:50051"
sharding:
uri: "10.95.207.113:50051"
Настройка подключения с шифрованием¶
TCS поддерживает подключение с шифрованием, где все входящие внешние запросы к сервисам осуществляются по HTTPS.
Примечание
Для внутрикластерных запросов (между экземплярами TCS и etcd) подключение с шифрованием не поддерживается.
Настройка подключения по HTTPS производится в конфигурационных файлах,
в настройках роли каждого экземпляра Storage (roles_cfg/tcs_roles/storage/):
transport— протокол приема входящих сообщений:plain(по умолчанию) – входящие сообщения будут приниматься по HTTP.tls– входящие сообщения будут приниматься по HTTPS. Если указано это значение, то обязательно должны быть указаныtls_cert_fileиtls_key_file.
tls_cert_file— путь к TLS-сертификату в формате PEM.tls_ca_file— путь к TLS-сертификату удостоверяющего центра в формате PEM (опционально, если не используется самоподписанный сертификат).tls_key_file— путь к приватному ключу от сертификата.tls_ciphers— список шифров для версий TLS до 1.2. Шифры разделяются символом:.tls_ciphersuites— список шифров для TLS 1.3. Шифры разделяются символом:.
Если иные настройки не указаны, то по умолчанию используются рекомендации по настройке TLS на сервере Mozilla Intermediate v5.
TCS поддерживает работу с шифрами ГОСТ TLS. Для настройки работы с шифрами ГОСТ требуются следующие настройки:
указать шифры в
tls_ciphersилиtls_ciphersuites.установить в систему криптографический модуль и подключить его в OpenSSL. Это нужно сделать как на сервере, так и у всех клиентов.
Примеры¶
Минимальная конфигурация с самоподписанным сертификатом¶
tarantool_column_store.s1-1:
advertise_uri: localhost:3301
http_port: 8081
memtx_memory: 2147483648 # 2gb
log: ''
roles_cfg:
tcs_roles/storage:
transport: tls
tls_cert_file: certs/cert.pem
tls_key_file: certs/key.pem
Конфигурация с сертификатом, выданным CA¶
tarantool_column_store.s1-1:
advertise_uri: localhost:3301
http_port: 8081
memtx_memory: 2147483648 # 2gb
log: ''
roles_cfg:
tcs_roles/storage:
transport: tls
tls_cert_file: certs/cert.pem
tls_ca_file: certs/ca.pem
tls_key_file: certs/key.pem
Конфигурация с шифрами ГОСТ¶
tarantool_column_store.s1-1:
advertise_uri: localhost:3301
http_port: 8081
memtx_memory: 2147483648 # 2gb
log: ''
roles_cfg:
tcs_roles/storage:
transport: tls
tls_cert_file: certs/cert.pem
tls_key_file: certs/key.pem
tls_ciphers: 'GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:LEGACY-GOST2012-GOST8912-GOST8912:IANA-GOST2012-GOST8912-GOST8912:GOST2001-GOST89-GOST89'
tls_ciphersuites: ''
Настройка частоты обновлений представления для чтения¶
Представление для чтения обновляется раз в столько миллисекунд,
сколько указано в параметре rv_update_ms. По умолчанию, 100.
При необходимости можно задать другое значение. Пример:
roles_cfg:
tcs_roles/storage:
rv_update_ms: 100000
Настройка максимального времени выполнения запросов¶
В TCS заданы ограничения по умолчанию на максимальное время выполнения запросов:
для всех типов запросов, кроме аналитических расчетов: 5000 мс
для каждого счетчика в аналитических расчетах: 4500 мс
По истечении этого времени TCS прерывает обработку запроса и присылает ответ
HTTP 408 Request timeout.
При необходимости эти значения можно изменить в консоли с помощью Lua-инструкций на всех серверах с Tarantool:
require('app.roles.tcs.storage.api').configure_http_timeout_ms({timeout_ms})
require('app.roles.tcs.storage.api').configure_computation_max_duration_ms({duration_ms})
Перезагрузка при этом не требуется.
Настройка параллельного чтения колонок¶
Для параллельного чтения колонок можно задать количество потоков обработки запроса
(партиций) в параметре partition_count. По умолчанию, 1.
При необходимости можно увеличить это значение, чтобы ускорить обработку запросов.
Пример:
roles_cfg:
tcs_roles/storage:
partition_count: 10
Рекомендуется оставлять значение по умолчанию, либо задавать значение в два раза меньше количества ядер CPU.
Настройка аварийного переключения¶
В конфигурации можно задать вид аварийного переключения в случае сбоя экземпляра в наборе реплик:
manual– ручной режимsupervised– автоматический режим (требует запуска отдельного экземпляра Tarantool, который выступает в качестве координатора отказоустойчивого кластера)
Для автоматического режима также можно указать дополнительные параметры:
failover:
call_timeout: 1
connect_timeout: 1
lease_interval: 10
probe_interval: 1
renew_interval: 10
stateboard:
keepalive_interval: 15
renew_interval: 3
Для значений параметров должна соблюдаться следующая формула:
lease_interval > probe_interval + renew_interval
Описания параметров см. в документации Tarantool.
Настройка портов для мониторинга¶
В конфигурации TCS можно указать номер порта для передачи метрик мониторинга
на HTTP-адресе /metrics с экземпляров Storage.
Можно указать следующие номера портов:
для метрик TCS (по умолчанию
7777):http: enabled: true listen: 0.0.0.0:7777
для метрик Tarantool (по умолчанию
8081):roles.metrics-export: http: - listen: 0.0.0.0:8081
Конфигурация данных¶
Модель данных в TCS задается с помощью инструкций SQL DDL и не является частью конфигурации. См. подробнее в разделе Модель данных.
Конфигурация переменных¶
При необходимости с помощью инструкций SET и SHOW можно установить и проверить значения переменных, которые задают правила выполнения запросов в рамках текущей сессии.
Например:
SET datafusion.execution.batch_size to 10000
SHOW datafusion.execution.batch_size
name value
0 datafusion.execution.batch_size 10000
Поддерживаются следующие переменные.
datafusion.execution.batch_size¶
Размер пакета (batch) по умолчанию при создании новых пакетов. Это особенно полезно для пакетов с буферизацией в памяти, поскольку создание небольших пакетов приведет к слишком большому потреблению памяти для метаданных.
Значение по умолчанию: 8192
datafusion.execution.coalesce_batches¶
Если значение равно true, пакеты записей (record batches) будут проверяться каждым оператором, и небольшие пакеты будут объединяться в более крупные. Это полезно при использовании высокоизбирательных фильтров или объединений, которые могут создавать небольшие пакеты на выходе. Целевой размер пакета определяется параметром конфигурации.
Значение по умолчанию: TRUE
datafusion.execution.collect_statistics¶
Нужно ли собирать статистику при первом создании таблицы. Не влияет ни на что после создания таблицы. Применяется к ListingTableProvider по умолчанию.
Значение по умолчанию: FALSE
datafusion.execution.target_partitions¶
Количество партиций для выполнения запроса. Увеличение количества партиций может увеличить параллелизм. По умолчанию используется количество ядер процессора в системе.
Значение по умолчанию: 0
datafusion.execution.time_zone¶
Часовой пояс по умолчанию. Некоторые функции, например, EXTRACT(HOUR from SOME_TIME), сдвигают базовую дату-время в соответствии с этим часовым поясом, а затем извлекают час.
Значение по умолчанию: +00:00
datafusion.execution.parquet.enable_page_index¶
(чтение) Если значение равно true, считывать метаданные на уровне страницы Parquet data (Page Index), если они присутствуют, для уменьшения ввода-вывода и количества из расшифрованных строк.
Значение по умолчанию: TRUE
datafusion.execution.parquet.pruning¶
(чтение) Если значение равно true, программа чтения parquet пытается пропустить целые группы строк на основе предиката в запросе и метаданных (минимальных/максимальных значений), хранящихся в файле parquet.
Значение по умолчанию: TRUE
datafusion.execution.parquet.skip_metadata¶
(чтение) Если значение равно true, программа чтения parquet пропускает необязательные встроенные метаданные, которые могут быть в схеме файла. Этот параметр может помочь избежать конфликтов схем при запросе нескольких файлов parquet со схемами, содержащими совместимые типы, но разные метаданные.
Значение по умолчанию: TRUE
datafusion.execution.parquet.metadata_size_hint¶
(чтение) Если значение указано, программа чтения parquet попытается извлечь последние байты size_hint файла parquet оптимистично. Если не указано, требуется выполнить два чтения: одно чтение для извлечения 8-байтового нижнего колонтитула parquet, а другое - для извлечения длины метаданных, закодированных в нижнем колонтитуле.
Значение по умолчанию: NULL
datafusion.execution.parquet.pushdown_filters¶
(чтение) Если значение равно true, во время операции декодирования parquet применяются выражения фильтра, чтобы уменьшить количество декодируемых строк. Такую оптимизацию иногда называют «поздней материализацией».
Значение по умолчанию: FALSE
datafusion.execution.parquet.reorder_filters¶
(чтение) Если значение равно true, выражения фильтра, вычисленные во время операции последовательного декодирования, будут эвристически переупорядочены, чтобы минимизировать затраты на вычисление. Если false, фильтры применяются в том же порядке, что и в запросе
Значение по умолчанию: FALSE
datafusion.execution.parquet.schema_force_view_types¶
(чтение) Если значение равно true, parquet reader будет считывать столбцы Utf8/Utf8Large с помощью Utf8View и Binary/BinaryLarge с помощью BinaryView.
Значение по умолчанию: TRUE
datafusion.execution.parquet.binary_as_string¶
(чтение) Если значение равно true, parquet reader будет считывать столбцы Binary/LargeBinary с Utf8, а BinaryView - с помощью Utf8View. В файлах Parquet, созданных некоторыми устаревшими редакторами, неправильно установлен флаг UTF8 для строк, в результате чего столбцы string загружаются как большие двоичные объекты.
Значение по умолчанию: FALSE
datafusion.execution.parquet.coerce_int96¶
(чтение) Если значение равно true, parquet reader будет считывать столбцы физического типа int96 как исходящие из другого разрешения, отличного от наносекундного. Это полезно для чтения данных из таких систем, как Spark, которые хранят временные метки с разрешением в микросекунды в int96, что позволяет записывать значения с бОльшим диапазоном дат, чем 64-разрядные временные метки с наносекундным разрешением.
Значение по умолчанию: NULL
datafusion.execution.parquet.bloom_filter_on_read¶
(чтение) При чтении файлов parquet использовать любые доступные bloom-фильтры.
Значение по умолчанию: TRUE
datafusion.execution.parquet.data_pagesize_limit¶
(запись) Максимальный размер страницы данных в байтах.
Значение по умолчанию: 1048576
datafusion.execution.parquet.write_batch_size¶
(запись) write_batch_size в байтах.
Значение по умолчанию: 1024
datafusion.execution.parquet.writer_version¶
(запись) Версия parquet writer, допустимыми значениями являются 1.0 и 2.0.
Значение по умолчанию: 1.0
datafusion.execution.parquet.skip_arrow_metadata¶
(запись) Пропустить кодирование встроенных метаданных arrow в KV_meta. Это аналогично ArrowWriterOptions::with_skip_arrow_metadata. См. https://docs.rs/parquet/53.3.0/parquet/arrow/arrow_writer/struct.ArrowWriterOptions.html#method.with_skip_arrow_metadata
Значение по умолчанию: FALSE
datafusion.execution.parquet.compression¶
(запись) Устанавливает кодек сжатия parquet по умолчанию. Допустимыми значениями являются: uncompressed, snappy, gzip(уровень), lzo, brotli(уровень), lz4, zstd(уровень) и lz4_raw. Регистр в этих значениях не учитывается. Если значение равно NULL, используется настройка записи parquet по умолчанию. Обратите внимание, что эта настройка по умолчанию отличается от настройки записи parquet по умолчанию.
Значение по умолчанию: zstd(3)
datafusion.execution.parquet.dictionary_enabled¶
(запись) Включена ли словарная кодировка. Если значение равно NULL, используется параметр записи в parquet по умолчанию
Значение по умолчанию: TRUE
datafusion.execution.parquet.dictionary_page_size_limit¶
(запись) Максимальный размер страницы словаря в байтах.
Значение по умолчанию: 1048576
datafusion.execution.parquet.statistics_enabled¶
(запись) Включена ли статистика для любого столбца, допустимыми значениями являются: none, chunk и page. Эти значения не чувствительны к регистру. Если NULL, используется параметр записи в parquet по умолчанию
Значение по умолчанию: page
datafusion.execution.parquet.max_statistics_size¶
(запись), который устанавливает максимальный размер статистики для любого столбца.
Значение по умолчанию: 4096
datafusion.execution.parquet.max_row_group_size¶
(запись) Укажите максимальное количество строк в каждой группе строк (по умолчанию - 1 млн строк). Запись больших групп строк требует больше памяти для записи, но позволяет добиться лучшего сжатия и ускорения чтения.
Значение по умолчанию: 1048576
datafusion.execution.parquet.created_by¶
(запись) Значение для created by (создано с помощью).
Значение по умолчанию: datafusion version 48.0.0
datafusion.execution.parquet.column_index_truncate_length¶
(запись) Длина усечения индекса столбца.
Значение по умолчанию: 64
datafusion.execution.parquet.statistics_truncate_length¶
(запись) Длина статического усечения. Если значение равно NULL, используется параметр записи parquet по умолчанию.
Значение по умолчанию: NULL
datafusion.execution.parquet.data_page_row_count_limit¶
(запись) Максимальное количество строк на странице данных.
Значение по умолчанию: 20000
datafusion.execution.parquet.encoding¶
(запись) Кодировка по умолчанию для любого столбца. Допустимыми значениями являются: plain, plain_dictionary, rle, bit_packed, delta_binary_packed, delta_length_byte_array, delta_byte_array, rle_dictionary и byte_stream_split. Эти значения не чувствительны к регистру. Если значение равно NULL, используется настройка записи в parquet по умолчанию.
Значение по умолчанию: NULL
datafusion.execution.parquet.bloom_filter_on_write¶
(запись) Записывать ли bloom-фильтры для всех столбцов при создании файлов parquet
Значение по умолчанию: FALSE
datafusion.execution.parquet.bloom_filter_fpp¶
(запись) Вероятность ложного срабатывания bloom-фильтра. Если значение равно NULL, используется настройка записи в parquet по умолчанию.
Значение по умолчанию: NULL
datafusion.execution.parquet.bloom_filter_ndv¶
(запись) Количество различных значений bloom-фильтра. Если значение равно NULL, используется настройка записи parquet по умолчанию.
Значение по умолчанию: NULL
datafusion.execution.parquet.allow_single_file_parallelism¶
(запись) Пытаться ли ускорить запись файлов parquet путем их параллельной сериализации. Каждый столбец в каждой группе строк в каждом выходном файле сериализуется параллельно, используя максимально возможное количество базовых значений n_filesn_row_groupsn_columns.
Значение по умолчанию: TRUE
datafusion.execution.parquet.maximum_parallel_row_group_writers¶
(запись) По умолчанию parallel parquet writer настроен на минимальное использование памяти в плане потокового выполнения. Вы можете увидеть увеличение производительности при записи больших файлов parquet за счет увеличения maximum_parallel_row_group_writers и maximum_buffered_record_batches_per_stream, если в вашей системе есть незанятые ядра и она может выдержать дополнительное использование памяти. Увеличение этих значений, вероятно, имеет смысл при записи уже имеющихся в памяти данных, например, из кэшированного фрейма данных.
Значение по умолчанию: 1
datafusion.execution.parquet.maximum_buffered_record_batches_per_stream¶
(запись) По умолчанию parallel parquet writer настроен на минимальное использование памяти в плане потокового выполнения. Вы можете увидеть увеличение производительности при записи больших файлов parquet за счет увеличения maximum_parallel_row_group_writers и maximum_buffered_record_batches_per_stream, если в вашей системе есть незанятые ядра и она может выдержать дополнительное использование памяти. Увеличение этих значений, вероятно, имеет смысл при записи уже имеющихся в памяти данных, например, из кэшированного фрейма данных.
Значение по умолчанию: 2
datafusion.execution.planning_concurrency¶
Разветвление при первоначальном физическом планировании. В основном используется для параллельного планирования дочерних элементов UNION. По умолчанию используется количество процессорных ядер в системе.
Значение по умолчанию: 0
datafusion.execution.skip_physical_aggregate_schema_check¶
Если значение равно true, не выполняется проверка того, что схема, созданная при планировании входных данных LogicalPlan::Aggregate, точно соответствует схеме входного плана. Если установлено значение false, если схема не соответствует в точности (включая возможность обнуления и метаданные), будет выдана ошибка планирования. Это используется для устранения ошибок в планировщике, которые теперь обнаруживаются на этапе проверки новой схемы.
Значение по умолчанию: FALSE
datafusion.execution.sort_spill_reservation_bytes¶
Объем памяти, зарезервированный для каждой операции сортировки с возможностью переноса, чтобы упростить объединение данных в памяти. Когда операция сортировки переносится на диск, данные в памяти должны быть отсортированы и объединены перед записью в файл. Этот параметр резервирует определенный объем памяти для процесса сортировки/слияния в оперативной памяти. Примечание: Этот параметр не имеет значения, если операция сортировки не может быть выполнена (т.е. если DiskManager не настроен).
Значение по умолчанию: 10485760
datafusion.execution.sort_in_place_threshold_bytes¶
Порог размера при сортировке, ниже которого данные следует объединять и сортировать в одном наборе записей, а не сортировать пакетами и объединять.
Значение по умолчанию: 1048576
datafusion.execution.meta_fetch_concurrency¶
Количество файлов для параллельного чтения при выводе схемы и статистики.
Значение по умолчанию: 32
datafusion.execution.minimum_parallel_output_files¶
Гарантирует минимальное количество выходных файлов, выполняемых параллельно. Пакеты записей будут распределяться циклически по каждому параллельному записывающему устройству. Каждый файл записи закрывается и открывается новый, как только достигается значение soft_max_rows_per_output_file.
Значение по умолчанию: 4
datafusion.execution.soft_max_rows_per_output_file¶
Заданное количество строк в выходных файлах при записи нескольких строк. Это допустимое максимальное значение, поэтому его можно немного превысить. Кроме того, размер файла будет на одну строку меньше установленного предела, если общее количество записанных строк не делится грубым образом на максимальное значение.
Значение по умолчанию: 50000000
datafusion.execution.max_buffered_batches_per_output_file¶
Это максимальное количество пакетов записей, буферизуемых для каждого обрабатываемого выходного файла. Более высокие значения потенциально могут повысить производительность записи за счет более высокого пикового потребления памяти.
Значение по умолчанию: 2
datafusion.execution.listing_table_ignore_subdirectory¶
Игнорировать ли вложенные каталоги при сканировании каталогов на наличие файлов данных. По умолчанию установлено значение true (игнорируются подкаталоги), соответствующее Hive. Обратите внимание, что этот параметр не влияет на чтение секционированных таблиц (например, /table/year=2021/month=01/data.parquet).
Значение по умолчанию: TRUE
datafusion.execution.enable_recursive_ctes¶
Поддерживать ли рекурсивные CTE.
Значение по умолчанию: TRUE
datafusion.execution.split_file_groups_by_statistics¶
Пытаться ли устранить сортировку, упаковав и отсортировав файлы с непересекающейся статистикой в одни и те же группы файлов. Экспериментальный параметр.
Значение по умолчанию: FALSE
datafusion.execution.keep_partition_by_columns¶
Сохранять ли столбцы, используемые для partition_by, в выходных пакетах записей.
Значение по умолчанию: FALSE
datafusion.execution.skip_partial_aggregation_probe_ratio_threshold¶
Коэффициент агрегации (количество отдельных групп / количество входных строк) – пороговое значение для пропуска частичной агрегации. Если значение больше, то при частичной агрегации будет пропущена агрегация для дальнейшего ввода.
Значение по умолчанию: 0.8