挂载磁盘资源

使用 Mesos 挂载存储资源

当 DC/OS 代理节点启动时,它会扫描与模式 /dcos/volume<N>(其中 <N> 是个整数)匹配的卷。然后,代理节点会自动配置,以向其他服务提供这些磁盘资源。

使用回送设备示例

在此示例中,磁盘资源在运行的群集上安装后被添加到 DC/OS 代理节点中。这些步骤可以在安装前使用,而无需停止服务或清除代理节点序状态。

警告:这将终止节点上任何运行的任务或服务。

  1. 通过 SSH 连接到群集中的代理节点。
  2. 检查当前代理节点的资源状态。 请注意,/dcos/volume0 尚无引用。
  3. 停止代理节点。
    • 专用代理节点上:
      1. sudo systemctl stop dcos-mesos-slave.service
    • 在代理节点上:
      1. sudo systemctl stop dcos-mesos-slave-public.service
  4. 清除代理节点状态。
    1. 使用以下命令缓存卷挂载发现资源状态: DC/OS 将稍后检查此文件,以便为代理生成新的资源状态。
    2. 使用以下命令删除代理节点检查点状态:
      1. sudo rm -f /var/lib/mesos/slave/meta/slaves/latest
  5. 创建 200 MB 回送设备。
    1. sudo mkdir -p /dcos/volume0
    2. sudo dd if=/dev/zero of=/root/volume0.img bs=1M count=200
    3. sudo losetup /dev/loop0 /root/volume0.img
    4. sudo mkfs -t ext4 /dev/loop0
    5. sudo losetup -d /dev/loop0
    这仅适用于测试目的。挂载卷必须至少有 200 MB 可用空间。每个卷 100 MB 由 DC/OS 保留,不可用于其他服务。
  6. 创建 fstab 条目并挂载。 确保卷在启动时自动挂载。也可以通过 systemd 挂载单元完成类似操作。
  7. 重新启动。
    1. sudo reboot
  8. 通过 SSH 连接到到代理节点并查看 journald 日志以获取对新卷 /dcos/volume0 的引用。
    1. journalctl -b | grep '/dcos/volume0'
    特别是,应该有代理节点启动的条目和新的 volume0 Mount 磁盘资源:

在 Marathon 应用程序中使用挂载卷示例

  1. {
  2. "id": "/mount-test-svc1",
  3. "instances": 1,
  4. "cpus": 0.1,
  5. "mem": 128,
  6. "networks": [
  7. {
  8. }
  9. ],
  10. "disk": 0,
  11. "gpus": 0,
  12. "backoffFactor": 1.15,
  13. "maxLaunchDelaySeconds": 300,
  14. "container": {
  15. "type": "DOCKER",
  16. "volumes": [
  17. {
  18. "persistent": {
  19. "size": 25,
  20. "type": "mount"
  21. },
  22. "mode": "RW",
  23. "containerPath": "volume0"
  24. }
  25. ],
  26. "docker": {
  27. "image": "nginx",
  28. "privileged": false,
  29. "forcePullImage": false
  30. },
  31. "portMappings": [
  32. {
  33. "containerPort": 80,
  34. "hostPort": 0,
  35. "servicePort": 10101,
  36. "protocol": "tcp",
  37. "name": "httpport",
  38. "labels": {
  39. "VIP_0": "/mount-test-svc1:80"
  40. }
  41. },
  42. "healthChecks": [
  43. {
  44. "gracePeriodSeconds": 300,
  45. "intervalSeconds": 60,
  46. "timeoutSeconds": 20,
  47. "maxConsecutiveFailures": 3,
  48. "portIndex": 0,
  49. "path": "/",
  50. "protocol": "MESOS_HTTP",
  51. "delaySeconds": 15
  52. }
  53. ],
  54. "upgradeStrategy": {
  55. "minimumHealthCapacity": 0.5,
  56. "maximumOverCapacity": 0
  57. },
  58. "unreachableStrategy": "disabled",
  59. "killSelection": "YOUNGEST_FIRST",
  60. "requirePorts": true,
  61. "labels": {
  62. "HAPROXY_GROUP": "external"
  63. }
  64. }

在运行此服务后,导航到 Web 界面中的 Services > Volumes 选项卡:

图 1. Services > Volumes 选项卡

云提供程序资源

云提供程序存储服务通常用于支持 DC/OS 挂载卷。在设计生产 DC/OS 部署时,此参考材料非常有用:

最佳实践

  • Mount 磁盘资源与具有严格存储要求的有状态服务一起使用。
  • 根据有状态服务的存储需求和要求,仔细考虑文件系统类型、存储介质(网络链接、SSD 等)和卷特征(RAID 级别、大小调整等)。
  • 使用 Mesos 属性标记 Mesos 代理节点,该属性反映代理节点磁盘挂载的特征,例如, IOPS200、RAID1 等
  • 使用 Mesos 属性限制将有状态服务与存储代理节点相关联。
  • 考虑将要求严苛的存储服务隔离到专用存储代理节点中,因为文件系统页面缓存是主机级共享资源。
  • 确保使用 Mount 磁盘资源的所有服务都旨在处理一个或多个 Mount 磁盘资源的永久丢失。服务仍然负责管理数据复制和保留,从故障代理节点进行正常恢复以及关键服务状态的备份。