glusterfs集群中每个进程服务都是由一组xlator来做对应的功能,每个请求都是从每个进程的中最上面一个xlator顺序执行到最后一个xlator,来实现本进程的工作,上图中的每个进程仅仅罗列了部分的xlator.glusterfs实现中客户端实现最重,体现在比较核心的三个模块,cluster/distribute、cluster/ec、cluster/replicate这三块,分别在客户端实现了哈希卷、EC卷、多副本卷的逻辑。每个客户端在使用mount时候会和glusterd通信获取到当前集群的拓扑信息,客户端通过弹性哈希算法来决定数据存储的位置,后续直接和对应的glusterfsd通信来完成IO
glusterfs服务端,在glusterfs集群中体现在glusterfsd的进程,这里主要是数据读写的一些io thread、网络请求接受和发送、访问控制、锁、刷盘的操作的xlator集合。
glusterd是glusterfs集群中管理进程,负责拉起glusterfsd服务、配置变更通知glusterfs客户端和glusterfsd,让他们各自根据变动来重新加载xlator.glusterd是通过读取glusterfs的集群配置来完成的,如下是glusterd加载的xaltor
volume management
// 定义glusterd加载的xaltor,这里对应的是glusterfs源代码中的xlator的实现目录
type mgmt/glusterd
option rpc-auth.auth-glusterfs on
option rpc-auth.auth-unix on
option rpc-auth.auth-null on
option rpc-auth-allow-insecure on
option transport.listen-backlog 1024
option max-port 60999
option event-threads 1
option ping-timeout 0
option transport.socket.listen-port 24007
option transport.socket.read-fail-log off
option transport.socket.keepalive-interval 2
option transport.socket.keepalive-time 10
option transport-type socket
// 这里是最核心的,是整个glusterfs集群的目录配置
option working-directory /var/lib/glusterd
end-volume