集群中NFS上的SQLite DB。我会得到数据损坏吗?

时间:2017-09-11 15:19:49

标签: sqlite docker-swarm nfs

我将SQLite用于我想要在NFS上保留的数据库。我的群集中的任何VM可能会在某些时候关闭,在这种情况下,docker swarm将在另一个VM上启动副本以接管。

不幸的是,NFS似乎不支持文件锁定,因此我将其关闭(通过安装" nolock")现在我担心我是否可以确定数据不会被破坏。

我能想到的场景是:其中一个虚拟机只是从互联网断开,只是让另一个副本旋转并接管流量,然后它又回来并写入数据库 - >损坏的数据

如果支持文件锁定,是否可以保存使用这样的NFS? 我是否正确地假设它不是" nolock"指定?

1 个答案:

答案 0 :(得分:1)

documentationnolock

  

这对于访问不支持锁定的文件系统上的数据库很有用。警告:如果两个或多个进程写入同一数据库,并且其中任何一个进程使用nolock = 1,则可能导致数据库损坏。

另一种方法是使用unix-dotfile VFS通过创建单独的文件来实现锁定。这甚至可以在无锁NFS上运行,但

  • 它比'真实'锁定慢;
  • 它可以防止任何类型的并发(只有一个客户端可以访问数据库,即使是读取);和
  • 如果您的客户在交易过程中死亡,则锁定文件会保留,并且必须手动删除。