Хранилище Google Cloud Storage
Вы можете использовать сервис Google Cloud Storage в качестве хранилища для создания/восстановления снимков.
Начало работы
Этот тип хранилища использует Google Cloud Java Client для Storage для подключения к сервису Storage. Если вы используете Google Cloud Storage впервые, вам необходимо подключиться к консоли Google Cloud Platform и создать новый проект. После создания проекта необходимо включить службу Cloud Storage для вашего проекта.
Создание ведра
Сервис Google Cloud Storage использует концепцию ведёр в качестве контейнеров для всех данных. Ведра обычно создаются с помощью консоли Google Cloud Platform. Этот тип хранилища не создаёт ведра автоматически.
Чтобы создать новое ведро:
- Подключитесь к консоли Google Cloud Platform.
- Выберите свой проект.
- Перейдите в браузер Storage.
- Нажмите кнопку Создать ведро.
- Введите имя нового ведра.
- Выберите класс хранилища.
- Выберите расположение.
- Нажмите кнопку Создать.
Для более подробных инструкций обратитесь к документации Google Cloud.
Авторизация сервиса
Хранилище должно пройти авторизацию запросов к сервису Google Cloud Storage. Клиентские библиотеки Google часто используют стратегию, называемую приложением по умолчанию. Однако эта стратегия частично поддерживается Elasticsearch. Хранилище работает в процессе Elasticsearch, который запущен с включенным менеджером безопасности. Менеджер безопасности блокирует «автоматическое» обнаружение учетных данных при использовании переменной среды GOOGLE_APPLICATION_CREDENTIALS для указания локального файла на диске. Однако он может получить учетную запись сервиса, прикреплённую к ресурсу, на котором запущен Elasticsearch, или вернуться к учетной записи сервиса по умолчанию, предоставляемой Compute Engine, Kubernetes Engine или App Engine. В противном случае вам необходимо настроить учетные данные учетной записи сервиса, если вы используете среду, которая не поддерживает автоматическое обнаружение учетных данных.
Использование учетной записи сервиса
Вы должны получить и предоставить учетные данные учетной записи сервиса вручную.
Для получения подробной информации о генерации JSON-файлов учетных записей сервиса см. документацию Google Cloud. Обратите внимание, что формат PKCS12 не поддерживается этим типом хранилища.
Вот краткий обзор шагов:
- Подключитесь к консоли Google Cloud Platform.
- Выберите свой проект.
- Выберите вкладку Учетные записи сервиса.
- Нажмите Создать учетную запись сервиса.
- После создания учетной записи выберите её и перейдите в Ключи.
- Выберите Добавить ключ, а затем Создать новый ключ.
- Выберите Тип ключа JSON, так как P12 не поддерживается.
Файл JSON учетной записи сервиса выглядит следующим образом:
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "service-account-for-your-repository@your-project-id.iam.gserviceaccount.com",
"client_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-bucket@your-project-id.iam.gserviceaccount.com"
} Чтобы предоставить этот файл хранилищу, он должен быть сохранён в хранилище ключей Elasticsearch. Вам нужно добавить настройку file с именем gcs.client.NAME.credentials_file, используя подкоманду add-file. NAME — это имя конфигурации клиента для хранилища. Неявное имя клиента — default, но другое имя клиента можно указать в настройках хранилища с ключом client.
Передача пути к файлу через переменную среды GOOGLE_APPLICATION_CREDENTIALS не поддерживается.
Например, если вы добавили настройку gcs.client.my_alternate_client.credentials_file в хранилище ключей, вы можете настроить хранилище для использования этих учетных данных следующим образом:
resp = client.snapshot.create_repository(
name="my_gcs_repository",
repository={
"type": "gcs",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_gcs_repository",
repository: {
type: "gcs",
settings: {
bucket: "my_bucket",
client: "my_alternate_client",
},
},
});
console.log(response); PUT _snapshot/my_gcs_repository
{
"type": "gcs",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
} Настройки credentials_file перезагружаемы. Вы можете определить эти настройки до запуска узла или вызвать API перезагрузки настроек безопасности узлов после определения настроек, чтобы применить их к работающему узлу.
После перезагрузки настроек внутренние клиенты gcs, используемые для передачи содержимого снимка, используют последние настройки из хранилища ключей.
Задачи создания или восстановления снимков, которые находятся в процессе выполнения, не прерываются перезагрузкой настроек клиента credentials_file. Они завершаются с использованием клиента, как он был создан в момент начала операции.
Настройки клиента
Клиент, используемый для подключения к Google Cloud Storage, имеет ряд доступных настроек. Имена настроек клиента имеют вид gcs.client.CLIENT_NAME.SETTING_NAME и указаны внутри elasticsearch.yml. Имя клиента по умолчанию, подключаемое хранилищем gcs, называется default, но может быть настраиваемо с помощью настройки хранилища client.
Например:
resp = client.snapshot.create_repository(
name="my_gcs_repository",
repository={
"type": "gcs",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_gcs_repository",
repository: {
type: "gcs",
settings: {
bucket: "my_bucket",
client: "my_alternate_client",
},
},
});
console.log(response); PUT _snapshot/my_gcs_repository
{
"type": "gcs",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
} Некоторые настройки конфиденциальны и должны храниться в хранилище ключей Elasticsearch. Это относится к файлу учетной записи сервиса:
bin/elasticsearch-keystore add-file gcs.client.default.credentials_file /path/service-account.json
Ниже приведены доступные настройки клиента. Те, что должны храниться в хранилище ключей, помечены как Secure.
-
credentials_file(Защищённая, перезагружаемая) - Файл учетной записи сервиса, используемый для аутентификации в сервисе Google Cloud Storage.
-
endpoint - Конечная точка сервиса Google Cloud Storage для подключения. Она будет автоматически определяться клиентом Google Cloud Storage, но может быть указана явно.
-
connect_timeout - Время ожидания для установления соединения с сервисом Google Cloud Storage. Значение должно указывать единицы измерения. Например, значение
5sзадаёт время ожидания 5 секунд. Значение-1соответствует бесконечному времени ожидания. Значение по умолчанию — 20 секунд. -
read_timeout - Время ожидания для чтения данных из установленного соединения. Значение должно указывать единицы измерения. Например, значение
5sзадаёт время ожидания 5 секунд. Значение-1соответствует бесконечному времени ожидания. Значение по умолчанию — 20 секунд. -
application_name - Имя, используемое клиентом при использовании сервиса Google Cloud Storage. Настройка пользовательского имени может быть полезной для аутентификации кластера, когда статистика запросов регистрируется в Google Cloud Platform. По умолчанию
repository-gcs -
project_id - Идентификатор проекта Google Cloud. Он будет автоматически определён из файла учетных данных, но может быть указан явно. Например, он может использоваться для переключения между проектами, когда одни и те же учетные данные применимы как для производственного, так и для тестового проекта.
-
proxy.host - Имя хоста прокси для подключения к Google Cloud Storage.
-
proxy.port - Порт прокси для подключения к Google Cloud Storage.
-
proxy.type - Тип прокси для клиента. Поддерживаемые значения:
direct(нет прокси),httpиsocks. По умолчаниюdirect.
Настройки репозитория
Тип репозитория gcs поддерживает ряд настроек для настройки способа хранения данных в Google Cloud Storage.
Эти настройки можно указать при создании репозитория. Например:
resp = client.snapshot.create_repository(
name="my_gcs_repository",
repository={
"type": "gcs",
"settings": {
"bucket": "my_other_bucket",
"base_path": "dev"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_gcs_repository",
repository: {
type: "gcs",
settings: {
bucket: "my_other_bucket",
base_path: "dev",
},
},
});
console.log(response); PUT _snapshot/my_gcs_repository
{
"type": "gcs",
"settings": {
"bucket": "my_other_bucket",
"base_path": "dev"
}
} Поддерживаются следующие настройки:
-
bucket - Имя ведра, используемого для снимков. (Обязательно)
-
client - Имя клиента для подключения к Google Cloud Storage. По умолчанию
default. -
base_path -
Указывает путь в ведре для данных репозитория. По умолчанию — корень ведра.
Не устанавливайте
base_pathпри настройке репозитория снимков для Elastic Cloud Enterprise. Elastic Cloud Enterprise автоматически генерируетbase_pathдля каждого развертывания, чтобы несколько развертываний могли использовать одно ведро. -
chunk_size - Большие файлы могут быть разбиты на несколько меньших блоков в хранилище блоков во время создания снимка. Не рекомендуется изменять это значение от значения по умолчанию, если нет явной причины ограничивать размер блоков в репозитории. Установка значения ниже значения по умолчанию может привести к увеличению количества API-вызовов сервису Google Cloud Storage при создании и восстановлении снимков по сравнению с использованием значения по умолчанию, что делает обе операции медленнее и дороже. Укажите размер фрагмента как значение и единицу, например:
10MB,5KB,500B. По умолчанию используется максимальный размер блока в Google Cloud Storage Service, который составляет5TB. -
compress - При установке значения
trueфайлы метаданных хранятся в сжатом формате. Эта настройка не влияет на файлы индексов, которые по умолчанию уже сжаты. По умолчаниюtrue. -
max_restore_bytes_per_sec - (Необязательно, значение в байтах) Максимальная скорость восстановления снимков на узел. По умолчанию — неограниченная. Обратите внимание, что восстановления также ограничиваются настройками восстановления.
-
max_snapshot_bytes_per_sec - (Необязательно, значение в байтах) Максимальная скорость создания снимков на узел. По умолчанию —
40mbв секунду. Обратите внимание, что если настроены настройки восстановления для управляемых служб, то значение по умолчанию — неограниченное, и скорость дополнительно ограничена настройками восстановления.
-
readonly -
(Необязательно, Булево) Если
true, репозиторий является только для чтения. Кластер может извлекать и восстанавливать снимки из репозитория, но не записывать в репозиторий или создавать в нём снимки.Только кластер с правами на запись может создавать снимки в репозитории. Все другие кластеры, подключенные к репозиторию, должны иметь параметр
readonly, установленный вtrue.Если
false, кластер может записывать в репозиторий и создавать в нём снимки. По умолчаниюfalse.Если вы регистрируете один и тот же репозиторий снимков с несколькими кластерами, только один кластер должен иметь права на запись в репозиторий. Одновременная запись в репозиторий несколькими кластерами может привести к повреждению содержимого репозитория.
-
application_name - [6.3.0] Устарело в 6.3.0. Эта настройка теперь определена в настройках клиента. Имя, используемое клиентом при использовании сервиса Google Cloud Storage.
Рекомендованные права ведра
Учётная запись службы, используемая для доступа к ведру, должна иметь доступ «Писатель» к ведру:
- Подключитесь к Консоли Google Cloud Platform.
- Выберите свой проект.
- Перейдите в Обозреватель хранилища.
- Выберите ведро и «Изменить права ведра».
- Учётная запись службы должна быть настроена как «Пользователь» с доступом «Писатель».
Реализация линейного регистра
Реализация линейного регистра для репозиториев GCS основана на поддержке GCS строго согласованных предварительных условий для операций put-blob. Для выполнения операции сравнения и обмена в регистре 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-gcs.html