java - 集群环境中数据存储在哪里?

标签 java google-app-engine jakarta-ee docker

当人们创建在集群环境中运行的应用程序时,他们的数据到底存储在哪里?

我创建了一个从主机上的目录读取 XSLT 的应用程序。但是,如果我想在容器(Docker)内的 Google Cloud Engine 中运行相同的应用程序,如果我使用服务(负载平衡),我会遇到很大的问题。必须有一个可供所有读/写的公共(public)数据存储。它应该安装在每个 Pod 上(对吗?)。

我用什么来做这个?我尝试使用 Hadoop,但无法安装(所有指南都已过时,我运行的是 Ubuntu 14.04)。

我不可能成为地球上第一个尝试在集群环境中读取/存储数据的人。这是怎么做到的?

最佳答案

坦率地说,这是所有 Docker 编排系统的共同弱点(AFAIK)。 Google 容器引擎具有 persistent disk功能,以便可以创建在容器重新启动后保持不变的卷。但是,每个永久磁盘只能附加到设计为在单个实例上运行的容器。这违背了分布式环境的目的。

Amazon 在 elastic-bean-stalk 上对 docker 有类似的设置,您可以将 ebs 卷挂载到实例上,但同样它与 docker 卷的概念不太相符。

CoreOS为此,使用 etcd 通过在所有集群之间提供共享键值存储来实现此目的。这实际上不如分布式文件系统那么有用,但您至少可以在容器之间共享一些数据。

目前的情况是,如果您希望在容器之间共享数据,则必须推出自己的解决方案。

编辑:在特权模式下运行容器我能够使用 s3fs 将 s3 存储桶装载到容器中,因此这可以成为滚动您自己的解决方案的一种选择。尽管我不会使用它来编写繁重的工作负载。

docker run -privileged -it ubuntu bash
apt-get install build-essential git libfuse-dev libcurl4-openssl-dev 
       libxml2-dev mime-support automake libtool
apt-get install pkg-config libssl-dev # See (*3)
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl # See (*1)
make
sudo make install

echo AWS_KEY:AWS_SECRET>/etc/passwd-s3fs
chmod 400 /etc/passwd-s3fs
s3fs my-bucket /mnt

关于java - 集群环境中数据存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581017/

相关文章:

java - luna eclipse 4.4.0 更新软件失败

google-app-engine - 有人在那里使用 web2py 吗?

java - EJB 和在数据结构(映射、列表等)中存储对象

eclipse - 在 Eclipse 中验证 pom.xml 时出现 FailOnMissingWebXml 错误

java - 为什么 Primefaces 不刷新我的按钮?

java - 有效地散列目录中的所有文件(1000 个 2MB 文件)

java - 使用对话框阻塞 Android 线程

java - Google App Engine 中的默认凭据 : Invalid Credentials error

java - Eclipse Google 插件不启动 Web 应用程序的服务器

java服务包装器