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

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

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

我为此使用什么? 我试图使用Hadoop,但它是不可能的(所有指南都过时了,我运行Ubuntu 14.04)。

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

坦率地说,这是所有dockerpipe理系统(AFAIK)的共同弱点。 Google容器引擎具有持久性磁盘function,因此可以创build在容器重新启动时持续存在的卷。 但是,每个持久性磁盘只能连接到devise为在单个实例上运行的容器。 这破坏了分布式环境的目的。

亚马逊有一个类似的弹性豆梗的docker设置,你可以将ebs卷挂载到一个实例上,但是它再也不能和docker卷的概念搭配。

CoreOS通过在所有集群之间提供共享键值存储来使用etcd。 这不像分布式文件系统那么有用,但是你至less可以在容器之间共享一些数据。

如果你想要在容器之间共享数据,你将不得不推出你自己的解决scheme,现在就给出这个观点。

编辑:以特权模式运行容器我能够使用s3fs挂载s3存储桶到容器中,所以这可以成为您自己的解决scheme的一个选项。 虽然我不会使用它来编写繁重的工作负载。

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 

您可以使用Google云端存储来存储该数据,即使在Google的networking之外,也可以使用任何应用。

特别是从GCE访问时,请参阅与Google云端平台集成表中的相应行:

在计算引擎实例中使用云存储:

  • 在应用程序中使用服务帐户
  • 将图像导出到Google云端存储
  • 使用存储在Google云端存储中的启动脚本
  • 将一个存储桶挂载为虚拟机实例上的文件系统