我运行一个Google Cloud Managed Instance Group(Ubuntu)来运行一个Web服务器,今天早上服务器下线。 我检查了服务器状态,似乎所有的数据都丢失了。 所有的apache2文件,apache2和PHP服务,模块等等都是缺less的,就好像它是全新的安装。
起初,我认为这是因为我没有为我的服务器分配一个静态IP,但是login到SSH后,我发现我的Web服务器中的所有www和apache2文件都没有了。
我注意到,今天早上当我的服务器达到CPU使用率的自动调节点时发生了这种情况。 显然它创build了另一个实例,但没有数据。
我目前正在设置另一个虚拟机实例,但显然有些错误。 我应该怎么做才能防止这种情况发生/
从评论看来,数据已经消失,因为它驻留在一个被pipe理实例组的一部分的实例中。 当该组需要额外资源时,将根据实例模板创build一个新实例。 据推测,该模板不包含在给定实例上收集的任何数据,因此新实例不包含任何数据。 这正是如何失去存储在这些实例上的数据的可能性。
另外,如果没有适当的系统同步实例间的数据,直接在这些实例上存储数据几乎会立即导致数据差异。 给定一个具有2个实例( A和B )的组,负载均衡器向实例A发送一个请求,导致写入。 过了一会儿,负载平衡器向实例B发送一个新请求,查找最近写入的数据。 它什么也找不到。 因此,数据必须被同步,这可能是非常昂贵并且容易出错的,或者更好地在缩放实例组之外被迁移。
在GCE讨论组关于缩放单个虚拟机的文章中 ,Kamran描述了如何防止这种数据丢失/差异。 如果实例没有持久状态(在closures后继续存在),则可以认为它们是无状态的 。 使一个给定组中的所有实例无状态的好处是,可以期望组中的任何实例以相同的方式行为并以相同的方式处理任务。 因此,它可以很好地适应横向扩展(拥有更多的实例来处理更多的工作,而不仅仅是拥有更强大的实例)。
通常,这种无状态devise要求您将数据/文件存储迁移到实例组之外。 在SQL的情况下,可以将数据移动到可供实例组访问的Cloud SQL实例或用于NoSQL替代的Cloud Datastore。 对于文件存储,可以将文件迁移到云存储。 您甚至可以使用Cloud Storage FUSE在您的托pipe实例上将给定的GCS存储桶作为文件系统安装。