glusterd守护进程在每个受信任的服务器节点上运行,并负责管理受信任的池和卷。 gluster CLI向本地节点上的glusterd守护进程发送命令,后者执行操作并将结果返回给用户。
调试glusterd
日志
遇到问题时首先查看gluster的日志,默认日志保存在/var/log/glusterfs。CLI和glusterd的日志路径为:
-
glusterd : /var/log/glusterfs/glusterd.log
-
gluster CLI : /var/log/glusterfs/cli.log
常见问题和解决方法
"*Another transaction is in progress for volname*" or "*Locking failed on xxx.xxx.xxx.xxx"*
由于Gluster本质上是分布式的,因此Gluster在执行操作时会锁定,以确保对卷所做的配置更改在集群中是原子性的。以下情况下会返回这些错误:
-
多个事务在同一个锁上争用
解决方案:这些可能是暂时性错误,如果在其他事务完成后重试,操作将成功。
-
其中一个节点上存在过时的锁
解决方案:在清除陈旧的锁之前,重复该操作将没有帮助。重新启动持有锁的glusterd服务。
-
检查glusterd.log文件,找出哪个节点持有过时的锁。查找消息:
lock being holded by <uuid>
-
运行“gluster peer status”以在日志消息中使用uuid标识节点。
-
重启这个节点上的glusterd服务.
"*Transport endpoint is not connected*" 报错,但所有brick都是up的
这通常发生在brick进程没有干净地关闭,将过时的数据留在glusterd进程中。Gluster客户端进程向glusterd查询bricks进程正在侦听的端口,并尝试连接到该端口。如果glusterd中的端口信息不正确,则客户端将无法连接到bricks,即使它已启动。需要访问该块的操作可能会失败,并显示“传输端点未连接”。
解决方案:重新启动glusterd服务。
"Peer Rejected"
gluster peer status
返回"Peer Rejected".
Hostname: <hostname>
Uuid: <xxxx-xxx-xxxx>
State: Peer Rejected (Connected)
这表示节点上的卷配置与受信任存储池的其余部分不同步。您应该在运行对等状态命令的节点的glusterd日志中看到以下消息:
Version of Cksums <vol-name> differ. local cksum = xxxxxx, remote cksum = xxxxyx on peer <hostname>
解决方案:更新cluster.op-version
-
运行
gluster volume get all cluster.max-op-version
获取最新支持的cluster.op-version. -
通过执行
gluster volume set all cluster.op-version <op-version>
将cluster.op-version更新为支持的最新操作版本.
"Accepted Peer Request"
如果在扩容集群时glusterd握手失败,那么集群的视图将不一致。“gluster peer status”中的peer状态将为“accepted peer request”,随后的CLI命令将失败并出现错误。例如,Volume create command will fail with "volume create: testvol: failed: Host <hostname> is not in 'Peer in Cluster' state
在这种情况下,“/var/lib/glusterd/peers/<UUID>”中的状态字段的值将不是3。
解决方法:
-
停止glusterd服务
-
将
/var/lib/glusterd/peers/<UUID>
中的state修改为3 -
启动glusterd服务