公司动态

OpenStack Swift 深度实战:Ring 构建、集群部署与 OBS 对标配置教程

📅 2026/8/5 13:09:13
OpenStack Swift 深度实战:Ring 构建、集群部署与 OBS 对标配置教程
OpenStack管理摘要本文全面介绍了OpenStack对象存储服务Swift的核心概念、架构原理及实践操作。首先阐述了Swift在OpenStack中的定位——作为对象存储系统专为静态数据的长期存储设计具有高扩展性、冗余和持久性特点适用于虚拟机镜像、图片存储等场景。其次通过华为OBS对象存储服务的安装配置过程展示了商业对象存储的实际应用。最后通过详细的Swift实验演示了从磁盘分区、格式化、挂载到Ring创建、映射配置、再平衡及文件上传测试的完整流程验证了Swift的双副本存储机制。文章结合大量命令行操作和配置截图为读者提供了从理论到实践的完整学习路径。OpenStack对象存储-Swiftswift在openstack中的作用Swift并不是文件系统或者实时的数据存储系统它称为对象存储用于永久类型的静态数据的长期存储这些数据可以检索、调整必要时进行更新最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份因为没有中心单元或主控结点Swift提供了更强的扩展性、冗余和持久性使用命令swift stat可以显示Swift中的帐户、容器和对象的信息。Swift为帐户容器和对象分别定义了Ring环将虚拟节点分区映射到一组物理存储设备上包括Account Ring、 Container Ring 、 Object Ring。Ring记录了存储对象与物理位置的映射关系通过Zone、 Device、 Partition和Replica来维护映射信息。华为OBS体验直到安装结束点进控制台Swift实验控制节点新添加一块20GB磁盘一。新添磁盘分成两个区并格式化分区一挂载到obs1目录分区二挂载到obs2目录新建两个分区将两个分区格式化为xfs格式下面为默认挂给swift的虚拟设备分区将其卸载[rootcontroller ~]# umount /srv/node/swiftloopback #卸载原来的swift虚拟设备分区[rootcontroller ~]# cd /srv/node #切换到swift目录[rootcontroller node]# lsswiftloopback[rootcontroller node]# rm -rf swiftloopback/ #删除原来的swift挂载目录[rootcontroller node]# mkdir obs1 obs2 #创建新的挂载目录分别挂载sdb1,sbd2配置挂载文件将obs1–sdb1,obs2–sdb2分别挂载关联[rootcontroller node]# vim /etc/fstab #下面三行话一句注释两句添加#/srv/loopback-device/swiftloopback /srv/node/swiftloopback ext4 noatime,nodiratime,nofail,loop,user_xattr 0 0/dev/sdb1 /srv/node/obs1 xfs defaults00/dev/sdb2 /srv/node/obs2 xfs defaults00[rootcontroller node]# mount -a #挂载mount:(hint)your fstab has been modified, but systemd still uses the old version;usesystemctl daemon-reloadto reload.[rootcontroller node]# df #查看现象Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs3904608039046080% /dev tmpfs3924792439247881% /dev/shm tmpfs39247921765239071401% /run tmpfs3924792039247920% /sys/fs/cgroup /dev/mapper/cs-root7336448068671046649737610% / /dev/mapper/cs-home1310816929469641301347281% /home /dev/sda1103833623412480421223% /boot tmpfs78495607849560% /run/user/0 /dev/sdb110475520106088103694322% /srv/node/obs1 /dev/sdb210474496106088103684082% /srv/node/obs2修改obs1目录和obs2目录权限[rootcontroller node]# chown swift:swift obs1[rootcontroller node]# chown swift:swift obs2[rootcontroller node]# lltotal0drwxr-xr-x2swift swift6Sep2914:04 obs1 drwxr-xr-x2swift swift6Sep2914:04 obs2创建swfit ring[rootcontroller node]# cd /etc/swift/[rootcontroller swift]# lsaccount.builder account-server.conf container-reconciler.conf container-server.conf object-expirer.conf object-server.conf swift.conf account.ring.gz backups container.ring.gz internal-client.conf object.ring.gz proxy-server account-server container.builder container-server object.builder object-server proxy-server.conf[rootcontroller swift]# swift-ring-builder container.builder create --helpswift-ring-builderbuilder_filecreatepart_powerreplicasmin_part_hoursCreatesbuilder_filewith2^part_powerpartitions andreplicas.min_part_hoursis number of hours to restrict moving a partitionmorethan once.[rootcontroller swift]# swift-ring-builder container.builder create 12 2 1[rootcontroller swift]# swift-ring-builder account.builder create 12 2 1[rootcontroller swift]# swift-ring-builder object.builder create 12 2 1#12表示ring分区数量为2^12#2表示2个副本#1表示最少1个小时后才能更改ring配置创建ring映射关系#查看配置文件分别查看account,containerobeject的bind_port记录下来[rootcontroller swift]# cat account-server.conf | grep bind_portbind_port6002[rootcontroller swift]# cat container-server.conf | grep bind_portbind_port6001[rootcontroller swift]# cat object-server.conf | grep bind_portbind_port6000[rootcontroller swift]# swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100WARNING: No region specifiedforz1-192.168.108.10:6002/obs1. Defaulting to region1.[rootcontroller swift]# swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100[rootcontroller swift]# swift-ring-builder container.builder add z1-192.168.108.10:6001/obs1 100[rootcontroller swift]# swift-ring-builder container.builder add z2-192.168.108.10:6001/obs2 100[rootcontroller swift]# swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100[rootcontroller swift]# swift-ring-builder object.builder add z2-192.168.108.10:6000/obs2 100再平衡[rootcontroller swift]# swift-ring-builder account.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00[rootcontroller swift]# swift-ring-builder object.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00[rootcontroller swift]# swift-ring-builder container.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00实验测试上传成功#刚才上传的文件2副本分别在obs1目录obs2目录各存了一份[rootcontroller obs1]# find /srv/node -name *data/srv/node/obs1/objects/317/0fe/13d34c83bb5eed122321759e90f6e0fe/1727591964.07735.data /srv/node/obs2/objects/317/0fe/13d34c83bb5eed122321759e90f6e0fe/1727591964.07735.data