本文共 6593 字,大约阅读时间需要 21 分钟。
OpenStack存储模块-Cinder
在前两篇文档中介绍了OpenStack的一些基础搭建,但是并没有加入存储模块。这篇主要介绍一下openstack的存储模块Cinder.
存储主要分为三种:
块存储:硬盘,存储设备,磁盘整列等。
文件存储:如NFS,FTP等主要用于文件共享的存储。
对象存储:分布式文件系统,swift等。有metadata(元数据)的数据描述作为支持的存储方式。
Cinder支持以上的多种存储方式。
Cinder组件
cinder-api: 接受API的请求,路由到cinder-volume来执行。
cinder-volume:响应请求,读取或写入数据库维护状态信息,通过消息队列机制与其它进程交互(如cinder-scheduler),也可以直接与上层块存储提供的硬件或软件进行交互。管理存储。
cinder-scheduler: 守护进程。类似于Nova-scheduler,为存储实例选择最优的块存储节点。
cinder-backup:守护进程。服务提供任何种类备份卷到一个备份存储提供者。就像``cinder-volume``服务,它与多种存储提供者在驱动架构下进行交互。
Cinder数据库配置和注册服务
创建数据库并授权:
1 2 3 | MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder' @ 'localhost' IDENTIFIED BY 'cinder' ; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder' @ '%' IDENTIFIED BY 'cinder' ; |
创建服务证书,完成这些步骤:
1 2 | # source admin-openstack.sh # openstack user create --domain default --password-prompt cinder |
添加 admin 角色到 cinder 用户上:
1 | # openstack role add --project service --user cinder admin |
创建 cinder 和 cinderv2 服务实体:
1 2 3 4 5 6 7 8 9 10 | # openstack service create --name cinder --description "OpenStack Block Storage" volume +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | 27b797388aaa479ea5542048df32b3d8 | | name | cinder | | type | volume | +-------------+----------------------------------+ |
1 2 3 4 5 6 7 8 9 10 | # openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | 85f9890df5444a5d9a989c96b630c7a7 | | name | cinderv2 | | type | volumev2 | +-------------+----------------------------------+ |
创建块设备存储服务的 API 入口点,需要注册两个版本:
1 2 3 4 5 6 | openstack endpoint create --region RegionOne volume public http: //172 .16.10.50:8776 /v1/ %\(tenant_id\)s openstack endpoint create --region RegionOne volume internal http: //172 .16.10.50:8776 /v1/ %\(tenant_id\)s openstack endpoint create --region RegionOne volume admin http: //172 .16.10.50:8776 /v1/ %\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 public http: //172 .16.10.50:8776 /v2/ %\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 internal http: //172 .16.10.50:8776 /v2/ %\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 admin http: //172 .16.10.50:8776 /v2/ %\(tenant_id\)s |
Cinder安装配置
在控制节点安装cinder组件:
1 | # yum install -y openstack-cinder |
编辑 /etc/cinder/cinder.conf,同时完成如下动作:
配置数据库(密码为cinder):
1 | connection = mysql+pymysql: //cinder :cinder@172.16.10.50 /cinder |
同步块设备服务的数据库:
1 | # su -s /bin/sh -c "cinder-manage db sync" cinder |
确认数据库同步成功:
1 | # mysql -h 172.16.10.50 -ucinder -pcinder -e "use cinder;show tables;" |
在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:
1 2 | [DEFAULT] rpc_backend = rabbit |
1 2 3 4 5 | [oslo_messaging_rabbit] ... rabbit_host = 172.16.10.50 rabbit_userid = openstack rabbit_password = openstack |
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [DEFAULT] auth_strategy = keystone [keystone_authtoken] ... auth_uri = http: //172 .16.10.50:5000 auth_url = http: //172 .16.10.50:35357 memcached_servers = 172.16.10.50:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = cinder |
在 [oslo_concurrency] 部分,配置锁路径:
1 | lock_path = /var/lib/cinder/tmp |
编辑文件 /etc/nova/nova.conf 并添加如下到其中:
1 2 | [cinder] os_region_name= RegionOne |
重启nova-api:
1 | # systemctl restart openstack-nova-api.service |
启动cinder-api(端口8776)和cinder-scheduler:
1 2 | # systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service # systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service |
安装配置存储节点
存储节点可以配置在计算节点上,也可以有其它的专用存储服务,这里使用计算机节点提供存储服务。
计算节点上需要有一个外挂磁盘。
创建LVM 物理卷 /dev/sdb:
创建 LVM 卷组 cinder-volumes:
1 2 3 4 | # pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created # vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created |
设置只有实例可以访问块存储卷组:
默认情况下,LVM卷扫描工具会扫描``/dev`` 目录,查找包含卷的块存储设备。如果项目在他们的卷上使用LVM,扫描工具检测到这些卷时会尝试缓存它们,可能会在底层操作系统和项目卷上产生各种问题。必须重新配置LVM,让它只扫描包含``cinder-volume``卷组的设备。编辑``/etc/lvm/lvm.conf``文件并完成下面的操作:
在``devices``部分,添加一个过滤器,只接受``/dev/sdb``设备,拒绝其他所有设备:
1 2 3 | devices { ... filter = [ "a/sdb/" , "r/.*/" ] |
每个过滤器组中的元素都以``a``开头,即为 accept,或以 r 开头,即为**reject**,并且包括一个设备名称的正则表达式规则。过滤器组必须以``r/.*/``结束,过滤所有保留设备。您可以使用 :命令:`vgs -vvvv` 来测试过滤器。
在存储节点安装配置cinder
安装软件包:
1 | yum install -y openstack-cinder targetcli python-keystone |
配置存储节点的cinder:
在存储节点的cinder配置和在控制节点的配置差别不是很大,可以直接从控制节点拷贝并修改权限:
1 | # scp /etc/cinder/cinder.conf 172.16.10.51:/etc/cinder/ |
在cinder.conf 的``[lvm]``部分,配置LVM后端以LVM驱动结束,卷组``cinder-volumes`` ,iSCSI 协议和正确的 iSCSI服务,如果没有此模块可以手动添加:
1 2 3 4 5 | [lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = lioadm |
在 [DEFAULT] 部分,启用 LVM 后端:
1 | enabled_backends = lvm |
启动块存储卷服务及其依赖的服务:
1 2 | # systemctl enable openstack-cinder-volume.service target.service # systemctl start openstack-cinder-volume.service target.service |
在控制节点验证是否配置成功,正常为up状态,如果不是UP状态则不能添加云硬盘:
1 2 3 4 5 6 7 8 | # source admin-openstack.sh # cinder service-list +------------------+-----------+------+---------+-------+----------------------------+-----------------+ | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +------------------+-----------+------+---------+-------+----------------------------+-----------------+ | cinder-scheduler | node1 | nova | enabled | up | 2016-11-02T09:16:34.000000 | - | | cinder-volume | node2@lvm | nova | enabled | up | 2016-11-02T09:16:39.000000 | - | +------------------+-----------+------+---------+-------+----------------------------+-----------------+ |
为虚拟机添加一个卷
之前已经安装了Horizon,可以直接通过dashboard添加云硬盘操作。也可以根据官方的文档命令行添加云硬盘。
如果在Web管理界面出现云硬盘信息,说明添加成功。
查看虚拟机上是否有此虚拟硬盘:
1 2 3 4 5 6 7 8 | $ sudo fdisk -l Disk /dev/vdb : 1073 MB, 1073741824 bytes 16 heads, 63 sectors /track , 2080 cylinders, total 2097152 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical /physical ): 512 bytes / 512 bytes I /O size (minimum /optimal ): 512 bytes / 512 bytes Disk identifier: 0x00000000 |
格式化硬盘,并mount:
1 2 3 4 | $ sudo fdisk /dev/vdb n p w $ sudo mkfs.ext4 /dev/vdb1 $ sudo mount /dev/vdb1 /data/ |
可以对正在运行的虚拟机上添加云硬盘,不建议动态的扩容或收缩硬盘容量,可能会造成数据丢失的情况。在实际生产环境中,不建议使用cinder的各种复杂功能。
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1868674
转载地址:http://sbdeo.baihongyu.com/