Openstack入門篇(十六)之Cinder服務的部署與測試


  • 1.理解塊存儲服務

操作系統獲得存儲空間的方式一般有兩種:

通過某種協議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤,然后分區、格式化、創建文件系統;或者直接使用裸硬盤存儲數據(數據庫)

通過 NFS、CIFS 等 協議,mount 遠程的文件系統
第一種裸硬盤的方式叫做 Block Storage(塊存儲),每個裸硬盤通常也稱作 Volume(卷) 
第二種叫做文件系統存儲。NAS 和 NFS 服務器,以及各種分布式文件系統提供的都是這種存儲。

OpenStack 提供 Block Storage Service 的是 Cinder,其具體功能是:

①提供 REST API 使用戶能夠查詢和管理 volume、volume snapshot 以及 volume type
②提供 scheduler 調度 volume 創建請求,合理優化存儲資源的分配
③通過 driver 架構支持多種 back-end(后端)存儲方式,包括 LVM,NFS,Ceph,GlusterFS

  • 2.Cinder 架構以及塊存儲服務組件介紹

Cinder邏輯架構圖:

 

cinder不是一個存儲軟件,而是屬於管理存儲軟件。塊存儲服務通常包含下列組件:

cinder-api: 接受API請求,調用 cinder-volume 執行操作。

cinder-volume:與塊存儲服務和例如“cinder scheduler”的進程進行交互

cinder-scheduler守護進程:scheduler 通過調度算法選擇最合適的存儲節點創建 volume,和nova-scheduler類似

cinder-backup daemon:備份進程

消息隊列:Cinder 各個子服務通過消息隊列實現進程間通信和相互協作。因為有了消息隊列,子服務之間實現了解耦,這種松散的結構也是分布式系統的重要特征。

Database:Cinder 有一些數據需要存放到數據庫中,一般使用 MySQL。數據庫是安裝在控制節點上的,比如實驗環境中,可以訪問名稱為“cinder”的數據庫。

  • 3.物理部署方案

Cinder 的服務會部署在兩類節點上,控制節點和存儲節點。
查看當前計算節點cinder的相關服務

[root@linux-node1 ~]# ps -e |grep cinder
 1150 ?        01:19:09 cinder-api
 2025 ?        00:02:15 cinder-api
 3357 ?        00:17:16 cinder-schedule
24069 ?        00:27:01 cinder-volume
24089 ?        00:04:19 cinder-volume

cinder-api和cinder-schedule都部署在控制節點上,這無可厚非,思考:但是cinder-volume是否應該部署在存儲節點上呢?
實際上,OpenStack是一個分布式系統,其每個組件的子服務都可以部署在任何節點上,只需要網絡可通,這也表明了OpenStack的靈活性。無論哪個節點,只要運行了cinder-volume,它就是一個存儲節點。同時,存儲節點也可以部署其他組件的子服務。

  • 4.安裝組件並配置

(1)安裝軟件包

[root@linux-node1 ~]# yum install -y openstack-cinder

(2)修改配置:/etc/cinder/cinder.conf

