1. 存储节点扩容背景与需求分析
在OpenStack生产环境中,随着业务数据量的增长和虚拟机实例的不断增加,原有存储节点的容量和性能往往会出现瓶颈。我们最近就遇到了Ceph集群存储空间即将耗尽的情况,监控系统频繁发出容量告警。通过分析发现,当前集群的存储利用率已达85%,且IOPS性能在业务高峰期开始出现明显下降。
扩容存储节点是解决这一问题的标准方案。与单纯的扩容磁盘相比,新增节点不仅能增加存储容量,还能提升整体吞吐量和数据冗余度。特别是在Ceph这类分布式存储架构中,增加OSD节点可以线性扩展集群性能,同时保持数据的均衡分布。
2. 硬件准备与系统配置
2.1 硬件选型建议
新存储节点的硬件配置应与现有集群保持兼容:
- 服务器:建议使用与现有节点同代的x86服务器
- CPU:至少16核,推荐32核以上
- 内存:每块OSD磁盘对应1GB内存+额外系统内存
- 网络:双万兆网卡(建议25G/40G),分别用于集群通信和公网
- 磁盘:
- 系统盘:480GB SSD x1
- 日志盘:480GB SSD x1(每块数据盘对应分区)
- 数据盘:4TB HDD x12(根据业务需求调整)
重要提示:新节点的磁盘类型(HDD/SSD)必须与现有集群一致,混合部署会导致性能不均衡。
2.2 操作系统安装
我们选择Ubuntu 20.04 LTS作为操作系统,与现有集群保持一致:
bash复制# 安装时注意分区方案:
/boot 1GB
/ 100GB
swap 32GB
/var/lib/ceph 剩余所有空间
安装完成后需进行基础配置:
bash复制# 禁用防火墙(由OpenStack安全组管理)
sudo systemctl disable ufw
# 配置NTP时间同步
sudo apt install chrony -y
sudo sed -i 's/pool 2.debian.pool.ntp.org offline.min/pool cn.pool.ntp.org iburst/g' /etc/chrony/chrony.conf
sudo systemctl restart chrony
# 配置主机名解析
sudo vim /etc/hosts
# 添加所有控制节点和存储节点的IP与主机名映射
3. Ceph存储节点部署
3.1 环境准备
首先在所有控制节点上更新SaltStack配置:
bash复制# 在Salt Master节点操作
sudo salt '*' cmd.run "ceph --version"
sudo salt '*' cmd.run "ceph osd tree"
# 编辑pillar文件添加新节点
sudo vim /srv/pillar/ceph/stack/ceph/minions.sls
"""
storage:
- ceph-node1
- ceph-node2
- ceph-node3 # 新增节点
"""
3.2 部署Ceph OSD
通过DeepSea工具自动化部署:
bash复制# 在新节点安装Salt minion
sudo apt install salt-minion -y
sudo vim /etc/salt/minion
"""
master: salt-master.example.com
id: ceph-node3
"""
sudo systemctl restart salt-minion
# 在Salt Master接受新节点
sudo salt-key -A
sudo salt-key -L # 确认新节点已接受
# 执行状态部署
sudo salt-run state.orch ceph.stage.0
sudo salt-run state.orch ceph.stage.1
sudo salt-run state.orch ceph.stage.2
3.3 磁盘配置与OSD创建
查看新节点磁盘信息:
bash复制sudo salt 'ceph-node3' cmd.run "lsblk"
编辑policy.cfg文件配置OSD:
bash复制sudo vim /srv/pillar/ceph/proposals/policy.cfg
"""
# 添加新节点配置
node-ceph-node3:
- cluster/ceph-node3*.sls
- osd/ceph-node3*.sls
"""
# 生成OSD配置
sudo salt-run state.orch ceph.stage.3
sudo salt-run state.orch ceph.stage.4
4. OpenStack集成配置
4.1 更新Cinder配置
在控制节点修改Cinder配置:
bash复制sudo vim /etc/cinder/cinder.conf
"""
[ceph]
volume_backend_name = ceph
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_user = cinder
rbd_secret_uuid = [your-secret-uuid]
rbd_ceph_conf = /etc/ceph/ceph.conf
"""
sudo systemctl restart cinder-volume
4.2 验证存储池状态
检查Ceph集群健康状况:
bash复制sudo ceph -s
sudo ceph osd tree
预期输出应显示:
- HEALTH_OK状态
- 新节点出现在OSD树中
- 各OSD的权重自动均衡
5. 数据均衡与性能优化
5.1 集群再均衡
新节点加入后,Ceph会自动开始数据迁移:
bash复制# 监控迁移进度
watch ceph -s
# 如需手动调整迁移速度
sudo ceph osd set noout
sudo ceph osd set nobackfill
sudo ceph osd set norecover
# 调整后再开启
sudo ceph osd unset noout
sudo ceph osd unset nobackfill
sudo ceph osd unset norecover
5.2 性能调优建议
针对新节点的优化配置:
bash复制# 调整OSD内存缓存
sudo ceph config set osd osd_memory_target 4GB
# 优化网络参数
sudo ceph config set osd ms_tcp_keepalive_time 300
sudo ceph config set osd ms_tcp_keepalive_intvl 30
# 启用Bluestore压缩(如使用HDD)
sudo ceph config set osd bluestore_compression_algorithm snappy
6. 常见问题排查
6.1 OSD无法加入集群
症状:ceph osd tree显示新节点OSD为down状态
解决方法:
bash复制# 检查服务状态
sudo systemctl status ceph-osd@[osd-id]
# 查看日志
sudo journalctl -u ceph-osd@[osd-id] -f
# 常见修复步骤
sudo ceph-volume lvm zap /dev/sdX --destroy
sudo ceph osd purge [osd-id] --yes-i-really-mean-it
6.2 数据不均衡
症状:新节点存储利用率明显低于旧节点
解决方法:
bash复制# 手动触发重新均衡
sudo ceph osd reweight-by-utilization
# 或调整具体OSD权重
sudo ceph osd reweight [osd-id] [0.0-1.0]
6.3 性能下降
症状:迁移期间集群延迟升高
解决方法:
bash复制# 限制迁移速度
sudo ceph osd set noout
sudo ceph tell osd.* injectargs '--osd-max-backfills=1'
sudo ceph tell osd.* injectargs '--osd-recovery-max-active=1'
7. 维护与监控建议
新增节点后的日常维护要点:
-
监控指标关注:
- OSD使用率差异(应<15%)
- 集群PGS分布均衡性
- 网络带宽利用率
-
定期维护操作:
bash复制# 每月执行一次scrub
sudo ceph osd scrub-all
# 季度性重平衡
sudo ceph osd reweight-by-utilization
- 容量规划建议:
- 当集群利用率达70%时开始规划下一次扩容
- 保持至少30%的剩余空间用于故障恢复