我想构建一个基于 GlusterFS 和自动文件复制 (AFR) 的分布式存储,以容错的方式存储用户文件。
但我也想从多个客户端访问存储在 GlusterFS 卷上的 SQLite3 数据库(并因此复制到多个服务器上)。可能吗?多个客户端之间的并发是否会得到很好的处理,不会导致腐败?
或者是否有更好的替代 GlusterFS 来分发 SQLite3 数据库?
我想构建一个基于 GlusterFS 和自动文件复制 (AFR) 的分布式存储,以容错的方式存储用户文件。
但我也想从多个客户端访问存储在 GlusterFS 卷上的 SQLite3 数据库(并因此复制到多个服务器上)。可能吗?多个客户端之间的并发是否会得到很好的处理,不会导致腐败?
或者是否有更好的替代 GlusterFS 来分发 SQLite3 数据库?
我写了一个sqlite_shared_fs_check.sh脚本来模拟对 sqlite3 数据库的许多读写。它应该在多台客户端机器上的同一个 GlusterFS 目录中运行。
我测试了以下配置:
最后一次测试(ext3+sqlite3)的结果将 POSIX 锁定不一致性归咎于 GlusterFS 3.2。
这是我用来进行测试的脚本:
请注意,我必须使用 lockfile-create 实用程序来获取数据库上的锁定,因为 sqlite 的内部锁定不够可靠。
GlusterFS 即使在复制模式下也支持完整的 POSIX 文件/记录级别锁定。它应该可以正常工作。
我认为锁定可能是其中最难的部分。想象一下,写入过程必须在写入时锁定 sqlite3 数据库(文件)。问题是您需要什么级别的并发?我认为您将面临写绑定应用程序可能出现的性能问题。
您将遇到锁定问题,其中(实际上)一个客户端一次可以写入文件。