DRBD9用户指南

这是一份详尽的DRBD9用户指南,涵盖了DRBD的基础概念、特性、安装配置以及常见管理任务。DRBD是一种分布式磁盘冗余系统,支持单一主、双主模式、高效同步和多种复制策略。内容包括DRBD的内核模块、用户空间管理工具、资源角色、同步速率配置、I/O错误处理策略等。同时,提供了安装预先构建的二进制包、源代码编译以及使用DRBD的实用技巧,如在线设备验证、故障切换、资源升级等。此外,指南还提到了DRBD的商业支持、社区资源和相关出版物。
摘要由CSDN通过智能技术生成

DRBD9用户指南
目录
请先看这个. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
DRBD简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1. DRBD基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. 内核模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. 用户空间管理工具. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. 资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4. 资源角色. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. DRBD特征. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. 单一主(Single-primary)模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. 双主(Dual-primary)模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. 复制(Replication)模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4. 不只双向冗余(2-way redundancy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5. 自动提升资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6. 多种复制传输. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.7. 高效同步. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.8. 已挂起的复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9. 在线设备验证. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.10. 复制流量完整性检查. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.11. 裂脑通知和自动恢复. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.12. 支持磁盘刷新. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.13. Trim/Discard支持. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.14. 磁盘错误处理策略. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.15. 处理过时数据的策略. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.16. 三路叠加复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.17. 通过DRBD代理进行远程复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.18. 基于卡车的复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.19. 浮动节点. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.20. 数据重新平衡(水平存储扩展) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.21. DRBD客户端. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.22. Quorum(仲裁) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.23. VCS的DRBD集成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
建立和安装DRBD软件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. 安装预先构建的DRBD二进制包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1. LINBIT提供的包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. LINBIT提供的Docker镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3. 发行版提供的包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4. 从源代码编译包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
使用DRBD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4. 常见管理任务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1. 配置DRBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2. 检查DRBD状态. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3. 启用和禁用资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4. 重新配置资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5. 提升和降级资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6. 基本手动故障切换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.7. 升级DRBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.8. 启用双主模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.9. 使用在线设备验证. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.10. 配置同步速率. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.11. 配置基于校验和的同步. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.12. 配置拥塞策略和挂起复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.13. 配置I/O错误处理策略. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.14. 配置复制通信完整性检查. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.15. 调整资源大小. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.16. 禁用备份设备刷新. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.17. 配置裂脑行为. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.18. 创建堆叠的三节点设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.19. 永久无盘节点. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.20. 数据再平衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.21. 配置仲裁. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5. 使用DRBD代理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1. DRBD代理部署注意事项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2. 安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3. 许可证文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.4. 使用LINSTOR配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.5. 使用资源文件配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.6. 控制DRBD代理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.7. 关于DRBD代理插件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.8. 故障排除. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6. 故障排除和错误恢复. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.1. 处理硬盘故障. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2. 处理节点故障. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.3. 手动恢复裂脑. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
支持DRBD的应用程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7. 将DRBD与Pacemaker集成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.1. Pacemaker基础概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.2. 在Pacemaker集群中使用DRBD作为后台服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.3. 向集群配置添加DRBD支持的服务,包括主-从资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.4. 在Pacemaker集群中使用资源级围栏. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.5. 在Pacemaker集群中使用堆叠的DRBD资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.6. 配置DRBD以在两个支持SAN的Pacemaker集群之间进行复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.7. Importing DRBD’s promotion scores into the CIB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8. DRBD与红帽集群的集成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.1. 红帽集群背景信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.2. Red Hat集群配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.3. 在Red Hat集群故障转移集群中使用DRBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
9. 在DRBD中使用LVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
9.1. LVM基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
9.2. 使用逻辑卷作为DRBD备份设备. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.3. 在DRBD同步期间使用自动LVM快照. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.4. 将DRBD资源配置为物理卷. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9.5. 将新的DRBD卷添加到现有卷组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.6. 带DRBD的嵌套LVM配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.7. 带Pacemaker的高可用LVM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
10. 将GFS与DRBD结合使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10.1. GFS基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10.2. 创建适合GFS的DRBD资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10.3. 配置LVM以识别DRBD资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
10.4. 配置集群以支持GFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
10.5. 创建GFS文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
10.6. 使用GFS文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
11. 在DRBD中使用OCFS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.1. OCFS2基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.2. 创建适合OCFS2的DRBD资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.3. 创建OCFS2文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.4. Pacemaker OCFS2管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.5. 传统OCFS2管理(不带Pacemaker). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12. 在DRBD中使用Xen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.1. Xen基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.2. 设置DRBD模块参数以用于Xen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.3. 创建适合用作Xen VBD的DRBD资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.4. 使用DRBD VBDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.5. 启动、停止和迁移DRBD支持的domU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.6. DRBD/Xen集成的内部机制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
12.7. Xen与Pacemaker的集成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
优化DRBD性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
13. 测量块设备性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
13.1. 测量吞吐量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
13.2. 测量延迟. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
14. 优化DRBD吞吐量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.1. 硬件注意事项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.2. 吞吐量开销预期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.3. 调整建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.4. 通过增加冗余实现更好的读取性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
15. 优化DRBD延迟. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
15.1. 硬件注意事项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
15.2. 延迟开销预期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
15.3. 延迟与IOPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
15.4. 调整建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
了解更多. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
16. DRBD内幕. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
16.1. DRBD元数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
16.2. 生成标识符. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
16.3. 活动日志. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
16.4. 快速同步位图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
16.5. 节点围栏接口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
17. 获取更多信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.1. 商业DRBD支持. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.2. 公开邮件列表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.3. 公共IRC频道. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.4. 官方推特帐户. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.5. 出版物. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.6. 其他有用资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
附录. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
附录标题 A: 最近的变化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.1. 连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.2. 自动升级功能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.3. 提高性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.4. 一个资源中有多个卷. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.5. 配置语法的更改. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
A.6. 网络通信的在线变化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
A.7. 对 drbdadm 命令的更改. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
A.8. 更改的默认值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
请先看这个
本指南旨在为分布式复制块设备Distributed Repliated Block Device 版本9(DRBD-9)的用户提供最终参考指
南和手册。
该项目的发起公司 linbit, 正在向DRBD社区免费提供,希望它能造福业界。指南不断更新。我们尝试在相应
的DRBD版本中同时添加有关新DRBD特性的信息。本指南的在线HTML版本始终在 https://links.linbit.com/
DRBD9-Users-guide上提供。
 本指南始终假设您正在使用最新版本的DRBD和相关工具。如果您使用的是8.4版本
的DRBD,请使用 https://links.linbit.com/DRBD84-Users-guide提供的本指南的匹配版
本。
请使用the drbd-user mailing list提交评论。
本指南的组织如下:
• DRBD简介介绍DRBD的基本功能。本文简要概述了DRBD在Linux I/O堆栈中的位置,以及基本的DRBD
概念。它还详细研究了DRBD最重要的特性。
• 建立和安装DRBD软件讨论从源代码构建DRBD,安装预构建的DRBD包,并包含在集群系统上运行DRBD
的概述。
• 使用DRBD讲述如何使用资源配置文件管理DRBD,以及常见的故障排除方案。
• 支持DRBD的应用程序利用DRBD为应用程序添加存储复制和高可用性。它不仅涵盖了Pacemaker
cluster manager中的DRBD集成,还包括高级LVM配置、DRBD与GFS的集成,以及为Xen虚拟化环境添
加高可用性。
• 优化DRBD性能包含从DRBD配置中获得最佳性能的要点。
• 了解更多深入了解DRBD的内部,还包含指向其他资源的指引,本指南的读者可能会发现这些指引很有
用。
• [P-Appendices]:
◦ 最近的变化是DRBD 9.0与早期DRBD版本相比所做更改的概述。
欢迎对DRBD培训或支持服务感兴趣的用户通过 sales@linbit.com 或 sales_us@linbit.com 与我们联系。
1
DRBD简介
2
1. DRBD基础
DRBD是一个基于软件的、无共享、复制存储解决方案,它在主机之间镜像块设备(硬盘、分区、逻辑卷
等)的内容。
DRBD镜像数据
• 实时: 当应用程序修改设备上的数据时,数据的副本更改是连续进行的。
• 透明: 应用程序不会意识到数据实际上是存储在多台主机上的。
• 同步 or 异步: 当使用同步镜像数据时,只有在所有(连接上的)主机上都完成写操作后,才会通知应用程序
写完成。当使用异步镜像数据时,在本地完成写入时(通常在镜像数据传输到其他节点前),就会通知
应用程序写入完成。
1.1. 内核模块
DRBD的核心功能是通过Linux内核模块实现的。具体来说,DRBD构成虚拟块设备的驱动程序,因此DRBD
位于系统的I/O堆栈的底部附近。因此,DRBD非常灵活和通用,这使得它成为一个复制解决方案,适合为几
乎任何应用程序添加高可用性。
根据定义和Linux内核体系结构的要求,DRBD与上面各层无关。因此,DRBD不可能奇迹般地向上层添加它
们不具备的特性。例如,DRBD无法自动检测文件系统损坏,也无法向ext3或XFS等文件系统添加活动群集功
能。
FILE SYSTEM
PAGE CACHE
I/O SCHEDULER
DISK DRIVER
RAW DEVICE
NETWORK STACK
NIC DRIVER
SERVICE
RAW DEVICE
NETWORK STACK
NIC DRIVER DISK DRIVER
I/O SCHEDULER
FILE SYSTEM
PAGE CACHE
SERVICE
插图 1. DRBD在Linux I/O堆栈中的位置
1.2. 用户空间管理工具
DRBD附带了一组管理工具,这些工具与内核模块通信,以便配置和管理DRBD资源。从上到下列举如下:
drbdadm
DRBD-utils程序套件的高级管理工具。从配置文件`/etc/DRBD.conf`获取所有DRBD配置参数,并充当
drbdsetup 和 drbdmeta 的前端。drbdadm 有一个用 -d 选项调用的 dry-run 模式,它显示哪些 drbdsetup
和 drbdmeta 调用 drbdadm ,而不实际调用这些命令。
drbdsetup
配置加载到内核中的DRBD模块。drbdsetup 的所有参数都必须在命令行上传递。drbdadm 和 drbdsetup
之间的分离带来了最大程度上的灵活性。在绝大多数情况下,大多数用户几乎不需要直接使用 drbdsetup。
drbdmeta
允许创建、转储、还原和修改DRBD元数据结构。与 drbdsetup 一样,大多数用户很少直接使用
drbdmeta。
3
1.3. 资源
在DRBD中,资源 是指特定复制数据集的所有方面的集合术语。其中包括:
资源名称
This can be any arbitrary, US-ASCII name not containing white space by which the resource is referred
to.

任何资源都是一个复制组,由共享同一复制流的多个 卷 之一组成。DRBD确保了资源中所有卷的写保真度。
卷的编号以 0 开头,一个资源中最多可以有65535个卷。卷包含复制的数据集和一组供DRBD内部使用的元数
据。
在 drbdadm 级别,可以通过资源名称和卷号将资源中的卷寻址为 resource/volume。
DRBD设备
This is a virtual block device managed by DRBD. It has a device major number of 147, and its minor
numbers are numbered from 0 onwards, as is customary. Each DRBD device corresponds to a volume
in a resource. The associated block device is usually named /dev/drbdX, where X is the device minor
number. udev will typically also create symlinks containing the resource name and volume number, as
in /dev/drbd/by-res/resource/vol-nr. Please note that depending on how you installed drbd, you might
need to install the drbd-udev package on RPM based systems.
 早期的DRBD版本劫持了NBD的设备主要编号43。这已经过时很久了;147是 LANANAregistered
中定义的DRBD 主设备号。
连接
连接 是共享复制数据集的两台主机之间的通信链路。在DRBD 9中,每个资源可以在多个主机上定义;在当
前版本中,这需要在这些主机之间建立一个完整的网状连接(即,每个主机都为该资源彼此连接)
在 drbdadm 级别,连接由资源和连接名(后者默认为对等主机名)寻址,如 resource:connection。
1.4. 资源角色
在DRBD中,每个resource都有一个角色,该角色可以是 Primary 或 Secondary 。

这里的术语选择不是任意的。这些角色被DRBD的创造者特意命名为"Active"
和"Passive"。Primary 与 secondary 是指与 存储 的可用性相关的概念,而 active 与
passive 是指 应用程序 的可用性。在高可用性环境中,通常情况下 primary 节点也是
active 节点,但这并不是必需的。
• 处于 primary 角色的DRBD设备可以不受限制地用于读写操作。它可用于创建和装载文件系统、原
始或直接I/O到块设备等。
• 处于 secondary 角色的DRBD设备接收来自对等节点设备的所有更新,但在其他情况下完全不允许
访问。它不能被应用程序使用,也不能用于读写访问。甚至不允许对设备进行只读访问的原因是必须保
持缓存一致性,如果以任何方式访问辅助资源,这是不可能的。
当然,资源的角色可以通过manual intervention,调用集群管理应用程序的一些自动算法,或
者automatically来更改。将资源角色从次要角色更改为主要角色称为 promotion (升级),而反向操作称为
demotion (降级)。
4
2. DRBD特征
本章讨论了各种有用的DRBD特性,并给出了它们的一些背景信息。这些特性中的一些对大多数用户都很重
要,有些只在非常特定的部署场景中才相关。使用DRBD和故障排除和错误恢复包含如何在日常操作中启用
和使用这些功能的说明。
2.1. 单一主(Single-primary)模式
在单一主模式下,资源在任何给定的时间仅在一个群集成员上处于主角色。由于可以保证在任何时候只有一
个集群节点操作数据,因此这种模式可以用于任何传统的文件系统(ext3、ext4、XFS等)。
在单一主模式下部署DRBD是高可用性(支持故障转移)集群的规范方法。
2.2. 双主(Dual-primary)模式
在双主模式下,资源在任何给定时间都处于两个群集节点上的主角色[1]。由于可以并发访问数据,因此此模
式需要依赖使用分布式锁管理器的共享群集文件系统。示例包括GFS和OCFS2。
在双主模式下部署DRBD是负载均衡集群的首选方法,这种集群需要从两个节点并发访问数据,例如需要实
时迁移的虚拟化环境。此模式在默认情况下是禁用的,并且必须在DRBD的配置文件中显式启用。
有关为特定资源启用双主模式的信息,请参见启用双主模式。
2.3. 复制(Replication)模式
DRBD支持三种不同的复制模式,允许三种程度的复制同步性。
Protocol A
异步复制协议。一旦本地磁盘写入完成,并且复制数据包已放置在本地TCP发送缓冲区中,则认为主节点上
的本地写入操作已完成。在强制故障转移的情况下,可能会发生数据丢失。备用节点上的数据在故障转移后
是一致的;但是,在崩溃之前执行的最新更新可能会丢失。Protocol A最常用于远程复制场景。当与DRBD
Proxy结合使用时,它是一个有效的灾难恢复解决方案。有关详细信息,请参见通过DRBD代理进行远程复
制。
Protocol B
内存同步(半同步)复制协议。一旦本地磁盘写入发生,并且复制数据包已到达对等节点,则认为主节点上
的本地写入操作已完成。通常,在强制故障转移的情况下不会丢失任何写操作。但是,如果同时在主备节点
同时 发生了电源故障,则主节点的数据存储可能会丢失最新完成的写入操作。
Protocol C
同步复制协议。只有在确认本地和远程磁盘写入之后,主节点上的本地写入操作才被视为完成。因此,单个
节点的丢失不会导致任何数据丢失。数据丢失当然是不可避免的,即使采用这个复制协议,如果所有节点
(例如:它们的存储子系统)同时遭到不可逆转的破坏, 数据也可能丢失。
到目前为止,DRBD设置中最常用的复制协议是protocol C。
复制协议的选择影响部署的两个因素: 保护 和 延迟 。相比之下, 吞吐量 在很大程度上独立于所选的复制协
议。
有关演示复制协议配置的资源配置示例,请参见配置资源。
2.4. 不只双向冗余(2-way redundancy)
使用DRBD 9,可以将数据同时存储在两个以上的集群节点上。
在以前通过stacking来实现不只双向冗余是可能的,但在DRBD 9中,目前直接就可以支持多达16个节点。
(实际上,通过DRBD使用3、4乃至5路冗余将使其他事情成为停机的主要原因。)
5
与stacking解决方案的主要区别在于性能损失更小,因为只使用了一个级别的数据复制。
2.5. 自动提升资源
在DRBD 9之前,可以使用 drbdadm primary 命令提升资源。在DRBD 9下,当启用 auto promote 选项
时,DRBD将自动将资源提升为主角色,并装入或打开其中一个卷进行写入。一旦卸载或关闭所有卷,资源
的角色就变回次要角色。
只有在群集状态允许时(即,如果显示 drbdadm primary 命令成功),自动提升才会成功。否则,安装或
打开设备将失败,就像在DRBD 9之前一样。
2.6. 多种复制传输
DRBD支持多种网络传输。到目前为止,有两种传输实现可用:TCP和RDMA。每个传输都由对应的内核模块
来实现。
2.6.1. TCP传输
drbd_transport_tcp.ko 传输实现包含在drbd本身的分发文件中。顾名思义,这个传输实现使用TCP/IP协议
在机器之间移动数据。
DRBD的复制和同步框架套接字层支持多个低级传输:
IPv4上的TCP
这是规范实现,也是DRBD的默认实现。它可以在任何启用了IPv4的系统上使用。
IPv6上的TCP
当配置为使用标准的TCP套接字进行复制和同步时,DRBD还可以使用IPv6作为其网络协议。这在语义和性
能上等同于IPv4,尽管它使用不同的寻址方案。
SDP
SDP是BSD风格的套接字的实现,用于支持RDMA的传输,如InfiniBand。SDP是大多数发行版OFED堆栈的
一部分,但现在 被视为已弃用 。SDP使用IPv4风格的寻址方案。SDP通过InfiniBand互连使用,为DRBD提
供了一个高吞吐量、低延迟的复制网络。
SuperSockets
SuperSockets用一个单一的、单片的、高效的、支持RDMA的套接字实现来替换堆栈的TCP/IP部分。DRBD
可以使用这种套接字类型进行非常低延迟的复制。SuperSockets必须运行在特定的硬件上,而这些硬件目前
只能从一家供应商Dolphin Interconnect Solutions获得。
2.6.2. RDMA传输
此外,LINBIT提供 drbd_transport_rdma.ko 内核模块。此传输使用verbs/RDMA API在InfiniBand HCAs、
支持iWARP的NICs或支持RoCE的NICs上移动数据。与BSD sockets API(由TCP/IP使用)相
比,verbs/rdmaapi允许在很少的CPU参与下移动数据。
2.6.3. 结论
在高传输速率下,tcp传输的CPU负载/内存带宽可能成为限制因素。使用rdma传输和适当的硬件,您可能可
以获得更高的传输速率。
可以为资源的每个连接配置传输层实现。有关详细信息,请参见配置传输实现。
2.7. 高效同步
(重新)同步不同于设备复制。当对主角色中的资源的任何写入事件发生复制时,同步与传入的写操作是分
离的。否则,它会影响到设备整体。
6
如果复制链路由于任何原因中断(无论是由于主节点故障、辅助节点故障还是复制链路中断)时,则必须进
行同步。同步是有效的,因为DRBD不会按照修改后的块最初写入的顺序,而是按照线性顺序同步,这会产
生以下后果:
• 同步速度很快,因为发生多个连续写操作的块只同步一次。
• 同步还与很少的磁盘查找相关,因为块是根据磁盘上块的自然布局进行同步的。
• 在同步过程中,备用节点上的数据集部分过时,部分已更新。这种数据状态称为 不一致 。
后台同步正在进行时,服务继续在活动节点上不间断地运行。

数据不一致的节点通常不能投入运行,因此希望尽可能缩短节点不一致的时间段。基于
此,DRBD附带了LVM集成工具,用于在同步之前自动创建LVM快照。这可以确保对等机上
始终可以使用数据的一致性副本,即使同步正在运行。有关使用此工具的详细信息,请参
见在DRBD同步期间使用自动LVM快照。
2.7.1. 可变速率同步
在可变速率同步(8.4版本后被设为默认值)中,DRBD检测同步网络上的可用带宽,将其与传入的前台应用
程序I/O进行比较,并基于全自动控制回路选择适当的同步速率。
有关可变速率同步的配置建议,请参见可变同步速率配置。
2.7.2. 固定速率同步
在固定速率同步中,每秒传送到同步对等机的数据量(同步速率)有一个可配置的静态上限。基于此限制,
您可以根据以下简单公式估计预期的同步时间:
插图 2. 同步时间
tsync 是预期的同步时间。D 是要同步的数据量,这两者很难人为干预(这是复制链接断开时应用程序修改的
数据量)。R 是可配置的同步速率,受限于复制网络和I/O子系统的吞吐量限制。
有关固定速率同步的配置建议,请参见配置同步速率。
2.7.3. 基于校验和的同步
通过使用数据摘要(也称为校验和)可以进一步提高DRBD的同步算法的效率。当使用基于校验和的同步
时,DRBD在同步前先 读取 块,并计算当前在磁盘上找到的内容的哈希,而不是对标记为不同步的块执行强
制覆盖。然后,它将此哈希与从对等机上的同一扇区计算的哈希进行比较,如果哈希匹配,则省略重新写入
此块。如果文件系统在DRBD处于断开模式时用相同的内容重新写入了扇区,这可以显著缩短同步时间。
有关同步的配置建议,请参见配置基于校验和的同步。
2.8. 已挂起的复制
如果配置正确,DRBD可以检测复制网络是否拥塞,在这种情况下可以暂停复制。在这种模式下,主节点会"
超前"于次节点 即 暂时不同步,但仍在次节点上保留一致的副本。当有更多带宽可用时,复制将自动恢复并
进行后台同步。
挂起复制通常在具有可变带宽的链接上启用,例如在数据中心或云实例之间的共享连接上启用广域复制。
有关拥塞策略和挂起复制的详细信息,请参见配置拥塞策略和挂起复制。
7
2.9. 在线设备验证
在线设备验证使用户能够以非常有效的方式在节点之间执行逐块数据完整性检查。
注意 efficient 是指的是网络带宽的有效使用,以及验证不会以任何方式破坏冗余的事实。在线验证仍然是一
个资源密集型操作,对CPU利用率和平均负载有显著影响。
在线验证由一个节点( verification source )按顺序计算存储在特定资源的低级存储设备上的每个块的密码
摘要。然后,DRBD将该摘要发送到对等节点(即 verification targets(s)),在对等节点中,根据受影响块
的本地副本摘要对其进行检查。如果摘要不匹配,则块被标记为不同步,以后可能会同步。因为DRBD只传
输摘要,而不是完整的块,所以在线验证能非常有效地使用网络带宽。
该过程被称为在线验证, on-line 验证,因为它不要求被验证的DRBD资源在验证时未被使用。因此,尽管在
线验证在运行时确实会带来轻微的性能损失,但它不会导致服务中断或系统停机 — 无论是在验证运行期
间还是在随后的同步期间。
由本地cron守护进程管理 on-line 验证是一个常见的用例,例如,每周或每月运行一次。有关如何启用、调
用和自动执行联机验证的信息,请参见使用在线设备验证。
2.10. 复制流量完整性检查
DRBD可以选择使用加密消息摘要算法(如MD5、SHA-1或CRC-32C)执行端到端消息完整性检查。
这些消息摘要算法 不是 由DRBD提供的,而是由Linux内核加密API提供的;DRBD只是使用它们。因
此,DRBD能够利用特定系统内核配置中可用的任何消息摘要算法。
启用此功能后,DRBD生成复制到对等方的每个数据块的消息摘要,然后对等方使用该摘要来验证复制包的
完整性。如果无法根据摘要验证复制的块,则会断开连接并立即重新建立;由于位图的存在,典型的结果是
重新传输。因此,DRBD复制可以避免一些错误的源资源,如果对这些错误源执行检查,则在复制过程中可
能会导致数据损坏:
• 在主存储器和发送节点上的网络接口之间传输的数据上会发生按位错误("位翻转")(如果将其卸
载到网卡,则TCP校验和无法检测到该错误,这在最近的实现中很常见);
• 在从网络接口传输到接收节点的主存储器的数据上发生的位翻转(同样的考虑适用于TCP校验和卸
载);
• 由于网络接口固件或驱动程序中的竞争条件或错误而导致的任何形式的损坏;
• 通过在节点之间重新组装网络组件(如果不使用直接的背对背连接)注入的位翻转或随机损坏。
有关如何启用复制通信完整性检查的信息,请参见配置复制通信完整性检查。
2.11. 裂脑通知和自动恢复
裂脑是指由于群集节点之间的所有网络链路的暂时故障,以及可能由于群集管理软件的干预或人为错误,两
个节点在断开连接时都切换到主要角色的情况。这是一种潜在的有害状态,因为它意味着对数据的修改可能
是在任一节点上进行的,而没有复制到对等节点。因此,在这种情况下,很可能已经创建了两个不同的数据
集,这些数据集不能简单地合并。
DRBD split brain不同于集群split brain,集群split brain是由分布式集群管理应用程序(如Heartbeat)管
理的主机之间的所有连接丢失。为避免混淆,本指南使用以下约定:
• 裂脑 是指如上文所述的DRBD裂脑。
• 所有集群连接的丧失被称为 集群分片,是集群裂脑的另一个术语。
DRBD允许在检测到脑裂时自动通知管理员(通过电子邮件或其他方式)。有关如何配置此功能的详细信
息,请参见裂脑通知。
虽然在这种情况下,建议的操作过程是manually resolve处理脑裂,然后消除其根本原因,但在某些情况
下,可能需要自动化该过程。DRBD有几种可用的解决方案列举如下:
8
• 放弃较新主节点上的修改。 在这种模式下,当重新建立网络连接并发现裂脑时, DRBD在_最后_切换到
主模式的节点上,会放弃在该节点上的更改。
• 放弃较旧主节点上的修改。 在这种模式下,DRBD会放弃先前切换到 主模式的节点上所做的修改。
• 放弃改动小的主节点上的修改。 在这种模式下, DRBD将检查两个节点中的哪个节点记录了较少的修
改,然后将丢弃在该主机上进行的所有修改。
• 如果任一节点没有中间变化,则可以从裂脑中恢复。 在这种模式下, 如果其中一个主机在裂脑期间根本
没有进行任何修改,则DRBD会简单地恢复正常并宣布裂脑已解决。 请注意,这是一个不太可能发生的
情况。即使两个主机都仅将文件系统安装在DRBD块设备上(甚至是只读的), 设备的内容通常也会被
修改(例如,通过文件系统日志重播),从而排除了自动恢复的可能性。
自动裂脑恢复是否可以接受在很大程度上取决于运行的应用。以DRBD托管数据库为例。 对于web应用程序
使用的点击型数据库,使用放弃改动小的主节点上的修改的方法可能很好。 相比之下,自动放弃对财务数据
库所做的任何修改可能是完全不可接受的,在任何脑分裂事件中都需要手动恢复。 在启用自动裂脑恢复之
前,请仔细考虑应用程序的要求。
请参阅自动裂脑恢复策略以了解有关配置DRBD的自动裂脑恢复策略的详细信息。
2.12. 支持磁盘刷新
当本地块设备(如硬盘驱动器或RAID逻辑磁盘)启用了写缓存时,对这些设备的写入在到达易失性缓存后即
被视为完成。控制器制造商通常将此称为回写模式,反之则为直写模式。如果控制器在回写模式下断电,则
最后一次写入永远不会提交到磁盘,可能会导致数据丢失。
为了解决这个问题,DRBD使用了磁盘刷新。磁盘刷新是一种写入操作,仅当关联的数据已提交到稳定(非
易失性)存储时才完成,也就是说,它已有效地写入磁盘,而不是缓存。DRBD使用磁盘刷新对其复制的数
据集和元数据进行写操作。实际上,DRBD在其认为必要的情况下绕过写缓存,如在activity log更新或强制
隐式写后依赖项中。这意味着即使在停电的情况下,也会有额外的可靠性。
需要了解的是,DRBD只能在落地于支持磁盘刷新的备份设备上时才能使用磁盘刷新,这一点很重要。最新
的内核支持大多数SCSI和SATA设备的磁盘刷新。Linux软件RAID(md)支持RAID-1的磁盘刷新,前提是所
有组件设备也支持磁盘刷新。设备映射器(device-mapper)设备(LVM2、dm raid、多路径)也是如此。
带电池备份的写缓存(BBWC)的控制器使用电池备份其易失性存储。在这些设备上,当断电后恢复供电
时,控制器会从电池支持的高速缓存中清除所有挂起的写入到磁盘的操作,确保提交到易失性高速缓存的所
有写入实际上都转移到稳定存储中。在这些设备上运行DRBD时,可以禁用磁盘刷新,从而提高DRBD的写入
性能。有关详细信息,请参见禁用备份设备刷新。
2.13. Trim/Discard支持
Trim/Discard 是同一功能的两个名称:对存储系统的请求,告诉它某些数据区域不再使用[2],并且可以被回
收。+ 此调用源于基于闪存的存储(固态硬盘、FusionIO卡等),这些存储不能轻易重写 rewrite 扇区,而
是必须擦除后并再次写入(新)数据(产生一定的延迟成本)。有关更多详细信息,请参见
[[https://en.wikipedia.org/wiki/Trim_%28computing%29,wikipedia page]].
从8.4.3版开始, DRBD包含了对 Trim/Discard 的支持。您不需要配置或启用任何东西;如果DRBD检测到本
地(底层)存储系统允许使用这些命令,它将透明地启用这些命令并传递这些请求。
其效果是,例如,在一个有很多TB的卷上使用一个新版本的 mkfs.ext4 时,可以将初始同步时间缩短到几秒
到几分钟,只要告诉DRBD(它将把该信息中继到所有连接的节点),大多数/所有存储现在都将被视为无
效。
稍后连接到该资源的节点将不会看到 Trim/Discard 请求,因此将启动完全重新同步;不过,依赖于内核版
本和文件系统,对`fstrim`的调用可能会给出所需的结果。
 即使您没有支持 Trim/Discard 的存储,一些虚拟块设备也会为您提供相同的功能,例如
精简LVM。
9
2.14. 磁盘错误处理策略
如果被用作其中一个节点上DRBD的备份块设备的硬盘发生故障,DRBD可以将I/O错误传递到上层(通常是
文件系统),也可以屏蔽上层的I/O错误。
传递I/O错误
如果DRBD被配置为传递I/O错误,那么在低级设备上发生的任何此类错误都将透明地传递到上层I/O层。因
此,由上层处理这些错误(例如,这可能导致文件系统以只读方式重新装载)。此策略无法确保服务的连续
性,因此不建议大多数用户使用。
掩蔽I/O错误
如果DRBD被配置为在低层I/O错误时分离, 即 detach ,DRBD将在第一个低层I/O错误发生时自动这样做。
当DRBD通过网络从对等节点透明地获取受影响的块时,I/O错误从上层被屏蔽。从那时起,DRBD被称为在
无盘模式下操作,并且仅在对等节点上执行所有后续的读写I/O操作。此模式下的性能将降低,但服务不会中
断,并且可以在方便的时候经过验证后再移动到对等节点。
有关为DRBD配置I/O错误处理策略的信息,请参见配置I/O错误处理策略。
2.15. 处理过时数据的策略
DRBD能区分不一致数据和过时数据。不一致数据是指不能期望以任何方式访问和使用的数据。举例说明:
举某节点上的数据为例,该节点当前是正在进行的同步的目标。这样一个节点上的数据部分是过时的,部分
是最新的,不可能被识别为二者之一。因此,例如,如果设备持有一个文件系统(通常情况下是这样),那
么该文件系统将无法挂载,甚至无法通过自动文件系统检查。
相比之下,过时的数据是次节点(sencondary node)上的一致数据,但不再与主节点同步。这将发生在复制
链接的任何中断中,无论是临时的还是永久的。过时的、断开连接的辅助节点上的数据应该是干净的,但它
反映了过去某个时间对等节点的状态。为了避免服务使用过时的数据,DRBD不允许promoting a
resource。
DRBD的接口允许外部应用程序在网络中断发生时立即使辅助节点失效。DRBD将拒绝将节点切换到主角色,
从而防止应用程序使用过时的数据。此功能的完整实现可参阅Pacemaker cluster management framework
(它使用与DRBD复制链接分离的通信通道)。但是,这些接口是通用的,并且很容易被任何其他集群管理
应用程序使用。
每当过时的资源重新建立其复制链接时,其过时标志将自动清除。参阅background synchronization。
关于DRBD/Heartbeat/pacemaker配置以支持防止意外使用过时数据的示例,请参考 the DRBD outdatepeer
daemon (dopd) 的章节
2.16. 三路叠加复制
 在DRBD版本8.3.0及更高版本中可用;在DRBD版本9.x中不推荐使用,因为更多节点可以
在单个级别上实现。有关详细信息,请参见定义网络连接。
当使用三向复制时,DRBD会将第三个节点添加到现有的2节点群集,并将数据复制到该节点,在该节点上,
数据可用于备份和灾难恢复目的。这种类型的配置通常涉及通过DRBD代理进行远程复制。
三向复制通过在保存生产数据的现有资源上添加另一个堆叠 stacked 的DRBD资源来工作,如下图所示:
10
Primary Secondary Backup
C
Upper layer
Lower layer
A
插图 3. DRBD资源堆叠
堆叠(stack)资源使用异步复制(DRBD Protocol A)进行复制,而生产数据通常使用同步复制(DRBD
Protocol C)。
三路复制可以永久使用,其中第三个节点将使用生产集群中的数据不断更新。或者,它也可以按需使用,其
中生产集群通常与备份站点断开连接,并且定期执行站点到站点的同步,例如通过运行夜间cron作业。
2.17. 通过DRBD代理进行远程复制
DRBD的protocol A是异步的,但是一旦套接字输出缓冲区满了,写入应用程序就会阻塞(请参见
DRBD.conf 手册页中的 sndbuf size 选项)。在这种情况下,写入应用程序必须等到某些写入的数据, 这些数
据可能要通过可能很小的带宽网络,而使得链路耗尽。
平均写入带宽受网络链路可用带宽的限制。只有配置好受限的套接字输出缓冲区时,突发写入才能被优雅的
处理。
您可以通过DRBD Proxy的缓冲机制来缓解这种情况。DRBD代理将从主节点上的DRBD设备将更改的数据放
入其缓冲区。DRBD代理的缓冲区大小是可以自由配置的,仅受地址空间大小和可用物理RAM的限制。
可选地,可以配置DRBD代理来压缩和解压缩它转发的数据。压缩和解压缩DRBD的数据包可能会稍微增加延
迟。然而,当网络链路的带宽是限制因素时,缩短传输时间的增益大于压缩和解压缩开销。
压缩和解压缩是在考虑多核SMP系统的情况下实现的,可以利用多个CPU核。
事实上,大多数块I/O数据压缩得非常好,因此对带宽的使用更加有效,这证明了即使使用DRBD Protocol B
和C也可以使用DRBD代理。
有关配置d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值