共享文件系统存储库
编辑共享文件系统存储库编辑
此存储库类型仅在您在自己的硬件上运行 Elasticsearch 时可用。如果您使用 Elasticsearch 服务,请参阅 Elasticsearch 服务存储库类型。
使用共享文件系统存储库将快照存储在共享文件系统上。
要注册共享文件系统存储库,首先将文件系统挂载到所有主节点和数据节点上的相同位置。然后将文件系统的路径或父目录添加到每个主节点和数据节点的 elasticsearch.yml
中的 path.repo
设置中。对于正在运行的集群,这需要对每个节点进行 滚动重启。
支持的 path.repo
值因平台而异
Linux 和 macOS 安装支持 Unix 风格的路径
path: repo: - /mount/backups - /mount/long_term_backups
重启每个节点后,使用 Kibana 或 创建快照存储库 API 注册存储库。注册存储库时,请指定文件系统的路径
PUT _snapshot/my_fs_backup { "type": "fs", "settings": { "location": "/mount/backups/my_fs_backup_location" } }
如果您指定相对路径,Elasticsearch 将使用 path.repo
设置中的第一个值解析路径。
response = client.snapshot.create_repository( repository: 'my_fs_backup', body: { type: 'fs', settings: { location: 'my_fs_backup_location' } } ) puts response
|
集群应该只注册一次特定的快照存储库桶。如果您使用多个集群注册相同的快照存储库,则只有一个集群应该对存储库具有写访问权限。在其他集群上,将存储库注册为只读。
这可以防止多个集群同时写入存储库并破坏存储库的内容。它还可以防止 Elasticsearch 缓存存储库的内容,这意味着其他集群所做的更改将立即变得可见。
要使用创建快照存储库 API 注册只读文件系统存储库,请将 readonly
参数设置为 true。或者,您可以为文件系统注册一个 URL 存储库。
response = client.snapshot.create_repository( repository: 'my_fs_backup', body: { type: 'fs', settings: { location: 'my_fs_backup_location', readonly: true } } ) puts response
PUT _snapshot/my_fs_backup { "type": "fs", "settings": { "location": "my_fs_backup_location", "readonly": true } }
Windows 安装支持 DOS 和 Microsoft UNC 路径。转义路径中的任何反斜杠。对于 UNC 路径,请提供服务器和共享名称作为前缀。
重启每个节点后,使用 Kibana 或 创建快照存储库 API 注册存储库。注册存储库时,请指定文件系统的路径
response = client.snapshot.create_repository( repository: 'my_fs_backup', body: { type: 'fs', settings: { location: 'E:\\Mount\\Backups\\My_fs_backup_location' } } ) puts response
PUT _snapshot/my_fs_backup { "type": "fs", "settings": { "location": "E:\\Mount\\Backups\\My_fs_backup_location" } }
如果您指定相对路径,Elasticsearch 将使用 path.repo
设置中的第一个值解析路径。
response = client.snapshot.create_repository( repository: 'my_fs_backup', body: { type: 'fs', settings: { location: 'My_fs_backup_location' } } ) puts response
|
集群应该只注册一次特定的快照存储库桶。如果您使用多个集群注册相同的快照存储库,则只有一个集群应该对存储库具有写访问权限。在其他集群上,将存储库注册为只读。
这可以防止多个集群同时写入存储库并破坏存储库的内容。它还可以防止 Elasticsearch 缓存存储库的内容,这意味着其他集群所做的更改将立即变得可见。
要使用创建快照存储库 API 注册只读文件系统存储库,请将 readonly
参数设置为 true。或者,您可以为文件系统注册一个 URL 存储库。
response = client.snapshot.create_repository( repository: 'my_fs_backup', body: { type: 'fs', settings: { location: 'my_fs_backup_location', readonly: true } } ) puts 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
设置中注册。 -
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 报告问题,那么您将能够通过直接在文件系统上执行类似操作来重现此问题。
如果验证存储库或存储库分析 API 失败并出现错误,表明权限不足,则调整操作系统中存储库的配置,以赋予 Elasticsearch 适当的访问级别。要直接重现此类问题,请在与 Elasticsearch 运行相同的安全上下文中执行与 Elasticsearch 相同的操作。例如,在 Linux 上,使用 su
等命令切换到 Elasticsearch 运行的用户。
如果验证存储库或存储库分析 API 失败并出现错误,表明一个节点上的操作没有立即对另一个节点可见,则调整操作系统中存储库的配置以解决此问题。如果您的存储库无法配置足够强的可见性保证,那么它不适合用作 Elasticsearch 快照存储库。
如果操作系统在访问存储库时返回任何其他类型的 I/O 错误,则验证存储库和存储库分析 API 也会失败。如果发生这种情况,请解决操作系统报告的 I/O 错误的原因。
许多 NFS 实现使用其数字用户 ID (UID) 和组 ID (GID) 而不是其名称来匹配跨节点的帐户。Elasticsearch 可能在每个节点上以相同名称(通常为 elasticsearch
)运行,但这些帐户可能具有不同的数字用户或组 ID。如果您的共享文件系统使用 NFS,请确保每个节点都以相同的数字 UID 和 GID 运行,或者更新您的 NFS 配置以考虑跨节点的数字 ID 差异。
线性化寄存器实现编辑
共享文件系统存储库的线性化寄存器实现基于文件锁定。要对寄存器执行比较并交换操作,Elasticsearch 首先锁定底层文件,然后在同一锁定下写入更新后的内容。这确保了文件在此期间没有更改。