九、對象存儲服務node
9.一、安裝並配置控制器節點python
9.1.一、建立服務憑證和API端點git
9.1.1.一、得到 admin 憑證來獲取只有管理員能執行的命令的訪問權限:swift
$ . admin-openrc緩存
9.1.1.二、要建立身份認證服務的憑證,完成這些步驟:安全
建立 swift 用戶:服務器
$ openstack user create --domain default --password-prompt swift網絡
設置密碼:P@ssw0rd架構
給 swift 用戶添加 admin 角色:app
$ openstack role add --project service --user swift admin
註解:這個命令執行後沒有輸出。
建立 swift 服務條目:
$ openstack service create --name swift --description "OpenStack Object Storage" object-store
9.1.1.三、建立對象存儲服務 API 端點:
$ 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
控制節點防火牆開放端口:8080
# firewall-cmd --permanent --add-port=8080/tcp
# firewall-cmd --reload
確認端口開放成功
# firewall-cmd --list-all
9.1.二、安全並配置組件
9.1.2.一、安裝軟件包:
# yum install -y openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
9.1.2.二、從對象存儲的倉庫源中獲取代理服務的配置文件:
# curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/mitaka
註解:本次沒有下載到這個文件,就用安裝後的默認配置文件進行配置了。
9.1.2.三、編輯文件 vi /etc/swift/proxy-server.conf 並完成以下動做:
在 [DEFAULT] 部分,配置綁定端口,用戶和配置目錄。
bind_port = 8080
user = swift
swift_dir = /etc/swift
註解:默認有配置,只增長了swift_dir這一行
在``[pipeline:main]``部分,刪除``tempurl``和``tempauth``模塊並增長``authtoken``和``keystoneauth``模塊
[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
以上內容爲官方文檔配置,通過本次實測,多是沒有下載配置文件而是使用默認配置的緣由,也多是安裝組件不全的緣由,按照上面配置始終服務沒法啓動,而且報錯!
通過查看/var/log/messages內容發現以下報錯(注意紅框內容):
通過比對是versioned_writes沒有找到,多是沒有安裝,也多是模塊順序不對。由於是第一次部署,因此很粗暴的把這個模塊從配置去掉,而後再次重啓服務。
可是再次報錯了,再次有新的模塊未找到,而後繼續刪減模塊,最終配置以下圖所示:
註解:註釋掉默認配置,同時不要改變配置中的模塊順序。
在 [app:proxy-server] 部分,啓動自動帳戶建立。
[app:proxy-server]
use = egg:swift#proxy
account_autocreate = True
註解:默認已存在
在 [filter:keystoneauth] 部分,配置操做員角色。
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
註解:本部分爲新增,和上面的[filter:keystone]配置有重合部分,暫時不清楚關係就新增了。
在 [filter:authtoken] 部分,配置認證服務訪問。
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = swift
password = P@ssw0rd
delay_auth_decision = True
註解:註釋或者刪除掉在 [filter:authtoken] 部分的全部其餘的內容。
在 [filter:cache] 部分,配置 memcached 的位置:
[filter:cache]
use = egg:swift#memcache
memcache_servers = controller:11211
註解:默認有一個相同配置註釋掉
9.二、安裝和配置存儲節點
本章節描述怎樣爲操做賬號,容器和對象服務安裝和配置存儲節點。
環境所限,這裏配置一個存儲節點(就是計算節點),包含三個空本地塊存儲設備。這個嚮導用的是 /dev/sdc、 /dev/sdd、/dev/sde
9.2.一、先決條件
9.2.1.一、安裝支持的工具包:
# yum install -y xfsprogs rsync
9.2.1.二、使用XFS格式化三個設備:
# mkfs.xfs /dev/sdc
# mkfs.xfs /dev/sdd
# mkfs.xfs /dev/sde
9.2.1.三、建立掛載點目錄結構:
# mkdir -p /srv/node/sdc
# mkdir -p /srv/node/sdd
# mkdir -p /srv/node/sde
9.2.1.四、編輯``/etc/fstab``文件並添加如下內容:
/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sdd /srv/node/sdd xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sde /srv/node/sde xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
9.2.1.五、掛載設備:
# mount /srv/node/sdc
# mount /srv/node/sdd
# mount /srv/node/sde
9.2.1.六、建立並編輯 vi /etc/rsyncd.conf 文件幷包含如下內容:
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 111.111.111.202
[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地址。
註解:``rsync``服務不須要認證,因此考慮將它安裝在私有網絡的環境中
9.2.1.七、啓動 「rsyncd」 服務和配置它隨系統啓動:
# systemctl enable rsyncd
# systemctl start rsyncd
# systemctl status rsyncd
9.2.二、安全並配置組件
註解:在每一個存儲節點上執行這些步驟。
9.2.2.一、安裝軟件包:
# yum install -y openstack-swift-account openstack-swift-container openstack-swift-object
9.2.2.二、從對象存儲源倉庫中獲取accounting, container以及object服務配置文件
# curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/mitaka
# curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/mitaka
# curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/mitaka
本次操做未從網上下載配置文件,使用默認配置文件。
9.2.2.三、編輯 vi /etc/swift/account-server.conf 文件並完成下面操做:
在``[DEFAULT]`` 部分,配置綁定IP地址,綁定端口,用戶,配置目錄和掛載目錄:
bind_ip = 111.111.111.202
bind_port = 6002
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
bind_ip爲存儲節點管理網絡的IP地址。
在 [pipeline:main] 部分,啓用合適的模塊:
[pipeline:main]
pipeline = healthcheck recon account-server
上面爲官方文檔配置,也是啓動服務報錯有模塊找不到,刪除healthcheck模塊後就啓動成功了,配置以下圖所示:
[pipeline:main]
pipeline = recon account-server
在 [filter:recon] 部分,配置recon (meters)緩存目錄:
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
9.2.2.四、編輯 vi /etc/swift/container-server.conf 文件並完成下列操做:
在``[DEFAULT]`` 部分,配置綁定IP地址,綁定端口,用戶,配置目錄和掛載目錄:
bind_ip = 111.111.111.202
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
bind_ip爲存儲節點管理網絡的IP地址。
在 [pipeline:main] 部分,啓用合適的模塊:
[pipeline:main]
pipeline = healthcheck recon container-server
上面爲官方文檔配置,也是啓動服務報錯有模塊找不到,刪除healthcheck模塊後就啓動成功了,配置以下圖所示:
[pipeline:main]
pipeline = recon container-server
在 [filter:recon] 部分,配置recon (meters)緩存目錄:
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
9.2.2.五、編輯 vi /etc/swift/object-server.conf 文件並完成下列操做:
在 [DEFAULT] 部分,配置綁定IP地址,綁定端口,用戶,配置目錄和掛載目錄:
bind_ip = 111.111.111.202
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True
bind_ip爲存儲節點管理網絡的IP地址。
在 [pipeline:main] 部分,啓用合適的模塊:
[pipeline:main]
pipeline = healthcheck recon object-server
上面爲官方文檔配置,也是啓動服務報錯有模塊找不到,刪除healthcheck模塊後就啓動成功了,配置以下圖所示:
[pipeline:main]
pipeline = recon object-server
在 [filter:recon] 部分,配置recon(meters)緩存和lock目錄:
[filter:recon]
use = egg:swift#recon
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock
9.2.2.六、確認掛載點目錄結構是否有合適的全部權:
# chown -R swift:swift /srv/node
9.2.2.七、建立 「recon」 目錄和確保它有合適的全部權:
# mkdir -p /var/cache/swift
# chown -R root:swift /var/cache/swift
# chmod -R 775 /var/cache/swift
計算節點防火牆開放端口:6000、600一、6002
firewall-cmd --permanent --add-port=6000/tcp
firewall-cmd --permanent --add-port=6001/tcp
firewall-cmd --permanent --add-port=6002/tcp
firewall-cmd --reload
確認端口開放成功
# firewall-cmd --list-all
***********************************分割線***********************************
報錯排錯:
報錯一:
這三個服務所有有報錯:
openstack-swift-account-replicator Can't find itself 127.0.0.1 with port 6202 in ring file, not replicating
openstack-swift-container-replicator Can't find itself 127.0.0.1 with port 6201 in ring file, not replicating
openstack-swift-object-replicator Can't find itself 127.0.0.1 with port 6200 in ring file, not replicating
通過排錯:
分別將三個配置文件/etc/swift/account-server.conf、/etc/swift/container-server.conf、/etc/swift/object-server.con中的
默認bind_ip = 127.0.0.1 bind_port = 620二、默認bind_ip = 127.0.0.1 bind_port = 620一、默認bind_ip = 127.0.0.1 bind_port = 6200
這個配置註釋掉,而後重啓三個服務就能夠了。以下圖所示是吧account-server.conf 的示例:
報錯二:
上面這個報錯從內容看是sde這塊盤存在問題,立刻想起來本次計算節點開始只准備了2塊虛擬硬盤作對象存儲,可是後來報錯顯示須要2塊以上,因此臨時加了一塊虛擬硬盤就是sde。
而後全部配置都作了,就是漏了 9.2.2.6 這一步沒作:chown -R swift:swift /srv/node,通過查看以下圖所示權限缺失:
從新執行chown -R swift:swift /srv/node便可:
最後記得重啓openstack-swift-object-replicator服務:
***********************************分割線***********************************
9.三、建立,分發並初始化rings
註解:在控制節點上執行這些步驟。
9.3.一、建立帳戶ring
賬戶服務器使用賬戶 ring 來維護一個容器的列表。
9.3.1.一、切換到 /etc/swift 目錄。
9.3.1.二、建立基本 account.builder 文件:
# swift-ring-builder account.builder create 10 3 1
註解:這個命令執行後沒有輸出。
9.3.1.三、添加每一個節點到 ring 中:
# swift-ring-builder account.builder \
add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6002 \
--device DEVICE_NAME --weight DEVICE_WEIGHT
將 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替換爲存儲節點管理網絡的IP地址。將 DEVICE_NAME``替換爲同一個存儲節點存儲設備名稱。例如,使用 :ref:`swift-storage` 中的第一個存儲節點的 ``/dev/sdb 存儲設備,大小爲100:
# swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 10.0.0.51 --port 6002 --device sdb --weight 100
在每一個存儲節點上面重複執行這個命令。在這個例子的架構中,使用該命令的三個變量:
# swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 111.111.111.202 --port 6002 --device sdc --weight 100
# swift-ring-builder account.builder add \
--region 1 --zone 2 --ip 111.111.111.202 --port 6002 --device sdd --weight 100
# swift-ring-builder account.builder add \
--region 1 --zone 3 --ip 111.111.111.202 --port 6002 --device sde --weight 100
注意:本次操做是在控制節點和存儲節點上都執行了!!!!!
9.3.1.四、驗證 ring 的內容:
# swift-ring-builder account.builder
9.3.1.五、平衡 ring:
# swift-ring-builder account.builder rebalance
9.3.二、建立容器ring
容器服務器使用容器環來維護對象的列表。可是,它不跟蹤對象的位置。
9.3.2.一、切換到 /etc/swift``目錄。
9.3.2.二、建立基本``container.builder``文件:
# swift-ring-builder container.builder create 10 3 1
註解:這個命令執行後沒有輸出。
9.3.2.三、添加每一個節點到 ring 中:
# swift-ring-builder container.builder \
add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6001 \
--device DEVICE_NAME --weight DEVICE_WEIGHT
將 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替換爲存儲節點管理網絡的IP地址。將 DEVICE_NAME``替換爲同一個存儲節點存儲設備名稱。例如,使用 :ref:`swift-storage` 中的第一個存儲節點的 ``/dev/sdb 存儲設備,大小爲100:
# swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 10.0.0.51 --port 6001 --device sdb --weight 100
在每一個存儲節點上面重複執行這個命令。在這個例子的架構中,使用該命令的三個變量:
# swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 111.111.111.202 --port 6001 --device sdc --weight 100
# swift-ring-builder container.builder add \
--region 1 --zone 2 --ip 111.111.111.202 --port 6001 --device sdd --weight 100
# swift-ring-builder container.builder add \
--region 1 --zone 3 --ip 111.111.111.202 --port 6001 --device sde --weight 100
9.3.2.四、驗證 ring 的內容:
# swift-ring-builder container.builder
9.3.2.五、平衡 ring:
# swift-ring-builder container.builder rebalance
9.3.三、建立對象ring
對象服務器使用對象環來維護對象在本地設備上的位置列表。
9.3.3.一、切換到 ``/etc/swift``目錄。
9.3.3.二、建立基本``object.builder``文件:
# swift-ring-builder object.builder create 10 3 1
註解:這個命令執行後沒有輸出。
9.3.3.三、添加每一個節點到 ring 中:
# swift-ring-builder object.builder \
add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6000 \
--device DEVICE_NAME --weight DEVICE_WEIGHT
將 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替換爲存儲節點管理網絡的IP地址。將 DEVICE_NAME``替換爲同一個存儲節點存儲設備名稱。例如,使用 :ref:`swift-storage` 中的第一個存儲節點的 ``/dev/sdb 存儲設備,大小爲100:
# swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 10.0.0.51 --port 6000 --device sdb --weight 100
在每一個存儲節點上面重複執行這個命令。在這個例子的架構中,使用該命令的三個變量:
# swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 111.111.111.202 --port 6000 --device sdc --weight 100
# swift-ring-builder object.builder add \
--region 1 --zone 2 --ip 111.111.111.202 --port 6000 --device sdd --weight 100
# swift-ring-builder object.builder add \
--region 1 --zone 3 --ip 111.111.111.202 --port 6000 --device sde --weight 100
9.3.3.四、驗證 ring 的內容:
# swift-ring-builder object.builder
9.3.3.五、平衡 ring:
# swift-ring-builder object.builder rebalance
9.3.四、分發環配置文件(本次測試就一個存儲節點,並且我把控制節點和存儲節點都執行了命令)
複製``account.ring.gz``,container.ring.gz``和``object.ring.gz 文件到每一個存儲節點和其餘運行了代理服務的額外節點的 /etc/swift 目錄。
9.四、完成安裝
9.4.一、從對象存儲源倉庫中獲取 /etc/swift/swift.conf 文件:
# curl -o /etc/swift/swift.conf \
https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/mitaka
註解:本次沒有下載,直接使用默認配置文件
9.4.二、編輯 vi /etc/swift/swift.conf 文件並完成如下動做:
在``[swift-hash]``部分,爲你的環境配置哈希路徑前綴和後綴:
[swift-hash]
...
swift_hash_path_suffix = LEO_TEST_SUFFIX
swift_hash_path_prefix = LEO_TEST_PREFIX
將其中的 HASH_PATH_PREFIX和 HASH_PATH_SUFFIX替換爲惟一的值。
警告:這些值要保密,而且不要修改或丟失。
在``[storage-policy:0]``部分,配置默認存儲策略:
[storage-policy:0]
name = Policy-0
default = yes
9.4.三、複製``swift.conf`` 文件到每一個存儲節點和其餘容許了代理服務的額外節點的 /etc/swift 目錄。
註解:本次操做已經在兩個節點都配置好了。
20200313:最終仍是把計算節點的三個builder文件所有刪除,而後把控制節點的ring文件傳過來了。
9.4.四、在全部節點上,確認配置文件目錄是否有合適的全部權:
# chown -R root:swift /etc/swift
9.4.五、在控制節點和其餘運行了代理服務的節點上,啓動對象存儲代理服務及其依賴服務,並將它們配置爲隨系統啓動:
# systemctl enable openstack-swift-proxy memcached
# systemctl start openstack-swift-proxy memcached
# systemctl status openstack-swift-proxy memcached
註解:本次只在控制節點運行了代理服務,計算節點沒有運行。
9.4.六、在存儲節點上,啓動對象存儲服務,並將其設置爲隨系統啓動:
# systemctl enable openstack-swift-account openstack-swift-account-auditor \
openstack-swift-account-reaper openstack-swift-account-replicator
# systemctl start openstack-swift-account openstack-swift-account-auditor \
openstack-swift-account-reaper openstack-swift-account-replicator
# systemctl status 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 start openstack-swift-container openstack-swift-container-auditor \
openstack-swift-container-replicator openstack-swift-container-updater
# systemctl status 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
# systemctl start openstack-swift-object openstack-swift-object-auditor \
openstack-swift-object-replicator openstack-swift-object-updater
# systemctl status openstack-swift-object openstack-swift-object-auditor \
openstack-swift-object-replicator openstack-swift-object-updater
9.五、驗證操做
9.5.一、導入``demo``憑證
$ . demo-openrc
9.5.二、顯示服務狀態:
$ swift stat
有報錯:
使用命令查看報錯:
swift stat --debug
20200313官方文檔可能存在問題,須要從新尋找部署教程。暫停實驗環境。
次日啥都沒幹,重啓後就行了。。。
9.5.三、建立``container1``容器
$ openstack container create container1
9.5.四、上傳一個測試文件到``container1``容器
$ openstack object create container1 FILE
9.5.五、列出``container1``容器裏的全部文件
$ openstack object list container1
9.5.六、從``container1``容器裏下載一個測試文件
$ openstack object save container1 FILE
註解:這個命令執行後沒有輸出。