在OpenStack私有云环境中,存储节点的扩容是提升整体存储性能和可靠性的重要手段。我们现有的实验环境采用控制节点兼任存储节点的架构,随着业务数据量的增长,这种架构逐渐暴露出两个明显问题:
首先是I/O性能瓶颈。控制节点需要处理API请求、调度任务等核心服务,当存储服务(如Cinder Volume)运行在同一节点时,磁盘I/O和CPU资源容易成为性能瓶颈。实测数据显示,在并发创建卷的场景下,控制节点的iowait指标经常达到30%以上。
其次是单点故障风险。现有架构中所有存储服务都集中在控制节点,一旦该节点硬件故障,将导致整个云平台的存储功能瘫痪。去年我们就遇到过因RAID卡故障导致数据不可用的案例,恢复过程耗时长达6小时。
基于这些痛点,我们决定新增专用存储节点storage01(192.168.23.81),具体规划如下:
硬件配置:Dell R740xd服务器,配备2颗Intel Xeon Silver 4210 CPU、64GB内存。存储方面包含:
网络拓扑:
服务架构:
mermaid复制graph TD
A[控制节点] -->|管理流量| B(存储节点)
B --> C[(LVM卷组)]
D[计算节点] -->|iSCSI连接| B
重要提示:生产环境强烈建议将存储流量分离到独立网络,避免与管理网络产生带宽争用。本次实验受限于硬件条件暂未实施。
采用CentOS 7.4(1804)最小化安装,安装时需特别注意以下选项:
分区方案:
软件包选择:
安装完成后立即执行以下初始化操作:
bash复制# 禁用图形界面(节省资源)
systemctl set-default multi-user.target
# 配置静态IP(示例配置)
cat > /etc/sysconfig/network-scripts/ifcfg-ens192 <<EOF
DEVICE=ens192
BOOTPROTO=static
IPADDR=192.168.23.81
NETMASK=255.255.255.0
GATEWAY=192.168.23.1
ONBOOT=yes
EOF
# 重启网络服务
systemctl restart network
为保障OpenStack组件间通信,需要调整以下安全设置:
bash复制# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭NetworkManager(与network服务冲突)
systemctl stop NetworkManager
systemctl disable NetworkManager
# 禁用SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
经验之谈:生产环境中建议保留防火墙,但需要精确放行OpenStack组件端口。可通过以下命令快速查看关键端口:
bash复制netstat -tulnp | grep -E '3306|5672|5000|35357|9292|8776'
确保所有节点的主机名解析正确:
bash复制# 设置主机名
hostnamectl set-hostname storage01
# 更新/etc/hosts
cat >> /etc/hosts <<EOF
192.168.23.86 controller
192.168.23.88 network
192.168.23.91 compute01
192.168.23.92 compute02
192.168.23.81 storage01
EOF
验证解析是否生效:
bash复制ping -c 3 controller
ping -c 3 compute01
由于实验环境无外网连接,我们采用本地Yum源:
bash复制# 上传并解压软件包
tar -xzvf /home/openstack_R.tar.gz -C /home/
# 清理原有repo
rm -f /etc/yum.repos.d/*.repo
# 创建本地repo
cat > /etc/yum.repos.d/openstack.repo <<EOF
[base]
name=CentOS-\$releasever - Base
baseurl=file:///home/openstack
enabled=1
gpgcheck=0
EOF
# 重建缓存
yum clean all
yum makecache
新增的4TB硬盘设备名为/dev/sdb,按以下步骤初始化为LVM物理卷:
bash复制# 创建物理卷
pvcreate /dev/sdb
# 创建卷组(注意命名规范)
vgcreate cinder-volumes /dev/sdb
# 验证创建结果
vgdisplay cinder-volumes
关键参数说明:
cinder-volumes是OpenStack Cinder服务的默认卷组名称,不可随意更改bash复制pvcreate /dev/sdb /dev/sdc /dev/sdd
vgcreate cinder-volumes /dev/sdb /dev/sdc /dev/sdd
安装核心软件包:
bash复制yum install -y openstack-cinder targetcli python-keystone
服务启动前需要特别注意:
Cinder的主配置文件/etc/cinder/cinder.conf需要重点调整以下参数:
ini复制[DEFAULT]
enabled_backends = lvm
storage_availability_zone = nova
default_volume_type = iscsi
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_helper = lioadm
target_protocol = iscsi
iscsi_ip_address = 192.168.23.81
关键配置解析:
enabled_backends:定义使用的后端存储驱动,多个后端用逗号分隔target_helper:指定iSCSI target管理工具,推荐使用lioadm(性能优于tgtadm)iscsi_ip_address:必须设置为存储节点的管理IP在控制节点执行以下iptables规则更新:
bash复制# 放行MySQL访问
iptables -I INPUT 16 -p tcp --dport 3306 -s 192.168.23.81 -j ACCEPT
# 放行AMQP访问
iptables -I INPUT 5 -p tcp -m multiport --dports 5671,5672 -s 192.168.23.81 -j ACCEPT
# 放行对象存储端口
iptables -I INPUT 25 -p tcp -m multiport --dports 6000,6001,6002,873 -s 192.168.23.81 -j ACCEPT
# 持久化规则
service iptables save
排错技巧:如果遇到连接问题,可在存储节点用telnet测试端口连通性:
bash复制telnet controller 3306 telnet controller 5672
bash复制# 启用并启动服务
systemctl enable openstack-cinder-volume
systemctl start openstack-cinder-volume
# 检查服务状态
systemctl status openstack-cinder-volume -l
# 查看日志(实时监控)
journalctl -u openstack-cinder-volume -f
在控制节点验证服务注册情况:
bash复制source admin-openrc.sh
cinder service-list
正常应看到类似输出:
code复制+------------------+-------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated_at |
+------------------+-------------+------+---------+-------+----------------------------+
| cinder-volume | storage01 | nova | enabled | up | 2023-08-20T06:45:21.000000 |
+------------------+-------------+------+---------+-------+----------------------------+
bash复制# 查看卷组空间
vgs cinder-volumes
# 查看逻辑卷
lvs -a -o +devices
# 查看iSCSI target
targetcli ls
# 检查Cinder服务状态
cinder service-list
问题1:卷创建失败,日志显示"Failed to create volume"
排查步骤:
vgs cinder-volumessystemctl status targetjournalctl -u openstack-cinder-volume --since "10 minutes ago"问题2:计算节点无法连接iSCSI卷
解决方案:
ping 192.168.23.81iptables -L -n | grep 3260IO调度器调整:
bash复制echo 'deadline' > /sys/block/sdb/queue/scheduler
预分配策略:
ini复制[lvm]
lvm_type = thin
thin_provisioning = True
多路径配置(生产环境建议):
bash复制yum install -y device-mapper-multipath
mpathconf --enable --with_multipathd y
完成基础部署后,可以考虑以下进阶方案:
多后端支持:
高可用方案:
性能监控:
bash复制# 安装监控工具
yum install -y sysstat
# 实时监控IO
iostat -x 1
通过本次扩容,我们的OpenStack环境获得了: