Ubuntu16手動安裝OpenStack——swift篇

目標

緊接著《Ubuntu16手動安裝OpenStack——cinder篇》,本文,我們來研究一下swift的安裝配置。主要參考OpenStack Queens : Configure SwiftObject 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至少需要三個存儲節點,如下結構。


image

之前的安裝中,我們只使用了兩個節點,一個控制節點,一個計算節點。本文中,我們把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

image

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,確認寫入硬盤分區。


image

安裝配置

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

image

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

image

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
image

11、刪除test_container

openstack container list 
openstack container delete test_container 
openstack container list 
image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容