与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不允许共享数据库文件。如果块存储是可共享的,那么任何打开的环境都将被锁定,因此您必须以某种方式在主机之间"分割"环境路径,以防止打开冲突。也许,可以尝试以只读侦听模式打开Environments,但只有当块存储能够产生合适的文件系统事件时,它才能工作。

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

最新更新