Curve 集群扩容

  1. 适用环境:
  2. 版本号: v1.2.6+
  3. CurveAdm版本:v0.2.0+
  4. 最后更新日期: 2023/09/30
  5. 层面: 数据面
  6. 运维级别: P1
  7. 所属产品: 存储
  8. 需求明细: 节点名称
  9. 验收标准: 扩容完成,且集群正常工作
  10. 参考步骤:
  1. 1. 使用工具查看当前集群是否健康:
  2. $ curve bs status cluster
  3. 结果输出有下面字样则集群健康:Cluster health is: ok
  4. 注:1. 如果集群健康(ok)的话,则继续后续的步骤。
  5. 2. 如果集群处于warn状态,需要判断是否是因为当前要扩容的服务导致的集群异常。如果不是当前要扩容的服务类型导致的,可以继续执行后续步骤。否则,则不要继续后续操作。
  6. 3. 如果集群是error状态,则扩容可能是无意义操作,所以不要执行后续步骤。
  7. 2. 提交主机列表:
  8. 2.1 添加新增机器至主机列表:
  9. $ vim hosts.yaml
  10. global:
  11. user: curve
  12. ssh_port: 22
  13. private_key_file: /home/curve/.ssh/id_rsa
  14. hosts:
  15. - host: server-host1
  16. hostname: 10.0.1.1
  17. - host: server-host2
  18. hostname: 10.0.1.2
  19. - host: server-host3
  20. hostname: 10.0.1.3
  21. - host: server-host4 # 新增机器
  22. hostname: 10.0.1.4
  23. - host: server-host5 # 新增机器
  24. hostname: 10.0.1.5
  25. - host: server-host6 # 新增机器
  26. hostname: 10.0.1.6
  27. 2.2 提交主机列表:
  28. $ curveadm hosts commit hosts.yaml
  29. 注:如果找不到本地hosts.yaml文件,可以通过如下命令导出主机列表:
  30. $ curveadm hosts show > hosts.yaml
  31. 3. 格式化磁盘
  32. 3.1 准备磁盘列表:
  33. $ vim format.yaml
  34. host:
  35. - server-host4
  36. - server-host5
  37. - server-host6
  38. disk:
  39. - /dev/sda:/data/chunkserver0:90 # device:mount_path:format_percent
  40. - /dev/sdb:/data/chunkserver1:90
  41. - /dev/sdc:/data/chunkserver2:90
  42. 注:format.yaml文件中只需填写新增机器上的磁盘列表即可,切勿将已在集群中服务的磁盘列表填入其中,避免造成无法挽回的损失。
  43. 3.2 开始格式化
  44. $ curveadm format -f format.yaml
  45. 3. 修改集群拓扑:
  46. 3.1 备份当前拓扑文件:
  47. $ cp topology.yaml topology-old.yaml
  48. 注:如果找不到本地集群拓扑,则使用如下命令导出拓扑配置:
  49. $ curveadm config show > topology.yaml
  50. 3.2 修改集群拓扑
  51. $ vim topology.yaml
  52. kind: curvebs
  53. global:
  54. container_image: quay.io/opencurve/curve/curvebs:latest
  55. log_dir: ${home}/curvebs/logs/${service_role}
  56. data_dir: ${home}/curvebs/data/${service_role}
  57. variable:
  58. home: /tmp
  59. machine1: server-host1
  60. machine2: server-host2
  61. machine3: server-host3
  62. machine4: server-host4 # 新增机器
  63. machine5: server-host5 # 新增机器
  64. machine6: server-host6 # 新增机器
  65. # 如下以扩容chunkserver为例,将新增机器添加到chunkserver_services下
  66. # 如果要扩容mds/snapshotclone,则将新增机器添加到mds_services/snapshot_services下即可
  67. chunkserver_services:
  68. config:
  69. listen.ip: ${service_host}
  70. listen.port: 82${format_replicas_sequence}
  71. data_dir: /data/chunkserver${service_replicas_sequence}
  72. copysets: 100
  73. deploy:
  74. - host: ${machine1}
  75. replicas: 3
  76. - host: ${machine2}
  77. replicas: 3
  78. - host: ${machine3}
  79. replicas: 3
  80. - host: ${machine4} # 新增服务
  81. replicas: 3
  82. - host: ${machine5} # 新增服务
  83. replicas: 3
  84. - host: ${machine6} # 新增服务
  85. replicas: 3
  86. 注:
  87. * 每一次只能扩容同一种角色的服务
  88. * 对于扩容chunkserver服务来说,每次扩容都会新增一个逻辑池,新增的服务都位于该逻辑池中,请确保每次扩容至少增加 3 台主机
  89. 4. 扩容集群:
  90. $ curveadm scale-out topology.yaml
  91. 提醒:扩容操作属于幂等操作,用户在执行失败后可重复执行,不用担心服务残留问题
  92. 5. 再次查看集群服务状态,查看指定扩容服务是否启动成功(StatusUp状态):
  93. $ curveadm status
  94. 6. 查看集群是否健康:
  95. $ curve bs status cluster
  96. 结果输出有下面字样则集群健康:Cluster health is: ok
  97. 注:如果扩容前集群处于warn状态,但不是当前服务导致的问题。如果当前服务扩容成功,但是集群会仍然处于warn状态,是符合预期的。
  1. 参考影响:
  • 时间: 无

  • 业务方: 无

  • 用户:无

  1. 参考风险:
  • 数据面: 无

  • 管控面: 无

  • 恢复能力: 无需恢复

  1. 参考回滚策略: 无

  2. 需求发起方: CURVE

  3. 接收方:

  4. 评审责任人: SRE负责人,SA负责人,CURVE负责人

  5. 用户通知责任人: 技术支持

  6. 执行责任人: CURVE/SA

  7. 测试回归责任人: CURVE

  8. 执行审核责任人: SA/CURVE/SRE