假设一个基本副本 3 仲裁者 1配置,glusterfs 服务器 4.0.2和glusterfs-客户端 4.0.2。 glusterfs 客户端安装在Ubuntu 18.04。
为了验证当一个存储节点发生故障时是否允许写入/读取操作,如文档,会出现意外结果。在其中一个非仲裁节点上终止 gluster 进程(使用pkill ^gluster*
)后,客户端挂载点失败,并显示“ Client quorum is not met.
”(查看 glusterfs-client 日志文件)。
Gluster 卷信息:
Volume Name: brick01
Type: Replicate
Volume ID: 2310c6f4-f83d-4691-97a7-cbebc01b3cf7
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: proxmoxVE-1:/mnt/gluster/bricks/brick01
Brick2: proxmoxVE-2:/mnt/gluster/bricks/brick01
Brick3: arbiter01:/mnt/gluster/bricks/brick01 (arbiter)
该卷通过以下命令创建
gluster volume create brick01 replica 3 arbiter 1
proxmoxVE-1:/mnt/gluster/bricks/brick01
proxmoxVE-2:/mnt/gluster/bricks/brick01
arbiter01:/mnt/gluster/bricks/brick01
如上所述文档,当一个 brick 宕机时,文件操作应该被允许(如果仲裁器同意),那么为什么我在客户端收到“客户端仲裁未达到”?在花了大量时间阅读官方文档后glusterfs
,我找不到为什么会发生这种情况的解释,还提交了一个错误报告在红帽 Bugzilla。
任何有关该主题的帮助都将非常感谢!
答案1
gluster volume heal brick01 enablе
解决了这个问题。
这最终将重新配置选项添加cluster.self-heal-daemon: enable
到卷中。似乎默认情况下,仲裁程序块在发生任何文件操作时无法同时修复(同步),并将责任归咎于仍在运行的其他程序块。