我正在尝试使用 glusterfs 3.7.6 进行数据复制并使用 pacemaker+corosync 作为资源管理器来构建具有高可用性 apache 的 2 节点 Linux 服务器。但是,我发现在特定情况下,当两个节点都关闭并且其中一个节点先联机时,gluster 会出现问题。即使该节点上有砖块并且 gluster 服务正在运行,也没有砖块进程。
[root@node1 ~]# gluster volume status data
Status of volume: data
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/gluster_data N/A N/A N N/A
NFS Server on localhost N/A N/A N N/A
NFS Server on localhost N/A N/A N N/A
Task Status of Volume data
------------------------------------------------------------------------------
There are no active volume tasks
当我启动另一个节点时,一切似乎都正常,我可以安装该卷。
[root@node1 ~]# gluster volume status data
Status of volume: data
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/gluster_data 49152 0 Y 2674
Brick node2:/gluster_data 49152 0 Y 3086
NFS Server on localhost N/A N/A N N/A
Self-heal Daemon on localhost N/A N/A Y 2796
NFS Server on node2 N/A N/A N N/A
Self-heal Daemon on node2 N/A N/A Y 3085
Task Status of Volume data
------------------------------------------------------------------------------
There are no active volume tasks
此时,如果我关闭 node2,node1 brick 进程仍然处于活动状态,所以至少我可以安装并使用它。
[root@node1 ~]# gluster volume status data
Status of volume: data
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/gluster_data 49152 0 Y 2674
NFS Server on localhost N/A N/A N N/A
Self-heal Daemon on localhost N/A N/A Y 2796
Task Status of Volume data
------------------------------------------------------------------------------
There are no active volume tasks
因此,我的观察是,要使 gluster 卷正常工作,两个节点至少需要在线一段时间,以便砖块可以启动,然后如果一个节点发生故障,它不会影响卷操作。那么当其中一个节点从完全停电中恢复在线时,我该如何让它工作?
答案1
任何集群节点从完全停止状态恢复时都会遇到的问题是:
我是否拥有最新状态?我不想声称
latest
自己落后于其他宕机节点。
这就是为什么集群通常包含某种仲裁机制,这样现有节点就可以对状态进行投票并达成共识。双节点集群无法使用此机制,因为永远不会出现“多数”分区。在 3.7 版本中,Gluster 获得了仲裁功能。
http://gluster.readthedocs.org/en/release-3.7.0beta1/Features/server-quorum/
在该文档中,他们指出双节点集群无法使用它,原因正如我上面所描述的。
在您的案例中,您可能需要考虑在 Gluster 设置中创建一些仅用于管理的节点。这些节点是probed
进入集群但不托管任何存储的对等节点。它们存在的全部原因就是维护集群状态。它们可以存在于不同的机架、数据中心、电源相位中,以尝试确保它们与存储块处于不同的故障域中。这将增加集群中的成员数量,并且如果其中一个存储块在没有另一个存储块的情况下启动,则会增加出现多数分区的可能性。
不幸的是,你看到的行为是按设计工作如果不向集群中添加更多服务器,就无法进行更改。