Swift 安装

前置条件#

  • 核心组件已部署完成
  • 计算节点有一块 未使用的整盘 作为对象存储,本文使用 /dev/sdc
  • Swift 存储节点管理网 IP:11.0.1.40(计算节点)

Swift 采用 三步部署:计算节点初始化磁盘 → 控制节点创建 Ring 并启动 Proxy → 计算节点同步 Ring 并启动存储服务。


步骤一:计算节点初始化存储(compute)#

1. 安装软件包#

Terminal window
yum install -y xfsprogs rsync openstack-swift-account openstack-swift-container openstack-swift-object

2. 格式化并挂载磁盘#

Terminal window
mkfs.xfs -i size=1024 -f /dev/sdc
mkdir -p /swift/node/sdc
echo "/dev/sdc /swift/node/sdc xfs defaults,noatime,nodiratime 0 0" >> /etc/fstab
mount /dev/sdc /swift/node/sdc

3. 配置 rsync#

写入 /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = swift
gid = swift
address = 127.0.0.1
[account]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/account.lock
[container]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/container.lock
[object]
path = /swift/node
read only = false
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 25
lock file = /var/lock/object.lock
[swift_server]
path = /etc/swift
read only = true
write only = no
list = yes
incoming chmod = 0644
outgoing chmod = 0644
max connections = 5
lock file = /var/lock/swift_server.lock
Terminal window
systemctl enable rsyncd
systemctl restart rsyncd

4. 配置存储服务#

/etc/swift/account-server.conf

[DEFAULT]
bind_port = 6202
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon account-server
[app:account-server]
use = egg:swift#account
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift

/etc/swift/container-server.conf

[DEFAULT]
bind_port = 6201
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon container-server
[app:container-server]
use = egg:swift#container
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift

/etc/swift/object-server.conf

[DEFAULT]
bind_port = 6200
user = swift
swift_dir = /etc/swift
devices = /swift/node
mount_check = false
[pipeline:main]
pipeline = healthcheck recon object-server
[app:object-server]
use = egg:swift#object
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock

/etc/swift/swift.conf

[swift-hash]
swift_hash_path_suffix = changeme
swift_hash_path_prefix = changeme
[storage-policy:0]
name = Policy-0
default = yes
aliases = yellow, orange
[swift-constraints]
Terminal window
chown -R swift:swift /swift/node
mkdir -p /var/cache/swift
chown -R root:swift /var/cache/swift
chmod -R 775 /var/cache/swift
chown -R root:swift /etc/swift
systemctl enable openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
systemctl enable openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
systemctl enable openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater

此步暂不启动 Swift 存储服务,须等控制节点创建 Ring 后同步。


步骤二:控制节点 Proxy 与 Ring(controller)#

Terminal window
source /etc/keystone/admin-openrc.sh
yum install -y openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached

1. 注册 Keystone#

Terminal window
openstack user create --domain default --password 000000 swift
openstack role add --project service --user swift admin
openstack service create --name swift --description "OpenStack Object Storage" object-store
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

2. 配置 /etc/swift/proxy-server.conf#

关键段落(完整文件见部署包):

[DEFAULT]
bind_port = 8080
user = swift
swift_dir = /etc/swift
[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
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = swift
password = 000000
delay_auth_decision = True
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
[filter:cache]
use = egg:swift#memcache
memcache_servers = controller:11211

3. 创建 Ring#

Terminal window
cd /etc/swift
swift-ring-builder account.builder create 18 1 1
swift-ring-builder account.builder add --region 1 --zone 1 --ip 11.0.1.40 --port 6202 --device sdc --weight 100
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder create 10 1 1
swift-ring-builder container.builder add --region 1 --zone 1 --ip 11.0.1.40 --port 6201 --device sdc --weight 100
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder create 10 1 1
swift-ring-builder object.builder add --region 1 --zone 1 --ip 11.0.1.40 --port 6200 --device sdc --weight 100
swift-ring-builder object.builder rebalance

4. 配置 /etc/swift/swift.conf 并启动 Proxy#

Terminal window
chown -R root:swift /etc/swift
systemctl enable openstack-swift-proxy memcached
systemctl restart openstack-swift-proxy memcached

步骤三:计算节点同步 Ring 并启动(compute)#

Terminal window
scp controller:/etc/swift/*.ring.gz /etc/swift/
chown root:swift /etc/swift/*.ring.gz
systemctl restart openstack-swift-account openstack-swift-account-auditor openstack-swift-account-reaper openstack-swift-account-replicator
systemctl restart openstack-swift-container openstack-swift-container-auditor openstack-swift-container-replicator openstack-swift-container-updater
systemctl restart openstack-swift-object openstack-swift-object-auditor openstack-swift-object-replicator openstack-swift-object-updater

验收#

Terminal window
# 计算节点
lsblk /dev/sdc
systemctl is-active openstack-swift-account openstack-swift-container openstack-swift-object
# 控制节点
ls /etc/swift/*.ring.gz
source /etc/keystone/admin-openrc.sh
openstack service list | grep swift
swift stat
文章目录

文章目录