Хранилище Azure
В качестве хранилища для создания и восстановления снимков можно использовать хранилище Azure Blob.
Настройка
Для включения хранилищ Azure сначала необходимо настроить клиента хранилища Azure, указав один или несколько параметров вида azure.client.CLIENT_NAME.SETTING_NAME. По умолчанию хранилища azure используют клиента с именем default, но при регистрации каждого хранилища можно указать имя другого клиента.
Единственный обязательный параметр клиента хранилища Azure — account, который является защищённым параметром, определённым в хранилище ключей Elasticsearch. Для задания этого параметра используйте инструмент elasticsearch-keystore на каждом узле:
bin/elasticsearch-keystore add azure.client.default.account
Если вы измените этот параметр после запуска узла, вызовите API перезагрузки защищённых параметров узлов для перезагрузки нового значения.
Можно определить более одного клиента, задав их значения account. Например, чтобы задать клиента default и другой клиент с именем secondary, выполните следующие команды на каждом узле:
bin/elasticsearch-keystore add azure.client.default.account bin/elasticsearch-keystore add azure.client.secondary.account
Параметры key и sas_token также являются защищёнными параметрами и могут быть заданы с помощью команд, подобных следующим:
bin/elasticsearch-keystore add azure.client.default.key bin/elasticsearch-keystore add azure.client.secondary.sas_token
Другие параметры клиента хранилища Azure должны быть заданы в elasticsearch.yml перед запуском узла. Например:
azure.client.default.timeout: 10s azure.client.default.max_retries: 7 azure.client.default.endpoint_suffix: core.chinacloudapi.cn azure.client.secondary.timeout: 30s
В этом примере таймаут клиента составляет 10s за попытку для хранилищ, использующих клиента default, с 7 повторными попытками перед ошибкой и суффиксом конечной точки core.chinacloudapi.cn. Для хранилищ, использующих клиента secondary, таймаут составит 30s за попытку, но будут использованы значения по умолчанию для конечной точки и произойдёт отказ после стандартного количества повторных попыток.
После правильной настройки клиента хранилища Azure зарегистрируйте хранилище Azure следующим образом, указав имя клиента с помощью параметра хранилища client настроек хранилища:
resp = client.snapshot.create_repository(
name="my_backup",
repository={
"type": "azure",
"settings": {
"client": "secondary"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_backup",
repository: {
type: "azure",
settings: {
client: "secondary",
},
},
});
console.log(response); PUT _snapshot/my_backup
{
"type": "azure",
"settings": {
"client": "secondary"
}
} Если вы используете клиента default, можно опустить параметр хранилища client:
resp = client.snapshot.create_repository(
name="my_backup",
repository={
"type": "azure"
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_backup",
repository: {
type: "azure",
},
});
console.log(response); PUT _snapshot/my_backup
{
"type": "azure"
} Задачи создания или восстановления снимков, которые выполняются в данный момент, не будут прерваны перезагрузкой защищённых параметров хранилища. Они завершатся с использованием клиента, который был создан в момент начала операции.
Параметры клиента
Следующий список описывает доступные параметры клиента. Те, что должны храниться в хранилище ключей, отмечены как (Защищённые, перезагружаемые); остальные параметры должны храниться в файле elasticsearch.yml. Значение по умолчанию CLIENT_NAME равно default, но вы можете настроить клиента с другим именем и указать его при регистрации хранилища.
-
azure.client.CLIENT_NAME.account(Защищённые, перезагружаемые) - Имя учётной записи Azure, используемое внутренним клиентом хранилища. Этот параметр обязателен для всех клиентов.
-
azure.client.CLIENT_NAME.endpoint_suffix - Суффикс конечной точки Azure для подключения. Значение по умолчанию —
core.windows.net. -
azure.client.CLIENT_NAME.key(Защищённые, перезагружаемые) - Секретный ключ Azure, используемый внутренним клиентом хранилища. В качестве альтернативы используйте
sas_token. -
azure.client.CLIENT_NAME.max_retries - Количество попыток повтора при сбое запроса Azure. Этот параметр помогает управлять политикой экспоненциальной задержки. Он определяет число попыток, которые должны быть предприняты перед отказом снимка. Значение по умолчанию —
3. Начальный период задержки определяется Azure SDK как30s. Таким образом, время ожидания перед повторной попыткой после первого таймаута или ошибки составляет30s. Максимальный период задержки определяется Azure SDK как90s. -
azure.client.CLIENT_NAME.proxy.host - Имя хоста прокси-сервера для подключения к Azure. По умолчанию прокси не используется.
-
azure.client.CLIENT_NAME.proxy.port - Порт прокси-сервера для подключения к Azure. По умолчанию прокси не используется.
-
azure.client.CLIENT_NAME.proxy.type - Регистрация типа прокси для клиента. Поддерживаемые значения —
direct,httpиsocks. Например:azure.client.default.proxy.type: http. Когдаproxy.typeустановлено вhttpилиsocks, необходимо также указатьproxy.hostиproxy.port. Значение по умолчанию —direct. -
azure.client.CLIENT_NAME.sas_token(Защищённые, перезагружаемые) - Токен подписи общего доступа (SAS), используемый внутренним клиентом хранилища Azure для аутентификации. Токен SAS должен иметь права на чтение (r), запись (w), просмотр (l) и удаление (d) для базового пути хранилища и всех его содержимых. Эти права должны быть предоставлены для службы blob (b) и применяться к типам ресурсов служба (s), контейнер (c) и объект (o). В качестве альтернативы используйте
key. -
azure.client.CLIENT_NAME.timeout - Таймаут клиента для любого отдельного запроса к Azure в качестве единицы времени. Например, значение
5sуказывает таймаут в 5 секунд. Значения по умолчанию нет, поэтому Elasticsearch использует значение по умолчанию, заданное клиентом Azure. -
azure.client.CLIENT_NAME.endpoint - Конечная точка Azure для подключения. Она должна включать протокол, используемый для подключения к Azure.
-
azure.client.CLIENT_NAME.secondary_endpoint - Вторичная конечная точка Azure для подключения. Она должна включать протокол, используемый для подключения к Azure.
Получение данных из окружения
Если для клиента не указаны параметры key или sas_token, Elasticsearch попытается автоматически получить данные аутентификации из среды выполнения, используя механизмы, встроенные в Azure SDK. Это идеально подходит для работы Elasticsearch в среде Azure.
При работе Elasticsearch на виртуальной машине Azure следует использовать управляемую идентификацию Azure для предоставления данных аутентификации Elasticsearch. Для использования управляемой идентификации Azure назначьте соответствующую авторизованную идентификацию виртуальной машине Azure, на которой работает Elasticsearch.
При работе Elasticsearch в Azure Kubernetes Service, например, с использованием Elastic Cloud на Kubernetes, следует использовать Azure Workload Identity для предоставления данных аутентификации Elasticsearch. Для использования Azure Workload Identity, смонтируйте томов azure-identity-token в качестве подкаталога каталога конфигурации Elasticsearch и установите переменную среды AZURE_FEDERATED_TOKEN_FILE, указывающую на файл с именем azure-identity-token в смонтированном томе.
Azure SDK имеет несколько других механизмов автоматического получения данных аутентификации из среды, но описанные выше два метода являются единственными протестированными и поддерживаемыми для использования в Elasticsearch.
Настройки репозитория
Репозиторий Azure поддерживает следующие настройки, которые могут быть указаны при регистрации репозитория Azure следующим образом:
resp = client.snapshot.create_repository(
name="my_backup",
repository={
"type": "azure",
"settings": {
"client": "secondary",
"container": "my_container",
"base_path": "snapshots_prefix"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_backup",
repository: {
type: "azure",
settings: {
client: "secondary",
container: "my_container",
base_path: "snapshots_prefix",
},
},
});
console.log(response); PUT _snapshot/my_backup
{
"type": "azure",
"settings": {
"client": "secondary",
"container": "my_container",
"base_path": "snapshots_prefix"
}
} -
client - Имя клиента Azure репозитория для использования. По умолчанию
default. -
container - Имя контейнера. Вы должны создать контейнер Azure перед созданием репозитория. По умолчанию
elasticsearch-snapshots. -
base_path -
Указывает путь внутри контейнера к данным репозитория. По умолчанию пусто (корневой каталог).
Не устанавливайте
base_pathпри настройке репозитория снимков для Elastic Cloud Enterprise. Elastic Cloud Enterprise автоматически генерируетbase_pathдля каждого развертывания, чтобы несколько развертываний могли использовать один и тот же бакет. -
chunk_size - Крупные файлы могут быть разбиты на несколько меньших блоков в хранилище блоков во время создания снимков. Не рекомендуется изменять это значение от значения по умолчанию, если нет явной причины ограничения размера блоков в репозитории. Установка значения ниже значения по умолчанию может привести к увеличению числа API-запросов к хранилищу блоков Azure во время операций создания и восстановления снимков по сравнению с использованием значения по умолчанию, а следовательно, замедлить обе операции, а также сделать их более дорогостоящими. Укажите размер фрагмента в виде единицы измерения байт, например:
10MB,5KB,500B. По умолчанию используется максимальный размер блока в хранилище блоков Azure, который составляет5TB. -
compress - Если установлено значение
true, файлы метаданных хранятся в сжатом формате. Эта настройка не влияет на файлы индексов, которые уже сжаты по умолчанию. По умолчаниюtrue. -
max_restore_bytes_per_sec - (Необязательно, значение в байтах) Максимальная скорость восстановления снимков на узел. По умолчанию неограниченно. Обратите внимание, что восстановления также ограничиваются настройками восстановления.
-
max_snapshot_bytes_per_sec - (Необязательно, значение в байтах) Максимальная скорость создания снимков на узел. По умолчанию
40mbв секунду. Обратите внимание, что если настроены настройки восстановления для управляемых служб, то по умолчанию значение неограничено, и скорость дополнительно ограничивается настройками восстановления.
-
readonly -
(Необязательно, Булево) Если
true, репозиторий является только для чтения. Кластер может извлекать и восстанавливать снимки из репозитория, но не записывать в репозиторий или создавать в нём снимки.Только кластер с правами записи может создавать снимки в репозитории. Все остальные кластеры, подключенные к репозиторию, должны иметь параметр
readonly, установленный в значениеtrue.Если
false, кластер может записывать в репозиторий и создавать в нём снимки. По умолчаниюfalse.Если вы регистрируете один и тот же репозиторий снимков с несколькими кластерами, только один кластер должен иметь права на запись в репозиторий. Одновременная запись нескольких кластеров в репозиторий может привести к повреждению содержимого репозитория.
-
location_mode -
primary_onlyилиsecondary_only. По умолчаниюprimary_only. Обратите внимание, что если вы установите его в значениеsecondary_only, это принудительно установитreadonlyв значение true.
Правила валидации репозитория
Согласно руководству по именованию контейнеров, имя контейнера должно быть допустимым именем DNS, соответствующим следующим правилам именования:
- Имена контейнеров должны начинаться с буквы или цифры и могут содержать только буквы, цифры и символ дефиса (-).
- Каждый символ дефиса (-) должен быть непосредственно предшествован и последован буквой или цифрой; последовательные дефисы в именах контейнеров недопустимы.
- Все буквы в имени контейнера должны быть строчными.
- Имена контейнеров должны иметь длину от 3 до 63 символов.
Поддерживаемые типы учетных записей хранилища Azure
Тип репозитория Azure работает со всеми стандартными учетными записями хранилища
- Стандартное хранилище с локальной избыточностью -
Standard_LRS - Стандартное хранилище с зональной избыточностью -
Standard_ZRS - Стандартное хранилище с географической избыточностью -
Standard_GRS - Стандартное хранилище с географической избыточностью с чтением -
Standard_RAGRS
Премиум хранилище с локальной избыточностью (Premium_LRS) не поддерживается, так как оно может использоваться только в качестве хранилища дисков ВМ, а не как общее хранилище.
Реализация линейно-порядкового регистра
Реализация линейно-порядкового регистра для репозиториев Azure основана на поддержке Azure для жёстко согласованных аренд. Каждая аренда может быть удерживаема только одним узлом в любое время. Узел предоставляет свою аренду при выполнении операции чтения или записи защищённого блока. Защищённые арендой операции завершаются ошибкой, если аренда недопустима или истекла. Чтобы выполнить операцию сравнения и обмена в регистре, Elasticsearch сначала получает аренду на блок, затем считывает содержимое блока в рамках этой аренды, а затем загружает обновлённый блок под той же арендой. Этот процесс гарантирует, что операции чтения и записи выполняются атомарно.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/repository-azure.html