[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
[database]      <==配置數據庫訪問
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder
[DEFAULT]       
transport_url = rabbit://openstack:openstack@192.168.56.11  <==配置RabbitMQ消息隊列訪問權限
auth_strategy = keystone    <==啟動用keystoen認證

[keystone_authtoken]        <==配置認證服務訪問
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder

[oslo_concurrency]      <==配置鎖路徑
lock_path = /var/lib/cinder/tmp

查看配置:
[root@linux-node1 ~]# grep "^[a-z]" /etc/cinder/cinder.conf 
auth_strategy = keystone
transport_url = rabbit://openstack:openstack@192.168.56.11
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
lock_path = /var/lib/cinder/tmp
  • 5.初始化塊存儲服務的數據庫,並驗證

[root@linux-node1 ~]# su -s /bin/sh -c "cinder-manage db sync" cinder
[root@linux-node1 ~]# mysql -h 192.168.56.11 -ucinder -pcinder -e "use cinder;show tables;"
  • 6.配置計算服務以使用塊設備存儲

[root@linux-node1 ~]# vim /etc/nova/nova.conf
[cinder]
os_region_name=RegionOne
  • 7.完成安裝

[root@linux-node1 ~]# systemctl restart openstack-nova-api.service
[root@linux-node1 ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@linux-node1 ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
  • 8.創建cinder和cinderv2服務實體

[root@linux-node1 ~]# openstack service create --name cinder \
>   --description "OpenStack Block Storage" volume
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | c63c93beff014724b036a811e2b0d591 |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+
[root@linux-node1 ~]# openstack service create --name cinderv2 \
>   --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 6829915c1f9745409ca9bda364fe26c4 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+
  • 9.創建塊設備存儲服務的API入口點

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume public http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume internal http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume admin http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 public http://192.168.56.11:8776/v2/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 internal http://192.168.56.11:8776/v2/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 admin http://192.168.56.11:8776/v2/%\(tenant_id\)s
[root@linux-node1 ~]# openstack service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 18b41a6647e84ef68c5df6058c2f4eab | glance   | image    |
| 436e446b475a46fa978349211d6c64eb | keystone | identity |
| 613a3d7e61574fdbb7c330f6892a1b50 | neutron  | network  |
| 6829915c1f9745409ca9bda364fe26c4 | cinderv2 | volumev2 |
| 7347593df9034e369d27caf8f0240470 | nova     | compute  |
| c63c93beff014724b036a811e2b0d591 | cinder   | volume   |
+----------------------------------+----------+----------+
[root@linux-node1 ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                                          |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------------------------+
| 0ae3e6275b4c4c20a7e8619909726bd4 | RegionOne | cinder       | volume       | True    | internal  | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| 1fba971a2dc6424eaa06ef61c910e739 | RegionOne | cinder       | volume       | True    | admin     | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| 20222ecb6eeb4f378035e79c47810b08 | RegionOne | keystone     | identity     | True    | public    | http://192.168.56.11:5000/v3/                |
| 45fd632b46684fdca9782a1e23b91f8c | RegionOne | glance       | image        | True    | admin     | http://192.168.56.11:9292                    |
| 64f9ee02b5d0489598f31e164d40e6df | RegionOne | nova         | compute      | True    | public    | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 6cc75ee06e5245059e106e89e1643a92 | RegionOne | keystone     | identity     | True    | internal  | http://192.168.56.11:35357/v3/               |
| 77f141dede894dea877d505b60e60de7 | RegionOne | nova         | compute      | True    | internal  | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 7883d0f227a54ac5a0db3ad3a02606df | RegionOne | nova         | compute      | True    | admin     | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 7c7b33e8c2ac431aa7380ceeac80fb37 | RegionOne | keystone     | identity     | True    | admin     | http://192.168.56.11:35357/v3/               |
| 84e4273b741148e2a2d9c71d2c62da1e | RegionOne | cinder       | volume       | True    | public    | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| abd82401a31d453ca2e28fc17816fd6c | RegionOne | neutron      | network      | True    | public    | http://192.168.56.11:9696                    |
| af72b7e0d3824c1e82663d06c1bd0205 | RegionOne | glance       | image        | True    | internal  | http://192.168.56.11:9292                    |
| cb6a870ba8a543ee882afe4b07d3c087 | RegionOne | neutron      | network      | True    | admin     | http://192.168.56.11:9696                    |
| e27bccfa73984db889f9373f288b4c67 | RegionOne | cinderv2     | volumev2     | True    | internal  | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| e3a7e437be8a4cf1968c82ceca932d57 | RegionOne | glance       | image        | True    | public    | http://192.168.56.11:9292                    |
| e54250bd44384b15b5bbf1bb6eb34337 | RegionOne | cinderv2     | volumev2     | True    | admin     | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| eba3e70ff0a44ab28898169f4807145f | RegionOne | cinderv2     | volumev2     | True    | public    | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| f5c7dad4452840d788ed59c905efb3e7 | RegionOne | neutron      | network      | True    | internal  | http://192.168.56.11:9696                    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------
  • 10.cinder-scheduler的調度

創建 Volume 時,cinder-scheduler 會基於容量、Volume Type 等條件選擇出最合適的存儲節點,然后讓其創建 Volume。
Filter scheduler 是 cinder-scheduler 默認的調度器。

scheduler_driver = cinder.scheduler.filter_scheduler.FilterScheduler

scheduler 調度過程如下:

通過過濾器(filter)選擇滿足條件的存儲節點(運行 cinder-volume)
通過權重計算(weighting)選擇最優(權重值最大)的存儲節點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM