在 Xodus 中使用共享/挂载的块存储

Using a shared / mounted block storage with Xodus

使用挂载块存储作为Xodus数据库路径安全吗?想法是 运行 在几个不同的主机中使用 Xodus 的应用程序。所以每个基于 Xodus 的应用程序都指向相同的安装路径(例如 /mnt/xodus

在这种情况下,每个应用程序都会像下面的代码一样打开 Xodus 环境。 如果我们这样打开环境:

  @Override
  public Environment getEnvironment(String xodusRoot, String instance) {
    Environment environment = environmentMap.get(xodusRoot + instance);
    if (environment == null) {
      EnvironmentConfig config = new EnvironmentConfig();
      config.setLogCacheShared(false);
      Environment env = Environments.newInstance(xodusRoot + instance, config);
      environmentMap.put(xodusRoot + instance, env);
    }
    Environment e = environmentMap.get(xodusRoot + instance);
    return e;
  }

多个Xodus实例指向一个挂载路径是否安全?

这取决于您使用什么特定的块存储。例如,Xodus 在 Amazon EBS 上运行良好,但 EBS 不允许共享数据库文件。如果块存储是可共享的,那么任何打开的环境都将被锁定,因此您必须以某种方式 "shard" 主机之间的环境路径以防止打开冲突。也许,可以尝试在 中打开环境,但只有当块存储能够产生合适的文件系统事件时,它才会起作用。

此外,如果在单个 JVM 中使用多个环境,设置 config.setLogCacheShared(false) 将导致 OOME。