数据存储在集群环境中的哪个位置?

时间:2014-12-20 14:13:54

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

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

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

我该怎么用?我尝试使用Hadoop,但无法挂载(所有指南都已过时,我正在运行Ubuntu 14.04)。

我无法成为世界上第一个尝试在群集环境中读取/存储数据的人。这是怎么做到的?

2 个答案:

答案 0 :(得分:3)

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

Amazon在弹性bean-stalk上有一个类似的docker设置,你可以将ebs卷挂载到一个实例上,但是它再次与docker volume的概念不相称。

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

答案 1 :(得分:0)

您可以使用Google Cloud Storage存储该数据,这些数据可供任何应用使用,甚至可以在Google网络之外使用。

特别是从GCE访问时,请参阅中的相应行  Integration with Google Cloud Platform表:

  

在Compute Engine实例中使用云存储: