Swift对象存储,负责存储和检索随机非结构化的数据对象。因为多副本和弹性扩展等特点,使其具备高度容错功能。与传统的数据存储目录树形式有区别,对象和文件数据保存在多个驱动器中。
在控制节点和存储节点执行以下操作。
1
|
hostnamectl set-hostname object1 |
如果有多个对象存储节点则依次设置为object2,object3…本实例中仅使用一个对象存储节点。
1 2 3 |
172.168.201.11 controller 172.168.201.12 compute 172.168.201.13 object1 |
在控制节点执行以下操作。
1
|
source /etc/keystone/admin-openrc |
1
|
openstack user create --domain default --password-prompt swift |
1
|
openstack role add --project service --user swift admin |
1
|
openstack service create --name swift --description "OpenStack Object Storage" object-store |
1 2 3 |
openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(project_id\)s openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%\(project_id\)s openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1 |
在控制节点执行以下操作。
1
|
yum -y install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached |
1
|
curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/tag/stein-eol/etc/proxy-server.conf-sample --insecure |
OpenStack Rocky版本需把stein换成相应的rocky。
1
|
vim /etc/swift/proxy-server.conf
|
1 2 3 4 |
[DEFAULT] bind_port = 8080 user = swift swift_dir = /etc/swift |
1 2 |
[pipeline:main] pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server |
1 2 3 |
[app:proxy-server] use = egg:swift#proxy account_autocreate = True |
1 2 3 |
[filter:keystoneauth] use = egg:swift#keystoneauth operator_roles = admin,user |
1 2 3 4 5 6 7 8 9 10 11 12 |
[filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000/v3/ memcached_servers = controller:11211 auth_type = password project_domain_id = default user_domain_id = default project_name = service username = swift password = <PASSWORD> delay_auth_decision = True |
1 2 3 |
[filter:cache] use = egg:swift#memcache memcache_servers = controller:11211 |
在存储节点执行以下操作。
1
|
yum -y install xfsprogs rsync |
1 2 |
mkfs.xfs /dev/sdb mkfs.xfs /dev/sdc |
sdb和sdc不能是系统盘,是需要另外添加的硬盘。
1 2 |
mkdir -p /srv/node/sdb mkdir -p /srv/node/sdc |
1 2 |
/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 /dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 |
1 2 |
mount /dev/sdb /srv/node/sdb mount /dev/sdc /srv/node/sdc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = 172.168.201.13 [account] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/object.lock |
address为存储节点的管理网络的IP地址。
1 2 |
systemctl enable rsyncd.service systemctl start rsyncd.service |
在存储节点执行以下操作。
1
|
yum clean all |
1
|
yum -y install centos-release-openstack-stein |
OpenStack Rocky版本请装相应的软件包。
yum -y install centos-release-openstack-rocky
1 2 |
yum -y install openstack-swift-account openstack-swift-container \ openstack-swift-object |
1 2 3 |
curl -o /etc/swift/account-server.conf https://opendev.org/openstack/swift/raw/tag/stein-eol/etc/account-server.conf-sample --insecure curl -o /etc/swift/container-server.conf https://opendev.org/openstack/swift/raw/tag/stein-eol/etc/container-server.conf-sample --insecure curl -o /etc/swift/object-server.conf https://opendev.org/openstack/swift/raw/tag/stein-eol/etc/object-server.conf-sample --insecure |
OpenStack Rocky版本需把stein换成相应的rocky。
1
|
vim /etc/swift/account-server.conf
|
1 2 3 4 5 6 7 |
[DEFAULT] bind_ip = 172.168.201.13 bind_port = 6202 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
bind_ip为存储节点上管理网络的IP地址。
1 2 |
[pipeline:main] pipeline = healthcheck recon account-server |
1 2 3 |
[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift |
1
|
vim /etc/swift/container-server.conf
|
1 2 3 4 5 6 7 |
[DEFAULT] bind_ip = 172.168.201.13 bind_port = 6201 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
bind_ip为存储节点上管理网络的IP地址。
1 2 |
[pipeline:main] pipeline = healthcheck recon container-server |
1 2 3 |
[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift |
1
|
vim /etc/swift/object-server.conf
|
1 2 3 4 5 6 7 |
[DEFAULT] bind_ip = 172.168.201.13 bind_port = 6200 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
bind_ip为存储节点上管理网络的IP地址。
1 2 |
[pipeline:main] pipeline = healthcheck recon object-server |
1 2 3 4 |
[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift recon_lock_path = /var/lock |
1 2 |
chown -R swift:swift /srv/node sudo restorecon -R /srv |
1 2 3 |
mkdir -p /var/cache/swift chown -R root:swift /var/cache/swift chmod -R 775 /var/cache/swift |
在控制节点执行以下操作。
1
|
cd /etc/swift |
1
|
swift-ring-builder account.builder create 10 2 1 |
1 2 |
swift-ring-builder account.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6202 --device sdb --weight 100 swift-ring-builder account.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6202 --device sdc --weight 100 |
此处--ip后面为存储节点的管理IP地址。
1
|
swift-ring-builder account.builder
|
1
|
swift-ring-builder account.builder rebalance |
在控制节点执行以下操作。
1
|
cd /etc/swift |
1
|
swift-ring-builder container.builder create 10 2 1 |
1 2 |
swift-ring-builder container.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6201 --device sdb --weight 100 swift-ring-builder container.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6201 --device sdc --weight 100 |
此处--ip后面为存储节点的管理IP地址。
1
|
swift-ring-builder container.builder
|
1
|
swift-ring-builder container.builder rebalance |
在控制节点执行以下操作。
1
|
cd /etc/swift |
1
|
swift-ring-builder object.builder create 10 2 1 |
1 2 |
swift-ring-builder object.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6200 --device sdb --weight 100 swift-ring-builder object.builder add --region 1 --zone 1 --ip 172.168.201.13 --port 6200 --device sdc --weight 100 |
此处--ip后面为存储节点的管理IP地址。
1
|
swift-ring-builder object.builder
|
1
|
swift-ring-builder object.builder rebalance |
在控制节点执行以下操作。
将生成的副本“account.ring.gz”、“container.ring.gz”以及“object.ring.gz”文件复制到“/etc/swift”每个存储节点和运行代理服务的任何其他节点上目录。
1 2 |
cd /etc/swift/ scp -r ./*.gz root@object1:/etc/swift/ |
在控制节点执行以下操作。
1
|
curl -o /etc/swift/swift.conf https://opendev.org/openstack/swift/raw/tag/stein-eol/etc/swift.conf-sample --insecure |
OpenStack Rocky版本需把stein换成相应的rocky。
1
|
vim /etc/swift/swift.conf
|
1 2 3 |
[swift-hash] swift_hash_path_suffix = <PASSWORD> swift_hash_path_prefix = <PASSWORD> |
此处的两个<PASSWORD>可以换成任意唯一字符串。
1 2 3 |
[storage-policy:0] name = Policy-0 default = yes |
在控制节点和存储节点执行以下操作。
1
|
chown -R root:swift /etc/swift |
1 2 |
systemctl enable openstack-swift-proxy.service memcached.service systemctl start openstack-swift-proxy.service memcached.service |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service \ openstack-swift-account-reaper.service openstack-swift-account-replicator.service systemctl start openstack-swift-account.service openstack-swift-account-auditor.service \ openstack-swift-account-reaper.service openstack-swift-account-replicator.service systemctl status openstack-swift-account.service openstack-swift-account-auditor.service \ openstack-swift-account-reaper.service openstack-swift-account-replicator.service systemctl enable openstack-swift-container.service \ openstack-swift-container-auditor.service openstack-swift-container-replicator.service \ openstack-swift-container-updater.service systemctl start openstack-swift-container.service \ openstack-swift-container-auditor.service openstack-swift-container-replicator.service \ openstack-swift-container-updater.service systemctl status openstack-swift-container.service \ openstack-swift-container-auditor.service openstack-swift-container-replicator.service \ openstack-swift-container-updater.service systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service \ openstack-swift-object-replicator.service openstack-swift-object-updater.service systemctl start openstack-swift-object.service openstack-swift-object-auditor.service \ openstack-swift-object-replicator.service openstack-swift-object-updater.service systemctl status openstack-swift-object.service openstack-swift-object-auditor.service \ openstack-swift-object-replicator.service openstack-swift-object-updater.service |
在控制节点执行以下操作。
1
|
source /etc/keystone/admin-openrc |
1
|
swift stat
|
1
|
openstack container create container1 |
1
|
openstack object create container1 FILE |
1
|
openstack object list container1 |
1
|
openstack object save container1 FILE |
命令行 |
功能描述 |
---|---|
swift stat |
显示swift服务状态 |
openstack container create container1 |
创建存储容器 |
openstack object create container1 FILE |
上传文件到存储容器 |
openstack container delete container1 |
删除存储容器 |
openstack object list container1 |
列出容器中的文件 |
openstack object save container1 FILE |
从容器中下载文件 |