You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gluster复制卷同步问题求助:SQLite文件更新后无法同步

问题:Gluster复制卷用于SQLite存储时文件更新无法同步,gluster volume heal无效

我想把Gluster复制卷用于SQLite数据库存储,但.db文件更新后,Linux系统检测不到变化,导致Brick之间无法同步。试过gluster volume heal命令也没用,有没有强制同步的方法?


Gluster卷状态

[root@be-k8s-worker-1 common]#  gluster volume create sync_test replica 2 transport tcp 10.XX.XX.X1:/home/common/sync_test  10.XX.XX.X2:/home/common/sync_test
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?
 (y/n) y
volume create: sync_test: success: please start the volume to access data
[root@be-k8s-worker-1 common]# gluster volume start sync_test
volume start: sync_test: success
[root@be-k8s-worker-1 sync_test]# gluster volume status sync_test
Status of volume: sync_test
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick 10.XX.XX.X1:/home/common/sync_test    49155     0          Y       1142
Brick 10.XX.XX.X2:/home/common/sync_test    49155     0          Y       2134
Self-heal Daemon on localhost               N/A       N/A        Y       2612
Self-heal Daemon on 10.XX.XX.X1             N/A       N/A        Y       4257

Task Status of Volume sync_test
------------------------------------------------------------------------------
There are no active volume tasks

问题案例

[root@be-k8s-worker-1 sync_test]# ls -al ## client 1
total 20
drwxrwxrwx. 4 root  root           122 Oct 17 10:51 .
drwx------. 8 sbyun domain users  4096 Oct 17 10:50 ..
-rw-r--r--. 1 root  root             0 Oct 17 10:35 test
-rwxr--r--. 1 sbyun domain users 16384 Oct 17 10:52 test.db
[root@be-k8s-worker-1 sync_test2]# ls -al ## client2
total 20
drwxrwxrwx. 4 root  root           122 Oct 17 10:51 .
drwx------. 8 sbyun domain users  4096 Oct 17 10:50 ..
-rw-r--r--. 1 root  root             0 Oct 17 10:35 test
-rwxr--r--. 1 sbyun domain users 16384 Oct 17 10:52 test.db
## diff -> No result
[root@be-k8s-worker-1 user]# diff sync_test/test.db sync_test2/test.db

在Windows系统中对比这两个文件,能发现内容差异。


解决方案建议

1. 强制SQLite实时落盘

SQLite默认用内存页缓存+延迟写入,不会立即把修改同步到磁盘,导致Gluster检测不到变化。可以在打开数据库时设置同步参数:

sqlite3 test.db "PRAGMA synchronous=FULL;"

或者在应用连接SQLite时指定synchronous=FULL,确保修改实时写入磁盘。

2. 触发Gluster主动同步

如果文件已修改但Gluster未同步,尝试以下命令强制修复:

  • 全量触发自我修复:
gluster volume heal sync_test full
  • 针对单个文件修复:
gluster volume heal sync_test /test.db
  • 查看待修复文件列表:
gluster volume heal sync_test info

3. 调整Gluster文件检测机制

Gluster依赖inotify事件触发同步,若inotify失效:

  • 检查并调高inotify监听上限:
# 查看当前值
sysctl fs.inotify.max_user_watches
# 临时调高
sysctl -w fs.inotify.max_user_watches=1048576
# 永久生效
echo "fs.inotify.max_user_watches=1048576" >> /etc/sysctl.conf
  • 禁用Gluster缓存(性能会下降,按需使用):
gluster volume set sync_test performance.cache-size 0
gluster volume set sync_test performance.stat-prefetch off

4. 解决Replica 2的脑裂风险

你的卷是Replica 2配置,本身存在脑裂隐患,这会导致同步异常。建议升级为Replica 3或添加Arbiter节点:

# 添加Arbiter节点示例
gluster volume add-brick sync_test arbiter 10.XX.XX.X3:/home/common/sync_test_arbiter

5. 验证同步结果

执行以下命令确认文件是否同步完成:

# 查看已修复文件
gluster volume heal sync_test info healed
# 对比两个Brick上文件的哈希值
md5sum 10.XX.XX.X1:/home/common/sync_test/test.db
md5sum 10.XX.XX.X2:/home/common/sync_test/test.db

内容的提问来源于stack exchange,提问作者Subin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:30:58