Хранилище на общей файловой системе
Этот тип хранилища доступен только при работе с Elasticsearch на собственном оборудовании. Если вы используете Elasticsearch Service, см. Типы хранилищ Elasticsearch Service.
Используйте хранилище на общей файловой системе для хранения моментальных снимков на общей файловой системе.
Для регистрации хранилища на общей файловой системе сначала необходимо смонтировать файловую систему в одном и том же месте на всех узлах-мастерах и узлах данных. Затем добавьте путь к файловой системе или родительской директории в настройку path.repo в elasticsearch.yml для каждого узла-мастера и узла данных. Для кластеров, это требует постепенной перезагрузки каждого узла.
Поддерживаемые path.repo значения различаются в зависимости от платформы:
Установка Linux и macOS поддерживает пути в стиле Unix:
path:
repo:
- /mount/backups
- /mount/long_term_backups После перезагрузки каждого узла используйте Kibana или API для создания или обновления хранилища моментальных снимков, чтобы зарегистрировать хранилище. При регистрации хранилища укажите путь к файловой системе:
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "/mount/backups/my_fs_backup_location"
}
},
)
print(resp) const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "/mount/backups/my_fs_backup_location",
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "/mount/backups/my_fs_backup_location"
}
} Если вы указываете относительный путь, Elasticsearch разрешает путь, используя первое значение в настройке path.repo.
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "my_fs_backup_location"
}
},
)
print(resp) response = client.snapshot.create_repository(
repository: 'my_fs_backup',
body: {
type: 'fs',
settings: {
location: 'my_fs_backup_location'
}
}
)
puts response const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "my_fs_backup_location",
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "my_fs_backup_location"
}
} | Первое значение в настройке |
Кластеры должны регистрировать определённое хранилище моментальных снимков только один раз. Если вы регистрируете одно и то же хранилище моментальных снимков с несколькими кластерами, только один кластер должен иметь доступ для записи в хранилище. В других кластерах хранилище регистрируется как только для чтения.
Это предотвращает одновременное запись нескольких кластеров в хранилище и повреждение содержимого хранилища. Это также предотвращает кеширование Elasticsearch содержимого хранилища, что означает, что изменения, внесённые другими кластерами, станут видны сразу.
Для регистрации хранилища файловой системы в режиме только для чтения с помощью API создания хранилища моментальных снимков установите параметр readonly в значение true. В качестве альтернативы вы можете зарегистрировать хранилище URL в режиме только для чтения для файловой системы.
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "my_fs_backup_location",
"readonly": True
}
},
)
print(resp) response = client.snapshot.create_repository(
repository: 'my_fs_backup',
body: {
type: 'fs',
settings: {
location: 'my_fs_backup_location',
readonly: true
}
}
)
puts response const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "my_fs_backup_location",
readonly: true,
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "my_fs_backup_location",
"readonly": true
}
} Установка Windows поддерживает пути DOS и Microsoft UNC. Экранируйте все обратные слэши в путях. Для путей UNC укажите имя сервера и общий ресурс в качестве префикса.
path:
repo:
- "E:\\Mount\\Backups"
- "\\\\MY_SERVER\\Mount\\Long_term_backups" | Путь DOS | |
| Путь UNC |
После перезагрузки каждого узла используйте Kibana или API для создания или обновления хранилища моментальных снимков, чтобы зарегистрировать хранилище. При регистрации хранилища укажите путь к файловой системе:
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "E:\\Mount\\Backups\\My_fs_backup_location"
}
},
)
print(resp) response = client.snapshot.create_repository(
repository: 'my_fs_backup',
body: {
type: 'fs',
settings: {
location: 'E:\\Mount\\Backups\\My_fs_backup_location'
}
}
)
puts response const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "E:\\Mount\\Backups\\My_fs_backup_location",
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "E:\\Mount\\Backups\\My_fs_backup_location"
}
} Если вы указываете относительный путь, Elasticsearch разрешает путь, используя первое значение в настройке path.repo.
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "My_fs_backup_location"
}
},
)
print(resp) response = client.snapshot.create_repository(
repository: 'my_fs_backup',
body: {
type: 'fs',
settings: {
location: 'My_fs_backup_location'
}
}
)
puts response const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "My_fs_backup_location",
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "My_fs_backup_location"
}
} | Первое значение в настройке |
Кластеры должны регистрировать определённое хранилище моментальных снимков только один раз. Если вы регистрируете одно и то же хранилище моментальных снимков с несколькими кластерами, только один кластер должен иметь доступ для записи в хранилище. В других кластерах хранилище регистрируется как только для чтения.
Это предотвращает одновременное запись нескольких кластеров в хранилище и повреждение содержимого хранилища. Это также предотвращает кеширование Elasticsearch содержимого хранилища, что означает, что изменения, внесённые другими кластерами, станут видны сразу.
Для регистрации хранилища файловой системы в режиме только для чтения с помощью API создания хранилища моментальных снимков установите параметр readonly в значение true. В качестве альтернативы вы можете зарегистрировать хранилище URL в режиме только для чтения для файловой системы.
resp = client.snapshot.create_repository(
name="my_fs_backup",
repository={
"type": "fs",
"settings": {
"location": "my_fs_backup_location",
"readonly": True
}
},
)
print(resp) response = client.snapshot.create_repository(
repository: 'my_fs_backup',
body: {
type: 'fs',
settings: {
location: 'my_fs_backup_location',
readonly: true
}
}
)
puts response const response = await client.snapshot.createRepository({
name: "my_fs_backup",
repository: {
type: "fs",
settings: {
location: "my_fs_backup_location",
readonly: true,
},
},
});
console.log(response); PUT _snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "my_fs_backup_location",
"readonly": true
}
} Настройки хранилища
-
chunk_size - (Необязательно, единицы измерения байт) Максимальный размер файлов в моментальных снимках. В моментальных снимках файлы, превышающие этот размер, разбиваются на части этого размера или меньше. По умолчанию
null(неограниченный размер файла). -
compress - (Необязательно, логическое значение) Если
true, метаданные, такие как схемы индексов и настройки, сжимаются в моментальных снимках. Файлы данных не сжимаются. По умолчаниюtrue. -
location - (Обязательно, строка) Расположение общей файловой системы, используемой для хранения и извлечения моментальных снимков. Это расположение должно быть зарегистрировано в настройке
path.repoна всех узлах-мастерах и узлах данных в кластере. В отличие отpath.repo, эта настройка поддерживает только один путь к файлу. -
max_number_of_snapshots - (Необязательно, целое число) Максимальное количество моментальных снимков, которые может содержать хранилище. По умолчанию
Integer.MAX_VALUE, что равно2^31-1или2147483647. -
max_restore_bytes_per_sec - (Необязательно, единицы измерения байт) Максимальная скорость восстановления моментальных снимков на узел. По умолчанию неограничено. Обратите внимание, что восстановление также ограничено настройками восстановления.
-
max_snapshot_bytes_per_sec - (Необязательно, единицы измерения байт) Максимальная скорость создания моментальных снимков на узел. По умолчанию
40mbв секунду. Обратите внимание, что если настроены настройки восстановления для управляемых служб, то по умолчанию неограничено, и скорость дополнительно ограничена настройками восстановления.
-
readonly -
(Необязательно, логическое значение) Если
true, хранилище является только для чтения. Кластер может извлекать и восстанавливать моментальные снимки из хранилища, но не записывать в него или создавать в нём моментальные снимки.Только кластер с правом записи может создавать моментальные снимки в хранилище. Все остальные кластеры, подключенные к хранилищу, должны иметь параметр
readonlyустановлен в значениеtrue.Если
false, кластер может записывать в хранилище и создавать в нём моментальные снимки. По умолчаниюfalse.Если вы регистрируете одно и то же хранилище моментальных снимков с несколькими кластерами, только один кластер должен иметь доступ для записи в хранилище. Одновременное запись нескольких кластеров в хранилище может привести к повреждению содержимого хранилища.
Устранение неполадок репозитория общего файловой системы
Elasticsearch взаимодействует с репозиторием общей файловой системы, используя абстракцию файловой системы вашей операционной системы. Это означает, что каждый узел Elasticsearch должен иметь возможность выполнять операции в пути репозитория, такие как создание, открытие и переименование файлов, создание и перечисление каталогов, и операции, выполняемые одним узлом, должны быть видны другим узлам сразу же после их завершения.
Проверьте распространённые неправильные конфигурации, используя API проверки репозитория снимков и API анализа репозитория. При правильной конфигурации репозитория эти API завершатся успешно. Если API проверки репозитория или анализа репозитория сообщают о проблеме, вы сможете воспроизвести эту проблему вне Elasticsearch, выполнив аналогичные операции на файловой системе напрямую.
Если API проверки репозитория или анализа репозитория завершаются ошибкой, указывающей на недостаточные права, настройте конфигурацию репозитория в вашей операционной системе, чтобы предоставить Elasticsearch соответствующий уровень доступа. Чтобы воспроизвести такие проблемы напрямую, выполните те же операции, что и Elasticsearch, в том же контексте безопасности, в котором работает Elasticsearch. Например, в Linux используйте команду, такую как su, чтобы переключиться на пользователя, под которым работает Elasticsearch.
Если API проверки репозитория или анализа репозитория завершаются ошибкой, указывающей на то, что операции на одном узле не видны сразу на другом узле, настройте конфигурацию репозитория в вашей операционной системе, чтобы решить эту проблему. Если ваш репозиторий не может быть сконфигурирован с достаточными гарантиями видимости, он не подходит для использования в качестве репозитория снимков Elasticsearch.
API проверки репозитория и анализа репозитория также завершатся ошибкой, если операционная система вернёт любой другой вид ошибки ввода/вывода при доступе к репозиторию. В этом случае устраните причину ошибки ввода/вывода, сообщённой операционной системой.
Многие реализации NFS сопоставляют учётные записи между узлами, используя их числовые идентификаторы пользователей (UID) и идентификаторы групп (GID), а не их имена. Возможно, Elasticsearch работает под учётной записью с тем же именем (часто elasticsearch) на каждом узле, но эти учётные записи имеют разные числовые идентификаторы пользователей или групп. Если ваша общая файловая система использует NFS, убедитесь, что каждый узел работает с одинаковыми числовыми UID и GID, или же обновите конфигурацию NFS, чтобы учесть различия в числовых идентификаторах между узлами.
Реализация линеаризуемого регистра
Реализация линеаризуемого регистра для репозиториев общей файловой системы основана на блокировке файлов. Чтобы выполнить операцию сравнения и обмена в регистре, 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/snapshots-filesystem-repository.html