诊断损坏的存储库
编辑诊断损坏的存储库
编辑多个 Elasticsearch 部署写入同一个快照存储库。Elasticsearch 不支持此配置,只允许一个集群写入同一个存储库。有关存储库内容损坏的潜在副作用(以下指南可能无法解决),请参阅存储库内容。要解决此问题,请将存储库标记为只读,或将其从所有其他部署中删除,然后在当前部署中重新添加(重新创建)该存储库。
修复损坏的存储库将需要对写入同一个快照存储库的多个部署进行更改。只有一个部署可以写入存储库。将继续写入存储库的部署称为“主”部署(当前集群),而我们将将其标记为只读的其他部署称为“辅助”部署。
首先,将辅助部署上的存储库标记为只读
使用 Kibana
- 登录到 Elastic Cloud 控制台。
-
在 Elasticsearch 服务 面板中,单击您的部署名称。
如果您的部署名称被禁用,则您的 Kibana 实例可能不健康,在这种情况下,请联系 Elastic 支持。如果您的部署不包含 Kibana,您只需 先启用它。
-
打开部署的侧边导航菜单(位于左上角的 Elastic 徽标下方),然后转到 堆栈管理 > 快照和恢复 > 存储库。
- 现在应该可以看到存储库表。单击要标记为只读的存储库右侧的铅笔图标。在打开的“编辑”页面上向下滚动,然后选中“只读存储库”。单击“保存”。或者,如果完全删除存储库更可取,请在存储库表中选中存储库名称左侧的复选框,然后单击表左上角的“删除存储库”红色按钮。
此时,只有主(当前)部署将存储库标记为可写。Elasticsearch 将其视为损坏,因此需要删除并重新添加存储库,以便 Elasticsearch 可以继续使用它。
请注意,我们现在正在配置主(当前)部署。
-
打开主部署的侧边导航菜单(位于左上角的 Elastic 徽标下方),然后转到 堆栈管理 > 快照和恢复 > 存储库。
- 单击存储库右侧的铅笔图标。在打开的“编辑”页面上向下滚动并单击“保存”,无需对现有设置进行任何更改。
修复损坏的存储库将需要对写入同一个快照存储库的多个集群进行更改。只有一个集群可以写入存储库。我们将想要继续写入存储库的集群称为“主”集群(当前集群),而我们将把存储库标记为只读的其他集群称为“辅助”集群。
让我们先处理辅助集群
-
获取存储库的配置
resp = client.snapshot.get_repository( name="my-repo", ) print(resp)
response = client.snapshot.get_repository( repository: 'my-repo' ) puts response
const response = await client.snapshot.getRepository({ name: "my-repo", }); console.log(response);
GET _snapshot/my-repo
响应将如下所示
-
使用上面检索到的设置,添加
readonly: true
选项以将其标记为只读resp = client.snapshot.create_repository( name="my-repo", repository={ "type": "s3", "settings": { "bucket": "repo-bucket", "client": "elastic-internal-71bcd3", "base_path": "myrepo", "readonly": True } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my-repo", repository: { type: "s3", settings: { bucket: "repo-bucket", client: "elastic-internal-71bcd3", base_path: "myrepo", readonly: true, }, }, }); console.log(response);
-
或者,可以使用以下命令删除存储库:
resp = client.snapshot.delete_repository( name="my-repo", ) print(resp)
response = client.snapshot.delete_repository( repository: 'my-repo' ) puts response
const response = await client.snapshot.deleteRepository({ name: "my-repo", }); console.log(response);
DELETE _snapshot/my-repo
响应将如下所示
{ "acknowledged": true }
此时,只有主(当前)集群将存储库标记为可写。但是 Elasticsearch 将其视为损坏,因此让我们重新创建它,以便 Elasticsearch 可以继续使用它。请注意,现在我们正在配置主(当前)集群
-
获取存储库的配置并保存其配置,因为我们将使用它来重新创建存储库
resp = client.snapshot.get_repository( name="my-repo", ) print(resp)
response = client.snapshot.get_repository( repository: 'my-repo' ) puts response
const response = await client.snapshot.getRepository({ name: "my-repo", }); console.log(response);
GET _snapshot/my-repo
-
使用我们上面获得的配置,让我们重新创建存储库
resp = client.snapshot.create_repository( name="my-repo", repository={ "type": "s3", "settings": { "bucket": "repo-bucket", "client": "elastic-internal-71bcd3", "base_path": "myrepo" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my-repo", repository: { type: "s3", settings: { bucket: "repo-bucket", client: "elastic-internal-71bcd3", base_path: "myrepo", }, }, }); console.log(response);
PUT _snapshot/my-repo { "type": "s3", "settings": { "bucket": "repo-bucket", "client": "elastic-internal-71bcd3", "base_path": "myrepo" } }
响应将如下所示
{ "acknowledged": true }