从文件裂恢复的步骤。
快速启动︰
1.获得在裂是该文件的路径︰
它可以获得通过 a) The command
gluster volume heal info split-brain.
b) 标识为其执行文件操作的文件 从客户端保持输入/输出错误。
2.关闭的应用程序打开此文件的装入点。 如越南船民,他们需要被关闭。
3.决定正确的副本︰
这是通过观察空燃比扩展的更新日志文件的属性 使用 getfattr 命令; 砖然后确定类型的裂
(裂,元数据裂,数据项裂或裂致 gfid-不匹配);和最后确定哪些砖块包含正确的副本
文件。
getfattr -d -m . -e hex <file-path-on-brick>.
也有可能一砖可能包含正确的数据时 其他可能包含正确的元数据。
4.重置上包含 brick(s) 的有关扩展的属性 坏副本的文件数据元使用 setfattr 命令。
setfattr -n <attribute-name> -v <attribute-value> <file-path-on-brick>
5.通过从客户端执行查找触发自我修复的文件︰
ls -l <file-path-on-gluster-mount>
步骤 3 到 5 步骤的详细的说明︰
要理解如何解决裂我们需要知道如何解释 扩展属性的空燃比更新日志。
Execute getfattr -d -m . -e hex <file-path-on-brick>
- 示例︰ [root@store3 ~] # getfattr-d-e 十六进制-file.txt 下午砖 / #file: /: file.txt 砖一 security.selinux=0x726f6f743a6f626a6563745f723a66696c655f743a733000 trusted.afr.vol-客户端-2 = 0x000000000000000000000000 trusted.afr.vol-客户端-3 = 0x000000000200000000000000 trusted.gfid=0x307a5c9efddd4e7c96e94fd4bcdcbd1b
The extended attributes with trusted.afr.<volname>-client-<subvolume-index>
由空燃比用于维护文件的更新日志。值
trusted.afr.<volname>-client-<subvolume-index> are calculated by the glusterfs
客户端 (保险丝或 nfs 服务器) 进程。当 glusterfs 客户端修改文件
或目录,客户端将联系每个砖和更新的更新日志扩展 根据砖的响应特性。
'子宗卷指数' (砖数-1) 只不过是在
gluster volume info <volname> output.
- 示例︰ [root@pranithk-laptop ~] # gluster 卷信息 vol 卷名︰ 卷 类型︰ 分布式复制 卷 ID: 4f2d7849-fbd6-40a2-b346-d13420978a01 状态︰ 创建 砖的数目︰ 4 x 2 = 8 传输类型︰ tcp 砖头︰ 砖答︰ pranithk 笔记本电脑︰ gfs/砖一 砖 b: pranithk 笔记本电脑: / gfs/砖-b 砖 c: pranithk 笔记本电脑: / gfs/砖-c 砖-d: pranithk 笔记本电脑: / gfs 模数砖 砖-e: pranithk 笔记本电脑: / gfs/砖-e 砖-f: pranithk 笔记本电脑: / gfs 楼砖 砖-g: pranithk 笔记本电脑: / gfs/砖-g 砖-h: pranithk 笔记本电脑: / gfs/砖-h
在上面的示例︰
砖 | 副本集 | 砖子宗卷索引
----------------------------------------------------------------------------
-政府飞行服务队/砖一 | 0 | 0
-/ gfs/砖-b | 0 | 1
-/ gfs/砖-c | 1 | 2
-/ gfs 模数砖 | 1 | 3
-/ gfs/砖-e | 2 | 4
-/ gfs/砖-f | 2 | 5
-/ gfs/砖-g | 3 | 6
-/ gfs/砖-h | 3 | 7
每个文件在砖维护本身的更新日志和文件 目前在其副本集所看到的那块砖头上所有的砖块。
上面给出的示例货量,砖一将中的所有文件都有 2 个条目, 一个用于本身和其他的文件存在于其副本双 i.e.brick b: trusted.afr.vol-客户端-0 = 0x000000000000000000000000--> (砖 a) 本身的更新日志 trusted.afr.vol-客户端-1 = 0x000000000000000000000000--> 砖 b 一样被砖一更新日志
同样,在砖 b 中的所有文件都都将︰ trusted.afr.vol-客户端-0 = 0x000000000000000000000000-更新日志-> 砖 — — 一个一样被砖 b trusted.afr.vol-客户端-1 = 0x000000000000000000000000--> 更新日志本身 (砖-b)
同样可以扩展其他副本双。
口译 (大约挂起操作计数) 的更新日志值︰ 每个扩展的属性已是 24 十六进制小数位数的值。 第一次 8 位数字代表数据的更新的日志。第二,8 位数字代表的更新日志
元数据。最后 8 位数字代表目录条目的更新的日志。
构想代表一样,我们有︰
0 x 000003 d 7 00000001 00000000
| | |
| | 河边的目录条目的更新日志
| 河边的元数据的更新日志
\ _ 更新日志的数据
目录元数据和条目更新历史是有效的。 对于常规文件数据和元数据更新历史是有效的。 为特殊的文件,如设备文件等元数据更改日志是有效的。 当一个文件裂发生它可能是任何数据裂或 裂的元数据或两者。当裂发生的更新日志
文件将这样的事情︰
- 示例: (让我们考虑这两个数据,裂上同一文件的元数据)。 [root@pranithk-laptop vol] # getfattr-d-m。-e 六角/gfs/砖-? /a
getfattr︰ 删除前导 '/' 从绝对路径名称 #file: gfs/砖-a/a trusted.afr.vol-客户端-0 = 0x000000000000000000000000 trusted.afr.vol-客户端-1 = 0x000003d70000000100000000 trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57 #file: gfs/砖-b/a trusted.afr.vol-客户端-0 = 0x000003b00000000100000000 trusted.afr.vol-客户端-1 = 0x000000000000000000000000 trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57
# #Observations:
# #According 到更新日志扩展属性对文件 /gfs/brick-a/a:
Trusted.afr.vol-客户端-0 的第 8 位数字是所有 零 (0x00000000......) 和第 8 位 trusted.afr.vol-客户端-1 并不是所有零 (0x000003d7...)。 所以在 /gfs/brick-a/a 上的更新日志隐含着一些数据操作成功 在本身但失败在 /gfs/brick-b/a 上。
Trusted.afr.vol-客户端-0 第二 8 位数字是 全部为零 (0 x......00000000......),和第二 8 位数
trusted.afr.vol-客户端-1 并非全部为零 (0 x......00000001...)。
所以在 /gfs/brick-a/a 上的更新日志隐含着一些元数据操作成功 在本身但失败在 /gfs/brick-b/a 上。
# #According 到更新日志扩展属性对文件 /gfs/brick-b/a:
Trusted.afr.vol-客户端-0 的第 8 位数字都是不 零 (0x000003b0...) 和第 8 位 trusted.afr.vol-客户端-1 的所有零 (0x00000000...)。 所以在 /gfs/brick-b/a 上的更新日志隐含着一些数据操作成功 在本身但失败在 /gfs/brick-a/a 上。
Trusted.afr.vol-客户端-0 第二 8 位数不是 全部为零 (0 x......00000001......),和第二 8 位数
trusted.afr.vol-客户端-1 的所有零 (0x...00000000...)。
所以在 /gfs/brick-b/a 上的更新日志隐含着一些元数据操作成功 在本身但失败在 /gfs/brick-a/a 上。
由于这两个副本都有数据,元数据的更改,但不在其他 文件,它是在数据和元数据裂。
决定正确的副本︰
用户可能需要检查统计,getfattr 输出的文件,以决定哪 要保留元数据和文件来决定要保留的数据的内容。 上例中,让我们继续说我们想要保留的数据 /gfs/brick-a/a 和 /gfs/brick-b/a 的元数据。
重置相关的更新历史解决裂︰
为解决数据拆分大脑︰ 我们需要更改扩展文件属性,仿佛有些更新日志数据 操作上成功 /gfs/brick-a/a,但在 /gfs/brick-b/a 上失败。但
/gfs/brick-b/a 不应该说一些数据操作的任何更新日志 成功地在 /gfs/brick-b/a 但失败在 /gfs/brick-a/a 上。我们需要重置
对 trusted.afr.vol-客户端-0 /gfs/brick-b/a 的更新日志的数据部分。
为解决大脑-分裂-元数据︰ 我们需要更改扩展文件属性,仿佛有些更新日志 元数据操作上成功 /gfs/brick-b/a,但在 /gfs/brick-a/a 上失败。 但 /gfs/brick-a/a 不应该说一些元数据的任何更新日志 操作上成功 /gfs/brick-a/a,但在 /gfs/brick-b/a 上失败。 我们需要重置元数据部分中的更新日志上 trusted.afr.vol-客户端-1 的 /gfs/brick-a/a
因此,预期的变化如下︰
在 /gfs/brick-b/a: 上
为 trusted.afr.vol-客户端-0
0x000003b00000000100000000 至 0x000000000000000100000000
(请注意,元数据部分仍然不全为零)
因此执行
setfattr -n trusted.afr.vol-client-0 -v 0x000000000000000100000000 /gfs/brick-b/a
在 /gfs/brick-a/a: 上
Trusted.afr.vol-客户端-1
0x000003d70000000100000000 至 0x000003d70000000000000000
(请注意,数据部分仍然不全为零)
因此执行
setfattr -n trusted.afr.vol-client-1 -v 0x000003d70000000000000000 /gfs/brick-a/a
因此上述操作完成后,更新历史看起来像这样︰ [root@pranithk-laptop vol] # getfattr-d-m。-e 六角/gfs/砖-? /a
getfattr︰ 删除前导 '/' 从绝对路径名称 #file: gfs/砖-a/a trusted.afr.vol-客户端-0 = 0x000000000000000000000000 trusted.afr.vol-客户端-1 = 0x000003d70000000000000000 trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57
#file: gfs/砖-b/a trusted.afr.vol-客户端-0 = 0x000000000000000100000000 trusted.afr.vol-客户端-1 = 0x000000000000000000000000 trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57
触发自我修复︰
Perform ls -l <file-path-on-gluster-mount> to trigger healing.
固定的目录条目裂︰
空燃比有能力保守合并不同目录中的条目 当裂上有目录。 如果一个砖目录上有 '有条目 '1','2' 并且有条目 3','4' 上 其他的砖然后空燃比,将合并所有目录中的条目 '1','2','3' '4' 个条目相同的目录中。 (注意︰ 这可能会导致删除的文件,重新出现在案例裂 发生删除的目录上的文件) 裂的决议需要人为干预时至少一个条目 哪个有相同的文件名字但不同 gfid 在该目录中。 示例︰ 对砖一目录有 '1' (与 gfid g1),'2' 和砖 b 上的条目 目录有条目 (用 gfid g2) 的 ' 1' 和 '3'。 这种目录拆分 — — 大脑需要人类的干预来解决。 用户需要删除上砖一文件 '1' 或 '1' 砖 b 上的文件 若要解决裂。此外,相应的 gfid 链接文件也
需要被删除。Gfid 链接文件存在.glusterfs 文件夹中
在砖的顶级目录。如果文件的 gfid 是
0x307a5c9efddd4e7c96e94fd4bcdcbd1b (trusted.gfid 扩展的属性得到 从 getfattr 命令早些时候),可以在找到 gfid 链接文件
/gfs/brick-a/.glusterfs/30/7a/307a5c9efddd4e7c96e94fd4bcdcbd1b
# #Word 的警告︰
在删除之前 gfid 链接,我们必须确保没有硬链接 到那块砖头上的现有文件。如果硬链接存在,他们必须作为删除
很好。