Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Снапшоты и восстановление ›Регистрация хранилища снапшотов

Хранилище 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. Этот тип хранилища не создаёт ведра автоматически.

Чтобы создать новое ведро:

  1. Подключитесь к консоли Google Cloud Platform.
  2. Выберите свой проект.
  3. Перейдите в браузер Storage.
  4. Нажмите кнопку Создать ведро.
  5. Введите имя нового ведра.
  6. Выберите класс хранилища.
  7. Выберите расположение.
  8. Нажмите кнопку Создать.

Для более подробных инструкций обратитесь к документации Google Cloud.

Авторизация сервиса

Хранилище должно пройти авторизацию запросов к сервису Google Cloud Storage. Клиентские библиотеки Google часто используют стратегию, называемую приложением по умолчанию. Однако эта стратегия частично поддерживается Elasticsearch. Хранилище работает в процессе Elasticsearch, который запущен с включенным менеджером безопасности. Менеджер безопасности блокирует «автоматическое» обнаружение учетных данных при использовании переменной среды GOOGLE_APPLICATION_CREDENTIALS для указания локального файла на диске. Однако он может получить учетную запись сервиса, прикреплённую к ресурсу, на котором запущен Elasticsearch, или вернуться к учетной записи сервиса по умолчанию, предоставляемой Compute Engine, Kubernetes Engine или App Engine. В противном случае вам необходимо настроить учетные данные учетной записи сервиса, если вы используете среду, которая не поддерживает автоматическое обнаружение учетных данных.

Использование учетной записи сервиса

Вы должны получить и предоставить учетные данные учетной записи сервиса вручную.

Для получения подробной информации о генерации JSON-файлов учетных записей сервиса см. документацию Google Cloud. Обратите внимание, что формат PKCS12 не поддерживается этим типом хранилища.

Вот краткий обзор шагов:

  1. Подключитесь к консоли Google Cloud Platform.
  2. Выберите свой проект.
  3. Выберите вкладку Учетные записи сервиса.
  4. Нажмите Создать учетную запись сервиса.
  5. После создания учетной записи выберите её и перейдите в Ключи.
  6. Выберите Добавить ключ, а затем Создать новый ключ.
  7. Выберите Тип ключа 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.

Рекомендованные права ведра

Учётная запись службы, используемая для доступа к ведру, должна иметь доступ «Писатель» к ведру:

  1. Подключитесь к Консоли Google Cloud Platform.
  2. Выберите свой проект.
  3. Перейдите в Обозреватель хранилища.
  4. Выберите ведро и «Изменить права ведра».
  5. Учётная запись службы должна быть настроена как «Пользователь» с доступом «Писатель».

Реализация линейного регистра

Реализация линейного регистра для репозиториев 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API