本地存储最佳实践
功能概述
使用物理机自有硬盘进行存储。
方案规划
集群与服务器规划应遵守以下原则:
- 在所有计算节点上,SSD盘和机械硬盘应当互相分离,分别做RAID10。
- 本地存储在配置RAID后,每台物理机可用容量应在2T以上。
- 本地存储的主存储如果有单独硬盘,挂载参数应写入/etc/rc.local,并加入可执行权限,不建议写入/etc/fstab。
- 主存储容量建议保持30%以上的资源空余。
- 利旧服务器建议关闭RAID卡缓存;防止电池老化引起数据一致性问题。
- 建议配合ZStack Cloud云平台灾备功能定期备份数据,防止灾难性故障导致业务丢失。
- 相同集群建议服务器硬盘数量类型保持一致。
- 本地存储备份任务需要规划单独备份服务器或者单独划分大容量分区。
- 本地存储镜像服务器通常使用一台节点除系统盘外其余存储的50%挂载使用。
最佳实践
场景说明
- 完全使用硬件服务器提供存储服务。
- 无额外硬件成本投入。
- 低成本、高性价比、高性能的需求。
- 适用于业务层实现高可用的生产环境。
- 适用于无需高可用的软件开发测试环境。
- 规模化集群批量交付的场景。
场景拓扑
本地存储均采用所有计算节点上除去系统盘外其他盘做RAID10进行分区挂载/zstack_ps目录,使用挂载目录作为主存储,和镜像服务器共用的计算节点除去系统盘外其他盘做RAID10后,需规划两个分区,分别挂载目录/zstack_ps和/zstack_bs目录。
- 管理网络采用双万兆,管理网络主要用于管理云平台相关的硬件资源。
- 业务网络采用双万兆,业务网络主要用于云平台上云主机的业务网络,对外提供应用服务。
主线流程:
- 配置Raid。
- 磁盘初始化。
- 挂载磁盘目录。
- 添加主存储。
- 配置镜像服务器。
具体步骤:
1. 配置Raid
进入BIOS阵列卡配置,配置两块SSD盘为Raid1,其他SSD盘和硬盘分别配置RAID10,以提供一定的数据冗余特性
2. 磁盘初始化
假定做完RAID后的主存储设备为/dev/sda,在计算节点执行以下命令
parted /dev/sda mklabel gpt
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sda
3. 挂载磁盘目录
chmod +x /etc/rc.d/rc.local
mkdir /zstack_ps -p
获取磁盘UUID
ll /dev/disk/by-uuid/
这里的XXXXXXXXXXXXXX代表当前分区的UUID,请自行对应之前的sdb盘符
mount /dev/disk/by-uuid/XXXXXXXXXXXXX /zstack_ps
echo sleep 5 >> /etc/rc.d/rc.local
echo mount /dev/disk/by-uuid/XXXXXXXXXXXXX /zstack_ps >> /etc/rc.d/rc.local
df –h
ls -l /etc/rc.d/rc.local
4. 添加主存储
添加主存储,选择本地存储,输入/zstack_ps目录。
注意:如果硬盘不是常规规格,如容量超过32T,可以将mkfs.xfs的agcount参数调大为32或64
5. 配置镜像服务器
和镜像服务器共用的计算节点除去系统盘外其他盘做RAID10后,需规划两个分区,分别挂载目录/zstack_ps和/zstack_bs:
假定做完RAID后的主存储设备为/dev/sdb,在此计算节点上执行以下命令
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary 0 50%
parted /dev/sdb mkpart primary 51% 100%
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sdb1
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sdb2
chmod +x /etc/rc.d/rc.local
mkdir /zstack_ps –p
mkdir /zstack_bs –p
ll /dev/disk/by-uuid/
这里的XXXXXXXXXXXXXX代表当前分区的UUID,请自行对应之前的sdaX盘符
mount /dev/disk/by-uuid/XXXXXXXXXXXX /zstack_ps
mount /dev/disk/by-uuid/XXXXXXXXXXXX /zstack_bs
echo sleep 5 >>/etc/rc.d/rc.local
echo mount /dev/disk/by-uuid/XXXXXXXXXXXX /zstack_ps >>/etc/rc.d/rc.localecho
mount /dev/disk/by-uuid/XXXXXXXXXXXX /zstack_bs >>/etc/rc.d/rc.local
df –h
ls -l /etc/rc.d/rc.local
添加镜像服务器,选择镜像仓库,输入/zstack_bs目录。
注意:如果硬盘不是常规规格,如容量超过32T,可以将mkfs.xfs的agcount参数调大为32或64
注意事项
云平台全局设置建议:
- 主存储阈值设置为0.7。
- 主存储保留容量设置为600G。
- 生产环境本地存储请勿超分。
主存储使用建议:
- 本地存储创建云主机需要单台物理机满足云盘所需容量,需要提前进行容量规划。
- 本地存储系统盘与数据盘需要为分离状态,避免系统出现问题影响云主机文件。
- 本地存储建议不开启Virtio SCSI。
- 本地存储使用精简置备方式建议关闭aio。
- 本地存储磁盘预分配策略建议设置为falloc,采取厚置备的方式,防止XFS碎片化严重导致云主机异常停止。
- 本地存储需要使用raid阵列卡的uuid在/etc/rc.d/rc.local文件记录挂载信息,避免重启后无法找到云主机云盘文件。
- 本地存储的物理机容量扩容需停止云主机业务后,拷贝数据至暂存处后,扩容后再拷贝回来。
- 本地存储的云主机不支持高可用,但会获得更高的云主机IO性能。
扩展阅读
容量分析:
- 总容量:所有物理机挂载目录下总容量之和。
- 物理可用容量:总容量-实际已用容量。
- 虚拟可用容量:总容量 - 所有云盘之和/超分率 - 快照容量之和 - Imagecache容量之和 - 保留容量。
主存储扩容方法:
- 扩容当前主存储(非最佳实践)
1. 停用主存储
2. 磁盘初始化
添加新的大容量磁盘至物理机,并进行分区格式化,假定作完RAID10后的设备名称为/dev/sda;
parted /dev/sdd mklabel gpt
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sda
注意:如果硬盘不是常规规格,如容量超过32T,可以将agcount参数调大为32 或64
3. 挂载磁盘目录
创建新目录/new_volume
mkdir /new_volume -p
获取磁盘uuid并使用磁盘uuid挂载此磁盘;
ll /dev/disk/by-uuid/
这里的XXXXXXXXXXXXXX代表当前分区的UUID,请自行对应之前的sda盘符
mount /dev/disk/by-uuid/XXXXXXXXXXXXX /new_volume
执行命令rsync -a /zstack_bs /new_volume/拷贝原始的磁盘文件至新磁盘
原磁盘挂载目录卸载并重命名,新磁盘卸载并使用原来挂载的目录名重新挂载;
mv /zstack_bs /zsback_bc
umount /dev/disk/by-uuid/XXXXXXXXXXXXX /new_volume
mv /new_volume /zsback_bs
mount /dev/disk/by-uuid/XXXXXXXXXXXXX /zstack_bs
设置开机自动挂载,写入 /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
echo mount /dev/disk/by-uuid/XXXXXXXXXXXXX /zstack_bs >> /etc/rc.d/rc.local
4. 启用并重连主存储,主存储容量已刷新,验证原云主机和云盘正常使用,可成功创建新云主机与云盘;
- 扩容服务器节点:按照本地存储最佳实践进行新增服务器节点。
- 扩容新的主存储:向服务器新增硬盘做RAID10,按照主存储配置的方式创建新的主存储。