📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

适用版本: 7.x-8.x

1. 错误异常的基本描述 #

failed to get users that already exist; skipping user import 表示导入流程已经读到了本地用户和角色映射文件,但在查询目标集群现有用户列表时失败,因此跳过后续用户导入。

它强调的是“导入前的冲突检查失败”,而不是“用户文件格式错误”。

常见现象 #

  • 用户迁移工具运行后没有导入任何用户。
  • 日志里出现 skipping user import,同时伴随认证、连接或 TLS 相关异常。
  • 同一批流程中,角色导入和用户导入可能分别失败或只失败其中之一。

2. 为什么会发生这个错误 #

源码中先解析 users_roles 文件,再调用 getUsersThatExist(...) 查询目标集群已有用户;如果这个调用失败,就会直接抛出当前异常。

常见原因包括:

  • 目标集群无法访问,或者地址、端口、代理配置错误。
  • 执行导入的身份缺少读取用户信息的权限。
  • TLS 证书、CA 或主机名校验配置不正确。
  • 集群安全状态异常,导致查询已存在用户接口不可用。

3. 如何排查和解决这个异常和解决这个异常 #

  1. 先确认本地用户文件与 users_roles 文件本身可正常解析。
  2. 验证导入工具使用的连接参数、证书和认证方式。
  3. 检查当前执行账号是否具备读取现有用户和创建用户的权限。
  4. 查看目标集群安全日志,确认是否出现认证拒绝、授权拒绝或连接失败。
  5. 如果通过负载均衡或网关访问,确认相关接口未被安全设备屏蔽。

4. 如何解决这个错误 #

常用修复思路 #

  • 修正访问目标集群的网络、代理和证书配置。
  • 使用具备足够安全管理权限的账号重新执行导入。
  • 如果集群安全功能本身异常,先修复安全服务可用性再做用户导入。
  • 导入前先单独验证“获取现有用户”这一步,避免盲目重试整条流程。

5. 小结 #

skipping user import 并不代表用户文件一定有问题,更多时候是导入工具根本没有成功拿到目标集群现有用户列表。先修通连接和权限,通常才是正确方向。

相关错误 #

附:日志上下文 #

MapuserToRoles = FileUserRolesStore.parseFile(usersRolesFile; logger);
     SetexistingUsers;
     try {
     existingUsers = getUsersThatExist(terminal; env.settings(); env; options);
     } catch (Exception e) {
     throw new ElasticsearchException("failed to get users that already exist; skipping user import"; e);
     }
     if (usersToMigrate.length == 0) {
     usersToMigrate = userToHashedPW.keySet().toArray(new String[userToHashedPW.size()]);
     }
     for (String user : usersToMigrate) {