在gluster的brick server上,每个文件的形如"trusted.afr.*"的扩展属性用来记录复制有关的信息.
*是所有副本的名称,比如一个文件a.txt,在副本client-0和client-1上,用getfattr -m . -d -e hex命令查看该文件,就会有
[quote]client-0=0x000000000000000000000000
client-1=0x000000000000000000000000[/quote]
两条信息.trusted.afr.*实际记录了其他副本的更改的次数.
这个值的前8个数字是数据操作,中间8个是元数据操作(chmod之类),后面8个是命名空间操作(rename之类)
每次replicate的时候,这个counter先加1,然后进行文件操作,如果某个brick client文件操作成功,那么该client对应的counter再减1.
这样正常的副本上所有的trusted.afr.*值都应该是0.
如果某个副本offline时进行了文件操作,其他副本对应它的值就是非0.比如client-0离线时进行一次文件内容操作,那么client-1上的属性为
[quote]client-0=0x000000010000000000000000
client-1=0x000000000000000000000000[/quote]
这样我们说client-1"控诉"了client-0(原文是accuses).控诉是进行self heal的依据.
一个副本A控诉了另一个副本B,我们就说A是明智的(原文是wise).self heal时如果只有一个明智的节点,那么就用明智的节点数据作为权威数据.
如果副本内存在多个明智的节点,就会出现脑裂(split brain).
脑裂时需要人工干预,需要人为删除其他副本,保留一个明智节点.
更多关于副本状态和self heal时算法,请参阅
[url]http://hekafs.org/index.php/2012/03/glusterfs-algorithms-replication-present/[/url]
[url]http://hekafs.org/index.php/2011/04/glusterfs-extended-attributes/[/url]
*是所有副本的名称,比如一个文件a.txt,在副本client-0和client-1上,用getfattr -m . -d -e hex命令查看该文件,就会有
[quote]client-0=0x000000000000000000000000
client-1=0x000000000000000000000000[/quote]
两条信息.trusted.afr.*实际记录了其他副本的更改的次数.
这个值的前8个数字是数据操作,中间8个是元数据操作(chmod之类),后面8个是命名空间操作(rename之类)
每次replicate的时候,这个counter先加1,然后进行文件操作,如果某个brick client文件操作成功,那么该client对应的counter再减1.
这样正常的副本上所有的trusted.afr.*值都应该是0.
如果某个副本offline时进行了文件操作,其他副本对应它的值就是非0.比如client-0离线时进行一次文件内容操作,那么client-1上的属性为
[quote]client-0=0x000000010000000000000000
client-1=0x000000000000000000000000[/quote]
这样我们说client-1"控诉"了client-0(原文是accuses).控诉是进行self heal的依据.
一个副本A控诉了另一个副本B,我们就说A是明智的(原文是wise).self heal时如果只有一个明智的节点,那么就用明智的节点数据作为权威数据.
如果副本内存在多个明智的节点,就会出现脑裂(split brain).
脑裂时需要人工干预,需要人为删除其他副本,保留一个明智节点.
更多关于副本状态和self heal时算法,请参阅
[url]http://hekafs.org/index.php/2012/03/glusterfs-algorithms-replication-present/[/url]
[url]http://hekafs.org/index.php/2011/04/glusterfs-extended-attributes/[/url]