精华内容
下载资源
问答
  • openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev2   参考安装文档... 块存储服务(cind...
    openstack service create --name cinderv2 \
      --description "OpenStack Block Storage" volumev2
    

      

    参考安装文档https://docs.openstack.org/newton/zh_CN/install-guide-rdo/cinder.html

      块存储服务(cinder)为实例提供块存储。存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN,NFS,ISCSI,Ceph等。

      

    块存储服务通常包含下列组件:

    cinder-api

    接受API请求,并将其路由到``cinder-volume``执行。

    cinder-volume

    与块存储服务和例如``cinder-scheduler``的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。``cinder-volume``服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。

    cinder-scheduler守护进程

    选择最优存储提供节点来创建卷。其与``nova-scheduler``组件类似。

    cinder-backup daemon

    ``cinder-backup``服务提供任何种类备份卷到一个备份存储提供者。就像``cinder-volume``服务,它与多种存储提供者在驱动架构下进行交互。

    消息队列    在块存储的进程之间路由信息。 安装配置控制节点

    PS:生产可以安装多个存储节点

    之前已经建立过数据库和用户

    安装软件包

    yum install openstack-cinder

     编辑 /etc/cinder/cinder.conf,同时完成如下动作:

    在 [database] 部分,配置数据库访问:

    [database]
    connection = mysql+pymysql://cinder:cinder@192.168.0.112/cinder
    

    在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

    [DEFAULT]
    transport_url = rabbit://openstack:openstack@192.168.0.112
    

    在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

    [DEFAULT]
    auth_strategy = keystone
    
    [keystone_authtoken]
    auth_uri = http://192.168.0.112:5000
    auth_url = http://192.168.0.112:35357
    memcached_servers = 192.168.0.112:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = cinder
    password = cinder
    

    PS:不按照官方安装文档配置my_Ip

    在 [oslo_concurrency] 部分,配置锁路径:

    [oslo_concurrency]
    ...
    lock_path = /var/lib/cinder/tmp
    

    过滤配置文件

    初始化块设备服务的数据库:

    su -s /bin/sh -c "cinder-manage db sync" cinder
    

    有info信息没有waring及error信息

    验证数据库创建是否成功

    mysql -h192.168.0.112 -ucinder -pcinder -e "use cinder;show tables;"
    

    配置计算服务使用块设备存储

    编辑文件 /etc/nova/nova.conf 并添加如下到其中:

    [cinder]
    os_region_name = RegionOne
    

    重启计算API 服务:

     systemctl restart openstack-nova-api.service
    

    启动块设备存储服务,并将其配置为开机自启:

    systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
    systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
    

    监听端口为8776

     

    创建 cinder 和 cinderv2 服务实体:

    openstack service create --name cinder \
      --description "OpenStack Block Storage" volume
    

    openstack service create --name cinderv2 \
      --description "OpenStack Block Storage" volumev2
    

     

    创建块设备存储服务的 API 入口点:

    openstack endpoint create --region RegionOne \
      volume public http://192.168.0.112:8776/v1/%\(tenant_id\)s
      openstack endpoint create --region RegionOne \
      volume internal http://192.168.0.112:8776/v1/%\(tenant_id\)s
      openstack endpoint create --region RegionOne \
      volume admin http://192.168.0.112:8776/v1/%\(tenant_id\)s
    

    V2的

    openstack endpoint create --region RegionOne \
      volumev2 public http://192.168.0.112:8776/v2/%\(tenant_id\)s
      openstack endpoint create --region RegionOne \
      volumev2 internal http://192.168.0.112:8776/v2/%\(tenant_id\)s
      openstack endpoint create --region RegionOne \
      volumev2 admin http://192.168.0.112:8776/v2/%\(tenant_id\)s
    

    验证

     

    安装并配置一个存储节点(类似于计算节点)

    没有存储节点默认存储在计算节点的本地硬盘,目录为/var/lib/nova/instances

    本地硬盘的优势是性能好,缺点是不灵活

    本次试验还是安装在控制节点上面(对于cinder来说就是一个存储节点)

    安装支持的工具包:

    安装 LVM 包:

    yum -y install lvm2
    

    启动LVM的metadata服务并且设置该服务随系统启动:

    systemctl enable lvm2-lvmetad.service
    systemctl start lvm2-lvmetad.service
    

    关闭主机添加一块硬盘

    开机查看一下

    创建LVM 物理卷 /dev/sdb

    pvcreate /dev/sdb
    

    创建 LVM 卷组 cinder-volumes:(名称不能错因为配置需要使用此名称)

    vgcreate cinder-volumes /dev/sdb
    

     

    块存储服务会在这个卷组中创建逻辑卷

    创建完毕使用命令查看

    vgdisplay 
    

    只有实例可以访问块存储卷组。但是,底层的操作系统管理着与这些卷相关联的设备。默认情况下,LVM卷扫描工具会扫描``/dev`` 目录,查找包含卷的块存储设备。如果项目在他们的卷上使用了LVM,扫描工具便会在检测到这些卷时尝试缓存它们,这可能会在底层操作系统和项目卷上产生各种问题。所以您必须重新配置LVM,让它扫描仅包含``cinder-volume``卷组的设备。编辑``/etc/lvm/lvm.conf``文件并完成下面的操作:

    在``devices``部分,添加一个过滤器,只接受``/dev/sdb``设备,拒绝其他所有设备:

    devices {
    ...
    filter = [ "a/sdb/", "r/.*/"]
    

    如果您的存储节点在操作系统磁盘上使用了 LVM,您还必需添加相关的设备到过滤器中。例如,如果 /dev/sda 设备包含操作系统:

    把以上修改成

    filter = [ "a/sda/", "a/sdb/", "r/.*/"]
    

     

    安装并配置组件

    安装软件包:

    yum install openstack-cinder targetcli python-keystone
    

    编辑 /etc/cinder/cinder.conf(因为控制节点和存储节点在一台机器配置相同不需要再次配置数据库,消息队列,keystone认证等)

    在``[lvm]``部分中,配置LVM后端,包括LVM驱动,``cinder-volumes``卷组 ,iSCSI 协议和适当的 iSCSI服务。如果``[lvm]``部分不存在,则创建它:

    [lvm]
    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    volume_group = cinder-volumes
    iscsi_protocol = iscsi
    iscsi_helper = lioadm
    

    在文件末尾添加,其他存储设备也是差不多这样配置,之前驱动有所不同

    在 [DEFAULT] 部分,启用 LVM 后端:

    [DEFAULT]
    enabled_backends = lvm
    

    注意这是一个列表可以写多个用逗号分割

    在 [DEFAULT] 区域,配置镜像服务 API 的位置:

    [DEFAULT]
    ...
    glance_api_servers = http://192.168.0.112:9292
    

    在 [oslo_concurrency] 部分,配置锁路径:(前面已经配置)

     

    配置my_ip

    [DEFAULT]

    iscsi_ip_address = 192.168.0.112

    启动块存储卷服务及其依赖的服务,并将其配置为随系统启动:

    systemctl enable openstack-cinder-volume.service target.service
    systemctl start openstack-cinder-volume.service target.service
    

    验证

    source admin-openstack 
    openstack volume service list
    

    PS:为了保证成功,同步一下时间

     也可以重启一下服务

     systemctl restart openstack-nova-api
    

      

     创建磁盘

     使用demo用户登录web界面

    在计算-卷-创建卷

    把硬盘挂在到云主机

    PS: 如果挂载出现问题可以查看日志/var/log/nova/nova-compute.log查找原因

       ssh登录到那台云主机查看

      

      可以正常格式化并且挂载mount

      挂载以后当着数据盘使用,如果系统盘出现问题可以把数据盘挂载到其他的主机上面

      

      

      和使用工有云是一样的

      PS:卷相当于一块网络硬盘(云硬盘),生产中一般使用本地硬盘作为系统盘,云硬盘作为数据盘。其实卷也可以作为系统盘,在创建主机的时候如下选择

      

      

      卷可以扩大

      

      

      在存储节点查看

      

     

       PS:生产可以使用ISCSI,NFS,GlusterFS,Ceph(建议使用GlusterFS测试建议使用ISCSI和NFS因为配置更加简单)

     

    转载于:https://www.cnblogs.com/minseo/p/8504756.html

    展开全文
  • Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群部署 Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署 Openstack-Mitaka 高可用之 ...

     目录

        Openstack-Mitaka 高可用之 概述
        Openstack-Mitaka 高可用之 环境初始化
        Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
        Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
        Openstack-Mitaka 高可用之 memcache
        Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
        Openstack-Mitaka 高可用之 认证服务(keystone)
        OpenStack-Mitaka 高可用之 镜像服务(glance)
        Openstack-Mitaka 高可用之 计算服务(Nova)
        Openstack-Mitaka 高可用之 网络服务(Neutron)
        Openstack-Mitaka 高可用之 Dashboard
        Openstack-Mitaka 高可用之 启动一个实例
        Openstack-Mitaka 高可用之 测试

     

     简介

    镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个API,允许查询虚拟机镜像的metadata 并获取一个现存的镜像。可以将虚拟机镜像存储到各种位置,从简单的文件系统到对象存储系统。

    组件:
        (1)glance-api
            接收镜像API的调用,诸如镜像发现、恢复、存储
        (2)glance-registry
            存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型
        (3)数据库
            存放镜像源数据,诸如MySQL、SQLite
        (4)镜像文件的存储仓库
            支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块存储、HTTP
        (5)元数据定义服务
            通用API,是用于为厂商、管理员、服务、及用户自定义元数据
           

    安装和配置

    安装服务前,必须创建一个数据库、服务凭证和API端点

    root@controller1 ~]# . admin-openrc 
    [root@controller1 ~]# mysql -ugalera -pgalera -h 192.168.0.10
    
    MariaDB [(none)]> CREATE DATABASE glance;
    Query OK, 1 row affected (0.07 sec)
    
    MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'localhost' identified by 'glance';
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'%' identified by 'glance';
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [(none)]> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    创建服务证书
    [root@controller1 ~]# openstack user create --domain default --password-prompt glance        # 密码 glance
    
    创建服务实体
    [root@controller1 ~]# openstack service create --name glance   --description "OpenStack Image" image
    
    创建镜像服务的API端点
    [root@controller1 ~]# openstack endpoint create --region RegionOne   image public http://controller:9292
    [root@controller1 ~]# openstack endpoint create --region RegionOne   image internal http://controller:9292
    [root@controller1 ~]# openstack endpoint create --region RegionOne   image admin http://controller:9292

     

    安装并配置组件

    三个节点都需要安装:
    # yum install openstack-glance -y
    
    配置文件做如下修改:
    [root@controller1 ~]# vim /etc/glance/glance-api.conf
    …
    Bind_host = 192.168.0.xx        # 监听ip地址,为了避免和vip冲突。
    registry_host = 192.168.0.xx        # 监听ip地址,为了避免和vip冲突。
    [database]
    ...
    connection = mysql+pymysql://glance:glance@controller/glance
    [keystone_authtoken]
    ...
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller1:11211,controller2:11211,controller3:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = glance
    password = glance
    [paste_deploy]
    ...
    flavor = keystone
    
    [glance_store]
    ...
    stores = file,http
    default_store = file
    filesystem_store_datadir = /var/lib/glance/images/
    
    [root@controller1 ~]# vim /etc/glance/glance-registry.conf
    [database]
    ...
    connection = mysql+pymysql://glance:glance@controller/glance
    …
    bind_host = 192.168.0.xx        # 监听ip地址,为了避免和vip冲突。
    [keystone_authtoken]
    ...
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller1:11211,controller2:11211,controller3:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = glance
    password = glance
    [paste_deploy]
    ...
    flavor = keystone

     

    将修改后的配置文件拷贝到其他controller节点

    [root@controller1 ~]# cd /etc/glance/
    [root@controller1 glance]# scp glance-api.conf glance-registry.conf controller2:/etc/glance/
    glance-api.conf                                                                                                            100%  137KB 137.5KB/s   00:00    
    glance-registry.conf                                                                                                       100%   65KB  65.5KB/s   00:00    
    [root@controller1 glance]# scp glance-api.conf glance-registry.conf controller3:/etc/glance/
    glance-api.conf                                                                                                            100%  137KB 137.5KB/s   00:00    
    glance-registry.conf 

    注意修改监听地址

    写入镜像服务数据库

    [root@controller1 ~]# su -s /bin/sh -c "glance-manage db_sync" glance
    忽视告警信息
    Option "verbose" from group "DEFAULT" is deprecated for removal.  Its value may be silently ignored in the future.
    /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:1171: OsloDBDeprecationWarning: EngineFacade is deprecated; please use oslo_db.sqlalchemy.enginefacade
      expire_on_commit=expire_on_commit, _conf=conf)
    /usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `ix_image_properties_image_id_name`. This is deprecated and will be disallowed in a future release.')
      result = self._query(query)

    完成安装,启动镜像服务

    每个controller节点都需要执行:
    # systemctl enable openstack-glance-api.service openstack-glance-registry.service
    # systemctl start openstack-glance-api.service openstack-glance-registry.service

    Haproxy 详解
    http://blog.itpub.net/28624388/viewspace-1288651/

    listen galera_cluster
        mode tcp
        bind 192.168.0.10:3306
        balance source
        option mysql-check user haproxy
        server controller1 192.168.0.11:3306 check inter 2000 rise 3 fall 3 backup
        server controller2 192.168.0.12:3306 check inter 2000 rise 3 fall 3 
        server controller3 192.168.0.13:3306 check inter 2000 rise 3 fall 3 backup
    
    listen memcache_cluster
        mode tcp
        bind 192.168.0.10:11211
        balance source
        server controller1 192.168.0.11:11211 check inter 2000 rise 3 fall 3 
        server controller2 192.168.0.12:11211 check inter 2000 rise 3 fall 3
        server controller3 192.168.0.13:11211 check inter 2000 rise 3 fall 3 
    
    listen dashboard_cluster
        mode tcp
        bind 192.168.0.10:80
        balance source
        option tcplog
        option httplog
        server controller1 192.168.0.11:80 check inter 2000 rise 3 fall 3
        server controller2 192.168.0.12:80 check inter 2000 rise 3 fall 3
        server controller3 192.168.0.13:80 check inter 2000 rise 3 fall 3
        
    listen keystone_admin_cluster
        mode tcp
        bind 192.168.0.10:35357
        balance source
        option tcplog
        option httplog
        server controller1 192.168.0.11:35357 check inter 2000 rise 3 fall 3
        server controller2 192.168.0.12:35357 check inter 2000 rise 3 fall 3
        server controller3 192.168.0.13:35357 check inter 2000 rise 3 fall 3
    listen keystone_public_internal_cluster
        mode tcp
        bind 192.168.0.10:5000
        balance source
        option tcplog
        option httplog
        server controller1 192.168.0.11:5000 check inter 2000 rise 3 fall 3
        server controller2 192.168.0.12:5000 check inter 2000 rise 3 fall 3
        server controller3 192.168.0.13:5000 check inter 2000 rise 3 fall 3
    
    listen glance_api_cluster
        mode tcp
        bind 192.168.0.10:9292
        balance source
        option tcplog
        option httplog
        server controller1 192.168.0.11:9292 check inter 2000 rise 3 fall 3
        server controller2 192.168.0.12:9292 check inter 2000 rise 3 fall 3
        server controller3 192.168.0.13:9292 check inter 2000 rise 3 fall 3

     

    确认无误,拷贝到其他controller节点

    [root@controller1 glance]# systemctl restart haproxy 
    [root@controller1 glance]# netstat -ntplu | grep haproxy 
    tcp        0      0 192.168.0.10:5000       0.0.0.0:*               LISTEN      10560/haproxy       
    tcp        0      0 192.168.0.10:5672       0.0.0.0:*               LISTEN      10560/haproxy       
    tcp        0      0 192.168.0.10:3306       0.0.0.0:*               LISTEN      10560/haproxy       
    tcp        0      0 192.168.0.10:9292       0.0.0.0:*               LISTEN      10560/haproxy
    tcp     0    0 192.168.0.10:80     0.0.0.0:*         LISTEN    10560/haproxy tcp
    0 0 192.168.0.10:35357 0.0.0.0:* LISTEN 10560/haproxy udp 0 0 0.0.0.0:43543 0.0.0.0:* 10559/haproxy [root@controller1 ~]# scp /etc/haproxy/haproxy.cfg controller2:/etc/haproxy/ haproxy.cfg 100% 4747 4.6KB/s 00:00 [root@controller1 ~]# scp /etc/haproxy/haproxy.cfg controller3:/etc/haproxy/ haproxy.cfg 100% 4747 4.6KB/s 00:00

     

    haproxy配置务必保持一致。

     

    验证操作:

    选择任意节点下载镜像:

    # wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img     # 可提前使用迅雷下载

    使用QCOW2磁盘格式,bare容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:

    # openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public

     

    创建成功,确认镜像上传并验证属性:

    # openstack image list

    glance部署成功。

    转载于:https://www.cnblogs.com/hukey/p/8047234.html

    展开全文
  • 块存储是其中重要的一部分。...本文主要分析了分布式块存储系统sheepdog,研发OpenStack与sheepdog的整合方案,并在系统实现中总结了其性能优化,最后给出了默认配置的块存储以及优化之后的块存储性能对比测试与分析。

    原文:http://www.hengtianyun.com/download-show-id-101.html

    块存储,简单来说就是提供了块设备存储的接口。用户需要把块存储卷附加到虚拟机(或者裸机)上后才可以与其交互。这些卷都是持久的,它们可以被从运行实例上解除或者重新附加而数据保持完整不变。OpenStack 中的实例是不能持久化的,需要挂载 volume,在 volume 中实现持久化。Cinder 就是提供对 volume 实际需要的存储块单元的实现管理功能。

    1.单机块存储

    1.1 LVM

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelsha- gen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

    与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如“sales”、 “development”)代替物理磁盘名(如“sda”、“sdb”)来标识存储卷。

     

    Device-mapper是一种支持逻辑卷管理的通用设备映射机制,为存储资源管理的块设备驱动提供了一个高度模块化的内核架构。LVM是基于Device-mapper的用户程序实现。

    Device-mapper在内核中它通过一个模块化的Target Driver插件实现对IO请求的过滤或者重定向工作,当前已经实现的Target Driver插件包括软Raid、软加密、逻辑卷条带、多路径、镜像、快照等。整个 device mapper 机制由两部分组成–内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。内核中主要提供完成这些策略所需要的机制。Device-mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。

    LVM使得文件系统可以跨多个磁盘,因此大小不会受物理磁盘的限制。可以在系统运行状态下动态地扩展文件系统大小。可以增加新磁盘到 LVM 的存储池中。可以镜像的方式冗余重要数据到多个物理磁盘上。还能很方便地导出整个卷组,并导入到另外一台机器上。

    然而LVM缺点也是明显的,当卷组中的一个磁盘损坏时,整个卷组都会受影响。仅支持有限个文件系统类型的减小操作(ext3不支持减少文件系统大小的操作)。因为加入了额外的操作,存储性能会受影响。

    1.2 SAN

    存储区域网络(SAN)是一种高速网络或子网络,提供在计算机与存储系统之间的数据传输。存储设备是指一张或多张用以存储计算机数据的磁盘设备。一个 SAN 网络由负责网络连接的通信结构、负责组织连接的管理层、存储部件以及计算机系统构成,从而保证数据传输的安全性和力度。

    大部分SAN使用SCSI协议在服务器和存储设备之间传输和沟通,通过在SCSI之上建立不同镜像层,可以实现存储网络的连接。常见的有iSCSI,FCP,Fibre Channel over Ethernet等。

    SAN通常需要在专用存储设备中建立,而iSCSI是基于TCP/IP的SCSI映射,通过iSCSI协议和Linux iSCSI项目我们可以在常见的PC机上建立SAN存储。

    SAN有两个较大的缺陷:成本和复杂性,特别是在光纤信道中这些缺陷尤其明显。使用光纤信道的情况下,合理的成本大约是1千兆或者两千兆大概需要五万到六万美金。从另一个角度来看,虽然新推出的基于iSCSI的SAN解决方案大约只需要两万到三万美金,但是其性能却无法和光纤信道相比较。在价格上的差别主要是由于iSCSI技术使用的是现在已经大量生产的吉比特以太网硬件,而光纤通道技术要求特定的价格昂贵的设备。

    2. 分布式块存储

    在面对极具弹性的存储需求和性能要求下,单机或者独立的SAN越来越不能满足企业的需要。分布式块存储可以为任何物理机或者虚拟机提供持久化的块存储设备,管理块设备的创建、删除和attach/deattach。支持强大的快照功能,快照可以用来恢复或者创建新的块设备。分布式存储系统能够提供不同IO性能要求的块设备。能够满足动态扩展的要求。

    目前,开源的分布式块存储有Ceph,GlusterFS,Sheepdog等。与Ceph相比,最大优势就是代码短小好维护和hack的成本很小。Sheepdog也有很多Ceph不支持的特性,比如说Multi-Disk, Cluster-wide Snapshot等。

    在文中,日本NTT的研究人员对比了sheepdog,glusterfs以及ceph在各种情况下的读写性能,这份测试在今年的5月份的日本openstack大会上公布。在大部分情况下,sheepdog的读写速度都比glusterfs以及ceph表现的出色。

    3. openstack块存储

    3.1 存储架构

    3.2 Cinder简介

    Cinder是OpenStack中提供块存储服务的API框架。它并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口[2],不同的块设备服务厂商在Cinder中实现其驱动支持以与OpenStack进行整合。后端的存储可以是DAS、NAS、SAN,对象存储或者分布式文件系统。Cinder的块存储数据完整性、可用性保障是由后端存储提供的。

    展开全文
  • OpenStack块存储nova-volume工作机制和相关问题 最近有点忙,收到不少邮件或者留言,有些没有回复,在此致歉。在OpenStack中,出现问题比较多的除了网络部分,还有存储部分。对于swift对象存储的研究和相关...
     

    OpenStack块存储nova-volume工作机制和相关问题


    最近有点忙,收到不少邮件或者留言,有些没有回复,在此致歉。在OpenStack中,出现问题比较多的除了网络部分,还有存储部分。对于swift对象存储的研究和相关技术资料已经有很多,而块存储nova-volume相关的介绍还少见,其中也有很多问题出现。

    下面将对这一部分的一些问题给予介绍,希望大家有好的经验都分享出来,社区的力量需要每一分子的贡献。最近这几篇文章的目录贴在这里,相关问题可以直接去查阅对应文章,如果还问很多已经在文章里说明的问题我就不回复了。

    OneStack:Ubuntu 12.04 (或11.10) 一键部署安装OpenStack云计算平台,这个介绍了onestack这个一键部署的项目;
    OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
    ,这个记录了一些基本的问题和解决方法;

    构建OpenStack的高可用性(HA,High Availability),这部分介绍了高可用性的OpenStack IaaS平台的一些策略和方案;

    OpenStack云平台的网络模式及其工作机制,这个详细分析了网络原理和工作机制;

    OpenStack卷存储nova-volume相关问题,由于nova-volume问题较多,单独写这一篇,主要介绍块存储相关的问题;

    对swift对象存储的内部原理和相关技术可以查找对象存储、一致性哈希等文章,新浪有几篇技术分享介绍的很好,推荐看一看。

    一、相关概念

    LVM存储常用术语
    物理存储介质(Physical Media):
    物理存储设备,如磁盘或者磁盘上的分区,是存储系统的最底层实体。 

    物理卷(PV,Physical Volume)硬盘分区或从逻辑上与硬盘分区具有同样功能的设备(如 RAID),是 LVM 的基本存储逻辑块;和基本的物理存储介质(如分、磁盘等)不同的是含有 LVM 管理参数。 

    卷组(VG,Volume Group):LVM 中的最高抽象层,由一个或多个物理卷(PV)组成。一个逻辑卷管理系统中可以拥有多个卷组。 
    逻辑卷(LV,Logical Volume):逻辑卷(LV)在卷组上建立,相当于非 LVM 系统中的分区。每个逻辑卷属于它所在的卷组。 


    VGDA(卷组描述符区域) :和非 LVM 系统将包含分区信息的元数据保存在位于分区起始位置的分区表中一样,逻辑卷以及卷组相关的元数据被保存在位于物理卷起始处的 VGDA 中。VGDA 包括以下内容:PV 描述符、VG 描述符、LV 描述符、和一些 PE 描述符。系统启动 LVM 时激活 VG,并将 VGDA 加载至内存,来识别 LV 的实际物理存储位置。当系统进行 I/O 操作时,就会根据 VGDA 建立的映射机制来访问实际的物理位置。

    存储类型

    通常来讲,所有磁盘阵列都是基于Block块的模式,所有的NAS产品都是文件级存储,而对象存储(Object-based Storage)是一种新的网络存储架构,它基于对象存储技术。

    iSCSI协议

    将SCSI命令封装在IP包中,建立会话通过TCP/IP网络传输。iSCSI协议定义了在TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方法。发送端将SCSI命令和数据封装到TCP/IP包中再通过网络转发,接收端收到 TCP/IP包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的SCSI设备一样简单。

    iscsi-target server

    iSCSI有多种存储架构,但是由于PC架构的成本低,同时技术越来越成熟,基于PC架构的iSCSI存储设备应用广泛。iSCSI Target软件安装在PC服务器上,使普通的PC服务器转变成一台iSCSI存储设备,并通过PC服务器的以太网卡对外提供基于iSCSI数据传输协议的服务。

    iscsi-initiator

    Initiator软件可以将以太网卡虚拟为iSCSI卡,接受和发送iSCSI数据报文,从而实现主机和iSCSI设备之间的iSCSI协议和TCP/IP协议传输功能。


    二、OpenStack的存储服务

    1、存储组件和服务

    OpenStack创建出来的实例是没有永久存储的,关闭实例后数据都会丢失,所以需要存储卷来保存每个instance的数据。这项工作由nova-volume实现,提供类似亚马逊EBS的块存储服务。其中,nova-volume专门管理卷的创建、删除、挂载等,这些卷基于lvm管理,使用iscsi提供服务,并通过libvirt与虚拟机交互。

    lvm提供卷组和逻辑卷管理。首先需要创建一个名为nova-volumes的卷组,不然nova-volume不能正常工作。因为nova-volume所有的创建、删除volume都是针对这个卷组里的逻辑卷。创建volume时nova-volume会调用lvm的命令lvcreate创建逻辑卷。

    iscsi提供多个节点间的存储服务。创建volume时计算节点还会创建iscsi IQN,计算节点与iscsi服务器间建立iscsi会话;挂载时实例就拥有了这个逻辑卷;然后使用virsh命令把这个逻辑卷挂载到实例作为它的一块存储设备。

    libvirt是一组与多种虚拟机交互的管理工具集。它支持虚拟机KVM/QEMU、Xen、virtual Box、vmware ESX、Hyper-V等。为了使虚拟机获得更强大的后端存储能力,libvirt 提供了对各种存储介质的支持,包括本地文件系统,网络文件系统,iSCSI,LVM 等多种后端存储系统。libvirt 中的存储管理独立于虚拟机管理。也就是存储池和存储卷的操作独立于虚拟机的操作存在,因此进行存储管理时,不需要有虚拟机的存在,可以当虚拟机需要存储资源时再进行分配,非常灵活。

    存储卷是一种可以分配给虚拟机使用的存储设备,在OpenStack中就是逻辑卷volume。在虚拟机中与一个挂载点对应,而物理上可以是一个虚拟机磁盘文件或一个真实的磁盘分区,从卷组nova-volumes中分出来的。

    存储池是一种可以从中生成存储卷的存储资源,后端可以支持目录池、本地文件系统池、逻辑卷池、磁盘卷池、iSCSI 卷池等,在OpenStack中就是逻辑卷组nova-volumes。

    存储卷从存储池中划分出来,存储卷分配给虚拟机成为可用的存储设备。存储池在 libvirt 中分配的 id 标志着它成为 libvirt 可管理的对象,生成卷组 vg(volume group,OpenStack中必须nova-volumes) 就有了可划分存储卷的存储池,状态为活跃 (active) 状态才可以执行划分存储卷的操作,可以参考下图。

    CentOS+LVM+Celerra iSCSI配置详解


    2、存储结构和机制

    安装部署OpenStack时,安装了lvm,安装了libvirt,还安装了tgt和open-iscsi。

    在nova.conf设置存储管理工具为tgtadm,使用tgt管理target。iscsi target管理工具很多,iscsitarget软件是其中一中。

    服务器,tgt提供服务,tgtadm命令查询、创建和删除target。

    客户端,open-iscsi提供服务,iscsiadm命令查询、登录和登出target。建立会话,断开会话。

    数据库,volume的位置、状态等信息会存到数据库,在onestack安装时,选择mysql,同时安装了phpmyadmin,可以通过web界面访问管理。

    nova-volume安装在控制节点,这个物理主机提供volume的创建、删除、挂载等管理功能。

    open-iscsi安装在计算节点,提供计算节点上的实例和服务端的target之间的会话管理。

    所以在一个all-in-one的部署结构里,物理主机既是server又是client。

    在OpenStack的安装过程中,最后nova.conf这个配置文件设置了target管理程序tgtadm,所以使用tgt来提供target服务;iscsi_prefix指明了查找iscsitarget的ip段,可以设为完整的tgt所在的主机ip,或者前缀,可以使用iscsi_ip_addres=192.168.139.50设置指定的ip

    这样nova会自动使用iscsiadm从这个ip进行discovery,类似执行命令

    iscsiadm -m discovery -t sendtargets -p IP:port

    所以每次实例启动时,通过已有的映射挂载这个设备,也就是nova-volumes里的一个逻辑卷,或者说一个iscsi target。这样就可以像普通磁盘设备、物理卷、磁盘分区一样使用这个挂载的volume。


    3、存储服务的工作流程

    安装部署OpenStack时,安装了lvm,安装了libvirt,还安装了tgt和open-iscsi。

    1)lvm创建卷组(VG),OpenStack中就是逻辑卷组nova-volumes,也就是OpenStack里只能使用这个卷组名。没有这个名字的卷组,nova-volume将不会正常启动,这也会导致nova-compute不能正常启动。

    查看卷组vgdisplay

    查看哪些nova服务没有正常启动nova-manage service list

    2)如果没有nova-volumes卷组,创建这个卷组。这需要一个或者多个物理卷,可以扩展卷组。

    pvcreate /dev/sdb3
    vgcreate nova-volumes /dev/sdb3

    vgextend nova-volumes /dev/sdb4

    3)如果没有物理设备,可以使用文件代替,一般实验用。

    $ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
    $ losetup -f /opt/nova-volumes.img
    $ losetup -a
    $ vgcreate nova-volumes /dev/loop0

    4)创建nova-volumes卷组后,需要重启nova-volume服务

    5)确保tgt服务开启,并且tgt监听3260端口。

    lsof | grep 3260

    6)以上都正常服务,在客户端(计算节点,或者装了all-in-one的主机)。确保open-iscsi这个客户端软件正常工作。

    7)nova volume-create创建volume,可以使用nova命令或者在web进行。

    如果创建成功,可以在客户端通过iscsiadm命令查看会话,以及查看服务端的target。

    iscsiadm -m session

    iscsiadm -m discovery -t sendtargets -p IP:port

    在服务端,可以查看target

    tgtadm --lld iscsi --op show --mode target

    8)创建volume成功,下面可以attach到某个实例。

    如果attach不成功,检查日志;

    如果一直attaching,请看下面问题和解决方法3.7

    9)进入实例,可以fdisk -l看到新挂载的volume。


    三、常见问题和解决方法(已加入OpenStack-Lite-FAQ第3节)

    3.0、创建太多volume或者instance,不能正常运行,怎么清空数据库并重置数据库

    在OneStack项目里,已经加入了这个脚本工具,可以自行更改和增删。镜像相关的数据在glance数据库,身份相关的在keystone,nova相关的数据主要对应nova数据库,包括实例instance表和卷volume表。

    清空nova数据库./resetStack clear

    然后重新初始化./resetStack

    3.1、OpenStack中创建volume一直在creating,什么原因

    主要因为nova-volume没有正常启动,可以

    nova-manage service list

    看看后面的状态,不是笑脸:-)而是xx。如果没有启动,请接着看下一条FAQ(3.2)。

    3.2、OpenStack中nova-volume服务不能启动,什么原因

    主要因为没有nova-volumes卷组,或者iscsitarget服务没有启动(或者没有安装)。

    1、vgdisplay

    没有nova-volumes卷组,可以创建卷组和磁盘

    $ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
    $ losetup -f /opt/nova-volumes.img
    $ losetup -a
    $ vgcreate nova-volumes /dev/loop0


    记着启动nova-volume然后创建volume,否则下面仍然不能创建

    $ service nova-volume restart

    $ nova volume-create --display_name "volume1" 10


    2、service tgt status

    由于nova.conf设置tgtadm管理,在控制节点(nova-volume所在的物理节点)使用tgt提供target服务,通过tgtadm管理。

    1)没有安装tgt,或者没有正常启动tgt,可以apt安装(可以用iscsitarget,对于inet管理工具,对应iscsitarget iscsitarget-dkms,需要sed -i -e 's/false/true/' /etc/default/iscsitarget是服务可以工作)

    然后执行以下命令安装和设置为可以启动

    apt-get install -y tgt
    service tgt start
    service nova-volume restart

    lsof | grep 3260可以查看端口是否监听


    2)如果既没有nova-volumes卷组,也没有安装tgt,切忌保证这两者都存在,并且nova.conf设置正确,然后重启nova-volume,再创建volume

    有人安装tgt并启动后就create,结果nova-volume并没有启动,所以问题依然存在;

    有人创建nova-volumes,也没有重启nova-volume,也不能正常工作。


    3.3、OpenStack中创建volume一直在creating,怎么停掉(stop)
    主要因为nova-volume没有正常启动,即使现在启动了还会停留在这个状态。
    需要手动更改数据库里相关状态信息,从creating改为deleted然后删掉。

    对于这个没有创建成功的volume,可以直接更改数据库改为deleted,注意nova volume-delete会提示找不到。

    如果不能创建某些卷,并且提示存在这种volume,比如lvdisplay查到这个逻辑卷,需要lvremove;如果tgt中可以看到这个target,需要使用tgtadm删除

    tgtadm --op delete --lld=iscsi --mode=target --tid=1


    3.4、OpenStack中nova-volume执行出现问题,检查什么地方
    主要因为nova-volume没有正常启动或者计算节点没有能找到target,可以检查以下这些问题。
    nova-volume是否正常;控制点,详见问题3.2
    tgt是否开启;服务端
    open-iscsi是否安装和开启;客户端
    客户端(计算节点)iscsiadm discovery看看能不能找到存储服务;
    分析nova-volume.log、nova-compute.log和libvirt.log。


    3.5、OpenStack中tgt管理target
    控制节点查看target
    tgtadm --lld iscsi --op show --mode target
    建立target
    sudo tgtadm --op new --lld=iscsi --mode=target --tid=1 --targetname=iqn.2010-10.org.openstack:volume-00000001

    3.6、OpenStack中计算节点管理volume
    查看建立的session
    sudo iscsiadm -m session
    手动发现target
    sudo iscsiadm -m discovery -t sendtargets -p IP:port
    登入登出
    sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --login
    sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --logout
    sudo iscsiadm -m node -o [delete|new|update] -T targetname


    如果使用命令

    sudo iscsiadm -m discovery -t sendtargets -p compute_node
    报以下错误
    iscsiadm: Connection to Discovery Address 192.168.139.50 closed
    iscsiadm: Login I/O error, failed to receive a PDU
    这是因为没有找到target,可以create一个volume,此时会建立一个卷,建立一个target。

    3.7、OpenStack中挂载volume一直阻塞停留在attaching,什么原因,怎么解决

    在volume-create成功创建volume后,挂载到实例,如果遇到什么提示都没有nova volume-attach后仍然为available,那么是你的挂载有问题,比如使用的设备名/dev/vdc已经使用了,需要检查日志。

    更多的问题是,nova volume-attach一直attaching,删不掉也挂不上。这时候,nova-manage service list你会发现nova-compute已经停止,如果以上所描述的问题(nova-volume没有正常工作)都不存在,那么需要你更改OpenStack源代码了,这是OpenStack的一个bug。

    1)对于这个没有挂载成功的volume,可以直接更改数据库改为available,或者使用nova-manage volume delete来通过数据库删除这个volume,注意nova volume-delete会删不掉。

    2)对于这个bug,需要更改以下两处源代码:

    vi /usr/share/pyshared/nova/virt/libvirt/connection.py

    把virt_dom.attachDevice(xml)这一行改为

    [plain]  view plain copy
    1. LOG.info("attaching device with virsh")  
    2. device_path = connection_info['data']['device_path']  
    3. utils.execute('virsh', "attach-disk", instance_name, device_path, mount_device, run_as_root=True )  

    vi /usr/share/pyshared/nova/rootwrap/compute.py

    添加一行

    [plain]  view plain copy
    1. filters.CommandFilter("/usr/bin/virsh", "root"),  

    这样就行了,注意volume-attach填写的设备名不能重复,虽然它并不一定使用你指定的设备名作为实例的设备名。

    如果很多服务没有正常工作,可以重启所有服务

    for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done

    为了集中这些讨论,请访问原始出处:《OpenStack块存储nova-volume相关问题》。如有OpenStack问题和解决,请直接下面回复,这样也方便后来人。如有其它问题反馈,Kayven微博留言E-mail)。国内对于OpenStack还处于比较初级的阶段,技术研究公开的资料较少,多为一些安装部署问题相关的文章,比较深入的技术分析和比较全面的介绍较少。希望有什么经验和观点,可以在这里分享出来供大家讨论,也帮助理清自己的思路。

    展开全文
  • OpenStack Mitaka HA高可用搭建mini试看版version 1.0环境虚拟机列表:10.1.1.120 controller1 controller1.test....
  • # openstack pike 集群高可用 安装部署#安装环境 centos 7 最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享QQ交流群 663105353 原创文章,持续更新中http://www.cnblogs.com/elvi/p/7613861.html ...
  • 【编者按】本文从OpenStack架构入手,剖析了IaaS的云平台最核心的主要是这三部分:计算、网络、存储,作者指出OpenStack这样一个复杂系统,高可用更涉及到多个层面,只要有一个层面做不到高可用,那么整个OpenStack...
  • OneStack:Ubuntu 12.04 (或11.10) 一键部署安装OpenStack云计算平台,这个介绍了onestack这个一键部署的项目;...构建OpenStack高可用性(HA,High Availability),这部分介绍了高可用性的Op
  • OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。
  • 4. OpenStack对象存储系统管理 4.7 副本 OpenStack对象存储中的每个副本都是单独工作的,客户端一般只需要一个简单的主节点响应就认为操作成功了,网络的瞬间故障会造成副本出现分歧。这些分歧最终会被异步...
  • 一、宿主主机硬件需求 1、主机必须满足以下最低要求: ...高可用集群环境至少2台controller,1台computer. 2、部署环境 本文采用1台monitor,3台controller,3台computer,1台做docker镜像仓库,均安装centos7 min...
  • 4. OpenStack对象存储系统管理 4.3 对象布局  Swift使用底层的文件系统在磁盘上存储数据。管理员可以使用普通的文件系统工具来查找和检测数据。Swift使用如下惯例来存储对象: /path_to_mount_points/device/...
  • OpenStack高可用性构建

    千次阅读 2013-01-06 18:30:37
    如何构建OpenStack高可用性(HA,High Availability)?首先要弄清楚怎么实现高可用性,就需要知道哪些服容易出现不可靠,因此设计分布式数据系统,很多时候是在一致性和可用性(可靠性)之间寻求一个平衡。 1...
  • openstack存储

    千次阅读 2014-08-21 16:37:32
    OpenStack提供两种块存储: ephemeral storage和volumes storage. ephemeral storage 具有和实例相同的生命周期,重启实例并不会影响ephemeral storage中存储的内容,但终结实例的时候ephemeral storage也会随之被...
  • openstack cinder-volume 的高可用(HA)

    千次阅读 2016-07-11 11:16:43
    为了保证云平台的稳定性,需要做很多部分的...存储高可用openstack这一也不用考虑很多,比如ceph、glusterfs自带可靠性。当做了这些高可用后,我发现cinder-volume是一个瓶颈,如果它挂了的话,现有已经挂...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,994
精华内容 1,997
关键字:

openstack块存储高可用