Elasticsearch跨集群执行_reindex报null_pointer_exception如何解决
问题根因
你遇到的空指针异常是ES在构造远程reindex请求时缺少必要参数导致的,从错误栈的RemoteScrollableHitSource.lookupRemoteVersion调用链路可以看出,异常发生在和源实例建立HTTP连接的阶段,ES未对非法入参做前置校验,直接触发了底层空指针。
解决步骤
- 首先修正
_reindex请求的remote.host配置,必须添加http/https协议前缀,如果源实例有身份认证也要同步补充账号密码:
POST _reindex { "source": { "remote": { "host": "http://xxxx:9200", // 替换为源实例实际地址,必须带http://或https://前缀,不要遗漏端口 "username": "源实例账号", // 源实例无认证可删除该字段 "password": "源实例密码" // 源实例无认证可删除该字段 }, "index": "A_1", "query": {} }, "dest": { "index": "B_1" } }
- 确认实例B的
elasticsearch.yml配置文件中已添加源实例地址到远程reindex白名单,配置示例如下,修改后需要重启实例B生效:
reindex.remote.whitelist: "源实例IP:端口,其他允许的远程地址"
- 登录实例B所在的服务器,执行curl命令验证和源实例的网络连通性,确保没有安全组、防火墙拦截对应端口的访问:
curl http://源实例IP:端口
能正常返回ES的版本、集群名称信息说明网络正常。
- 如果源实例使用HTTPS协议且是自签名证书,可以在remote配置中添加SSL相关参数跳过证书校验(生产环境建议配置可信证书避免安全风险):
"remote": { "host": "https://xxxx:9200", "ssl": { "enabled": true, "verification_mode": "none" } }
内容的提问来源于stack exchange,提问作者HarryClifton
相关产品推荐
相关产品推荐

