集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?
Posted
技术标签:
【中文标题】集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?【英文标题】:SQLite DB on NFS in cluster. Will I get data corruption? 【发布时间】:2017-09-11 15:19:49 【问题描述】:我将 SQLite 用于我想保留在 NFS 上的数据库。我集群中的任何虚拟机都可能在某个时候关闭,在这种情况下,docker swarm 会在另一个虚拟机上启动一个副本来接管。
不幸的是,NFS 似乎不支持文件锁定,所以我关闭了它(通过使用“nolock”安装)现在我担心我是否可以确定数据不会被损坏。
我能想到的场景是:其中一个 VM 只是与 Internet 断开了足够长的时间,以便另一个副本启动并接管流量,然后它返回并写入数据库 --> 损坏数据
如果支持文件锁定,这样使用 NFS 会不会省钱? 我是否正确地假设它不是在指定“nolock”时?
【问题讨论】:
【参考方案1】:documentation 说的是nolock
:
这对于访问不支持锁定的文件系统上的数据库很有用。注意:如果两个或多个进程写入同一个数据库并且其中任何一个进程使用 nolock=1,则可能导致数据库损坏。
另一种方法是使用unix-dotfile
VFS,它通过创建一个单独的文件来实现锁定。这甚至适用于无锁 NFS,但是
【讨论】:
感谢您提出这个有趣的替代方案以及文档中的信息。如果我找到一种方法来使用带有 nfs 的锁,那么在集群上使用它是否安全? 那要看加锁是否正确实现了。 添加文档链接:sqlite.org/vfs.html#standard_unix_vfses @CL。我尝试使用 unix-dotfile,但它不起作用 (github.com/optuna/optuna/issues/815)以上是关于集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?的主要内容,如果未能解决你的问题,请参考以下文章
在尝试搜索数据库中的名称时遇到Tkinter Treeview和SQLite的问题