OpenStack管理
摘要:本文全面介绍了OpenStack对象存储服务Swift的核心概念、架构原理及实践操作。首先阐述了Swift在OpenStack中的定位——作为对象存储系统,专为静态数据的长期存储设计,具有高扩展性、冗余和持久性特点,适用于虚拟机镜像、图片存储等场景。其次,通过华为OBS(对象存储服务)的安装配置过程展示了商业对象存储的实际应用。最后,通过详细的Swift实验演示了从磁盘分区、格式化、挂载到Ring创建、映射配置、再平衡及文件上传测试的完整流程,验证了Swift的双副本存储机制。文章结合大量命令行操作和配置截图,为读者提供了从理论到实践的完整学习路径。
OpenStack对象存储-Swift
swift在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的虚拟设备分区,将其卸载
[root@controller ~]# umount /srv/node/swiftloopback #卸载原来的swift虚拟设备分区[root@controller ~]# cd /srv/node #切换到swift目录[root@controller node]# lsswiftloopback[root@controller node]# rm -rf swiftloopback/ #删除原来的swift挂载目录[root@controller node]# mkdir obs1 obs2 #创建新的挂载目录,分别挂载sdb1,sbd2配置挂载文件,将obs1–sdb1,obs2–sdb2分别挂载关联
[root@controller 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[root@controller node]# mount -a #挂载mount:(hint)your fstab has been modified, but systemd still uses the old version;use'systemctl daemon-reload'to reload.[root@controller 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目录权限
[root@controller node]# chown swift:swift obs1[root@controller node]# chown swift:swift obs2[root@controller node]# lltotal0drwxr-xr-x2swift swift6Sep2914:04 obs1 drwxr-xr-x2swift swift6Sep2914:04 obs2创建swfit ring:
[root@controller node]# cd /etc/swift/[root@controller 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[root@controller swift]# swift-ring-builder container.builder create --helpswift-ring-builder<builder_file>create<part_power><replicas><min_part_hours>Creates<builder_file>with2^<part_power>partitions and<replicas>.<min_part_hours>is number of hours to restrict moving a partitionmorethan once.[root@controller swift]# swift-ring-builder container.builder create 12 2 1[root@controller swift]# swift-ring-builder account.builder create 12 2 1[root@controller swift]# swift-ring-builder object.builder create 12 2 1#12表示ring分区数量为2^12#2表示2个副本#1表示最少1个小时后才能更改ring配置创建ring映射关系:
#查看配置文件,分别查看account,container,obeject的bind_port记录下来[root@controller swift]# cat account-server.conf | grep bind_portbind_port=6002[root@controller swift]# cat container-server.conf | grep bind_portbind_port=6001[root@controller swift]# cat object-server.conf | grep bind_portbind_port=6000[root@controller 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.[root@controller swift]# swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100[root@controller swift]# swift-ring-builder container.builder add z1-192.168.108.10:6001/obs1 100[root@controller swift]# swift-ring-builder container.builder add z2-192.168.108.10:6001/obs2 100[root@controller swift]# swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100[root@controller swift]# swift-ring-builder object.builder add z2-192.168.108.10:6000/obs2 100再平衡:
[root@controller swift]# swift-ring-builder account.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00[root@controller swift]# swift-ring-builder object.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00[root@controller swift]# swift-ring-builder container.builder rebalanceReassigned8192(200.00%)partitions. Balance is now0.00. Dispersion is now0.00实验测试:
上传成功
#刚才上传的文件,2副本,分别在obs1目录,obs2目录各存了一份[root@controller 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