目標
緊接著《Ubuntu16手動安裝OpenStack——cinder篇》,本文,我們來研究一下swift的安裝配置。主要參考OpenStack Queens : Configure Swift 和 Object Storage Install Guide。
cinder和swift都是關于存儲的組件,那么它們有什么區別呢?
cinder的存儲,就像是普通硬盤??梢苑奖憧旖莸乇镜卮嫒⌒薷臄祿?,還可以按需添加減少硬盤。
swift的存儲,就像是百度云盤。只能存取數據,不能在云端進行修改,適用于備份。如果非要修改,那么需要下載到本地修改,修改完再上傳。在openstack實際應用中,swift常用來存儲鏡像這種不需要經常修改的文件。
swift簡介
OpenStack Object Storage 是一個多租戶對象存儲系統。它具有高度可擴展性,可以通過RESTful HTTP API以低成本管理大量非結構化數據。
代理服務器(swift-proxy-server)
接受OpenStack Object Storage API和原始HTTP請求,上傳文件,修改元數據和創建容器。它還為Web瀏覽器提供文件或容器列表。為了提高性能,代理服務器可以使用通常使用memcache部署的可選緩存。
帳戶服務器(swift-account-server)
管理使用對象存儲定義的帳戶。
容器服務器(swift-container-server)
在對象存儲中管理容器或文件夾的映射。
對象服務器(swift-object-server)
管理存儲節點上的實際對象,例如文件。
Various periodic processes
在大型數據存儲上執行內務處理任務。復制服務可確保群集的一致性和可用性。其他定期流程包括審計員,更新者和收割者。
WSGI中間件
處理身份驗證,通常是OpenStack Identity。
swift client
允許用戶通過命令行客戶端進行授權,然后為admin用戶、經銷商用戶或swift用戶向REST API提交命令。
swift-init
初始化環文件構建的腳本,將守護程序名稱作為參數并提供命令。詳細文檔在這里。
swift-recon
一種客戶端工具,用于檢索由swift-recon中間件收集的有關群集的各種指標和遙測信息。
swift-ring-builder
存儲環構建和重新平衡實用程序。詳細文檔在這里。
架構
一般來說,swift至少需要三個存儲節點,如下結構。
之前的安裝中,我們只使用了兩個節點,一個控制節點,一個計算節點。本文中,我們把swift安裝在控制節點和計算節點,領會精神。如果要增加存儲節點,修改Ring files,然后參照計算節點配置即可。
控制節點安裝:
Swift Proxy
Swift-Account
Swift-Container
Swift-Object
計算節點安裝:
Swift Proxy
Swift-Account
Swift-Container
Swift-Object
控制節點
root用戶
為了避免權限問題,建議切換到root用戶進行操作(否則要加很多sudo)。
sudo -i
服務證書和端點
1、使admin環境生效
. admin-openrc
2、添加swift用戶
openstack user create --domain default --project service --password openstack swift
3、把admin角色添加給swift用戶
openstack role add --project service --user swift admin
4、創建swift服務
openstack service create --name swift --description "OpenStack Object Storage" object-store
5、創建服務端點
openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s
openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s
openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1
安裝配置Swift Proxy
1、安裝swift-proxy
apt-get -y install swift swift-proxy python-swiftclient python-keystonemiddleware python-memcache
2、創建swift配置目錄
mkdir /etc/swift
3、vi /etc/swift/proxy-server.conf
,新建proxy-server.conf內容如下:
# create new
[DEFAULT]
bind_ip = 0.0.0.0
bind_port = 8080
user = 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
[app:proxy-server]
use = egg:swift#proxy
allow_account_management = true
account_autocreate = true
# Keystone auth info
[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 = openstack
delay_auth_decision = true
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,SwiftOperator
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
use = egg:swift#memcache
memcache_servers = controller:11211
[filter:ratelimit]
use = egg:swift#ratelimit
[filter:domain_remap]
use = egg:swift#domain_remap
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:cname_lookup]
use = egg:swift#cname_lookup
[filter:staticweb]
use = egg:swift#staticweb
[filter:tempurl]
use = egg:swift#tempurl
[filter:formpost]
use = egg:swift#formpost
[filter:name_check]
use = egg:swift#name_check
[filter:list-endpoints]
use = egg:swift#list_endpoints
[filter:proxy-logging]
use = egg:swift#proxy_logging
[filter:bulk]
use = egg:swift#bulk
[filter:slo]
use = egg:swift#slo
[filter:dlo]
use = egg:swift#dlo
[filter:container-quotas]
use = egg:swift#container_quotas
[filter:account-quotas]
use = egg:swift#account_quotas
[filter:gatekeeper]
use = egg:swift#gatekeeper
[filter:container_sync]
use = egg:swift#container_sync
[filter:xprofile]
use = egg:swift#xprofile
[filter:versioned_writes]
use = egg:swift#versioned_writes
4、vi /etc/swift/swift.conf
,新建swift.conf內容為:
# create new (it is shared among Swift Nodes - any words you like)
[swift-hash]
swift_hash_path_suffix = swift_shared_path
swift_hash_path_prefix = swift_shared_path
5、修改權限
chown -R swift. /etc/swift
配置Ring files
1、創建rings
swift-ring-builder /etc/swift/account.builder create 12 2 1
swift-ring-builder /etc/swift/container.builder create 12 2 1
swift-ring-builder /etc/swift/object.builder create 12 2 1
12、2、1這三個參數,分別代表part_power、replicas、min_part_hours。
part_power是以2為底數的指數的冪,即2^ part_power,所得的值表示總共的partition的數目。如果設置為2,則2^2=4,表示總共有4個partition。
replicas表示每個object在swift中儲存的數目。
min_part_hours表示一個partiton能夠再次更改的最小時間。防止沒有進行同步便進行下次更改。
2、添加存儲節點
swift-ring-builder /etc/swift/account.builder add r0z0-172.16.0.105:6002/device0 100
swift-ring-builder /etc/swift/container.builder add r0z0-172.16.0.105:6001/device0 100
swift-ring-builder /etc/swift/object.builder add r0z0-172.16.0.105:6000/device0 100
swift-ring-builder /etc/swift/account.builder add r1z1-172.16.0.106:6002/device1 100
swift-ring-builder /etc/swift/container.builder add r1z1-172.16.0.106:6001/device1 100
swift-ring-builder /etc/swift/object.builder add r1z1-172.16.0.106:6000/device1 100
3、平衡存儲
swift-ring-builder /etc/swift/account.builder rebalance
swift-ring-builder /etc/swift/container.builder rebalance
swift-ring-builder /etc/swift/object.builder rebalance
4、更改權限
chown swift. /etc/swift/*.gz
5、重啟swift-proxy
systemctl restart swift-proxy
計算節點
root用戶
為了避免權限問題,建議切換到root用戶進行操作(否則要加很多sudo)。
sudo -i
磁盤分區
1、《Ubuntu16手動安裝OpenStack——cinder篇》一文中,因為計算節點(存儲節點)的sdb用于cinder服務了,所以我們需要在計算節點再添加一塊硬盤sdc,用于swift服務。
2、查看硬盤
fdisk -l
3、對sdc進行分區
fdisk /dev/sdc
- 輸入 m 顯示所有命令提示。
- 輸入 p 顯示硬盤分割情形。
- 輸入 a 設定硬盤啟動區。
- 輸入 n 設定新的硬盤分割區。輸入 e 硬盤為[延伸]分割區(extend),輸入 p 硬盤為[主要]分割區(primary)。
- 輸入 t 改變硬盤分割區屬性。
- 輸入 d 刪除硬盤分割區屬性。
- 輸入 q 結束不存入硬盤分割區屬性。
- 輸入 w 結束并寫入硬盤分割區屬性。
4、命令行輸入n,添加一個新的分區;接下來選擇p,設置一個主分區(e為擴展分區);接下來分區號選擇1;再接下來設置起止扇區號,選擇默認值即可(2048到max);最后輸入w,確認寫入硬盤分區。
安裝配置
1、下載安裝相關組件
apt-get -y install swift swift-account swift-container swift-object xfsprogs
2、使用xfs格式化空閑磁盤
mkfs.xfs -i size=1024 -s size=4096 /dev/sdc1
3、創建device1文件夾
mkdir -p /srv/node/device1
4、掛載/dev/sdc1到device1
mount -o noatime,nodiratime,nobarrier /dev/sdc1 /srv/node/device1
5、修改權限
chown -R swift. /srv/node
6、vi /etc/fstab
,設置開機掛載
# add to the end
/dev/sdc1 /srv/node/device1 xfs noatime,nodiratime,nobarrier 0 0
7、從控制節點(swift-proxy)拷貝文件到計算節點
scp voidking@172.16.0.105:/etc/swift/*.gz /etc/swift/
8、修改權限
chown swift. /etc/swift/*.gz
9、vi /etc/swift/swift.conf
,新建swift.conf內容如下:
# set the value which is set on Proxy Node
[swift-hash]
swift_hash_path_suffix = swift_shared_path
swift_hash_path_prefix = swift_shared_path
10、vi /etc/swift/account-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6002
11、vi /etc/swift/container-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6001
12、vi /etc/swift/object-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6000
13、vi /etc/rsyncd.conf
,新建rsyncd.conf內容如下:
# create new
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = swift
gid = swift
# IP address of this Node
address = 172.16.0.106
[account]
path = /srv/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 = /srv/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 = /srv/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
14、vi /etc/default/rsync
,如下修改:
# line 8: change
RSYNC_ENABLE=true
15、重啟rsync并設置開機啟動
systemctl restart rsync
systemctl enable rsync
16、重啟其他swift服務并設置開機啟動
for ringtype in account container object; do
systemctl restart swift-$ringtype
systemctl enable swift-$ringtype
for service in replicator updater auditor; do
if [ $ringtype != 'account' ] || [ $service != 'updater' ]; then
systemctl start swift-$ringtype-$service
systemctl enable swift-$ringtype-$service
fi
done
done
至此,一個存儲節點配置成功,下面再配置一個swift存儲節點在控制節點上。
控制節點
root用戶
為了避免權限問題,建議切換到root用戶進行操作(否則要加很多sudo)。
sudo -i
磁盤分區
1、在控制節點再添加一塊硬盤sdb,用于swift服務。
2、參考計算節點的分區方法,給sdb分區。
安裝配置
1、下載安裝相關組件
apt-get -y install swift swift-account swift-container swift-object xfsprogs
2、使用xfs格式化空閑磁盤
mkfs.xfs -i size=1024 -s size=4096 /dev/sdb1
3、創建device0文件夾
mkdir -p /srv/node/device0
4、掛載/dev/sdc1到device1
mount -o noatime,nodiratime,nobarrier /dev/sdb1 /srv/node/device0
5、修改權限
chown -R swift. /srv/node
6、vi /etc/fstab
,設置開機掛載
# add to the end
/dev/sdb1 /srv/node/device0 xfs noatime,nodiratime,nobarrier 0 0
7、修改權限
chown swift. /etc/swift/*.gz
8、vi /etc/swift/account-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6002
9、vi /etc/swift/container-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6001
10、vi /etc/swift/object-server.conf
,如下修改:
# line 2: make sure the value is follows
bind_ip = 0.0.0.0
bind_port = 6000
11、vi /etc/rsyncd.conf
,新建rsyncd.conf內容如下:
# create new
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = swift
gid = swift
# IP address of this Node
address = 172.16.0.105
[account]
path = /srv/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 = /srv/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 = /srv/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
12、vi /etc/default/rsync
,如下修改:
# line 8: change
RSYNC_ENABLE=true
13、重啟rsync并設置開機啟動
systemctl restart rsync
systemctl enable rsync
14、重啟其他swift服務并設置開機啟動
for ringtype in account container object; do
systemctl restart swift-$ringtype
systemctl enable swift-$ringtype
for service in replicator updater auditor; do
if [ $ringtype != 'account' ] || [ $service != 'updater' ]; then
systemctl start swift-$ringtype-$service
systemctl enable swift-$ringtype-$service
fi
done
done
至此,控制節點的swift存儲也配置完成。
使用
以下操作在控制節點執行。
服務角色和用戶
1、使admin環境生效
. admin-openrc
2、創建一個swiftservice服務
openstack project create --domain default --description "Swift Service Project" swiftservice
3、創建SwiftOperator角色
openstack role create SwiftOperator
4、創建user01用戶,密碼為openstack
openstack user create --domain default --project swiftservice --password openstack user01
5、給user01添加SwiftOperator角色
openstack role add --project swiftservice --user user01 SwiftOperator
客戶端
1、安裝swift-client
apt-get -y install python-openstackclient python-keystoneclient python-swiftclient
2、vi ~/swift-openrc
,創建環境配置文件swift-openrc,內容為:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=swiftservice
export OS_USERNAME=user01
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export PS1='[\u@\h \W(swift)]\$ '
3、使環境生效
. swift-openrc
4、查看swift狀態
swift stat
[圖片上傳失敗...(image-2db55a-1545009719236)]
5、創建一個container
openstack container create test_container
openstack container list
6、vim test.txt
,新建test.txt,內容為“hello openstack”。
7、上傳test.txt文件到test_container
openstack object create test_container test.txt
8、查看test_container中的文件
openstack object list test_container
9、下載test.txt文件
rm test.txt
ll
openstack object save test_container test.txt
ll
10、刪除test_container中的test.txt文件
openstack object list test_container
openstack object delete test_container test.txt
openstack object list test_container
11、刪除test_container
openstack container list
openstack container delete test_container
openstack container list