Elasticsearch注册GCS仓库返回500错误:提示gcs类型不存在
问题
使用以下Python代码注册Google Cloud Storage(GCS)仓库:
import requests from grabconfig import grabconfig (HOSTS, ign) = grabconfig() reqHeaders = {'content-type' : 'application/json'} for h in HOSTS: url = f'http://{h}:9200' r = requests.put(f'{url}/_snapshot/prod_backup2', '''{ \"type\" : \"gcs\" }, { \"settings\" : { \"client\" : \"secondary\", \"bucket\" : \"prod_backup2\" }, { \"compress\" : \"true\" }}''', headers=reqHeaders) print(r) print(r.json()) r2 = requests.get(f'{url}/_cat/snapshots') print(r2) print(r2.json())
配置文件prod.py内容:
HOSTS = ['10.x.x.x'] BACKUP_REPO = ['prod_backup2']
运行后返回500错误:
<Response [500]> {'error': {'root_cause': [{'type': 'repository_exception', 'reason': '[prod_backup2] repository type [gcs] does not exist'}], 'type': 'repository_exception', 'reason': '[prod_backup2] repository type [gcs] does not exist'}, 'status': 500}
解决方案
1. 安装Elasticsearch GCS仓库插件
错误核心原因是Elasticsearch节点未安装GCS仓库插件,需执行以下操作:
- 登录每个Elasticsearch节点,运行插件安装命令:
bin/elasticsearch-plugin install repository-gcs - 重启所有Elasticsearch节点,确保插件加载生效。
2. 修正请求JSON格式错误
原请求体存在语法错误(多个独立JSON对象用逗号拼接),正确格式应为单一JSON对象,且compress属于settings子字段。修改后的请求代码:
r = requests.put( f'{url}/_snapshot/prod_backup2', json={ "type": "gcs", "settings": { "client": "secondary", "bucket": "prod_backup2", "compress": True } }, headers=reqHeaders )
使用json参数传入字典,requests会自动处理序列化,避免手动拼接字符串的语法问题。
3. 配置GCS客户端认证
确保Elasticsearch配置文件elasticsearch.yml中已正确配置secondary客户端的认证信息:
cloud.gcs.client.secondary.auth.type: service_account cloud.gcs.client.secondary.auth.service_account.json_file: /path/to/service-account-key.json
需将路径替换为有效GCS服务账号密钥文件路径,且Elasticsearch进程对该文件有读取权限。
内容的提问来源于stack exchange,提问作者Mark McWiggins
相关产品推荐
相关产品推荐

