zoukankan      html  css  js  c++  java
  • B17-Openstack高可用-集成Ceph准备

    Openstack环境中,数据存储可分为临时性存储与永久性存储。

    临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储glance上传的系统镜像;

    永久性存储:主要由cinder提供的块存储与swift提供的对象存储构成,以cinder提供的块存储应用最为广泛,块存储通常以云盘的形式挂载到虚拟机中使用。

    Openstack中需要进行数据存储的三大项目主要是nova项目(虚拟机镜像文件),glance项目(共用模版镜像)与cinder项目(块存储)。

    下图为cinder,glance与nova访问ceph集群的逻辑图:

    1. ceph与openstack集成主要用到ceph的rbd服务,ceph底层为rados存储集群,ceph通过librados库实现对底层rados的访问;
    2. openstack各项目客户端调用librbd,再由librbd调用librados访问底层rados;
    3. 实际使用中,nova需要使用libvirtdriver驱动以通过libvirt与qemu调用librbd;cinder与glance可直接调用librbd;
    4. 写入ceph集群的数据被条带切分成多个object,object通过hash函数映射到pg(构成pg容器池pool),然后pg通过几圈crush算法近似均匀地映射到物理存储设备osd(osd是基于文件系统的物理存储设备,如xfs,ext4等)。

    1. 创建pool

    # Ceph默认使用pool的形式存储数据,pool是对若干pg进行组织管理的逻辑划分,pg里的对象被映射到不同的osd,因此pool分布到整个集群里。
    # 可以将不同的数据存入1个pool,但如此操作不便于客户端数据区分管理,因此一般是为每个客户端分别创建pool。
    # 为cinder,nova,glance分别创建pool,命名为:volumes,vms,images
    # 创建pool,需要覆盖默认的pg num,官方文档对pg num的数量有如下建议:http://docs.ceph.com/docs/master/rados/operations/placement-groups/;
    # 同时综合考量全部pool的pg num总和的上限:pg num * 副本数量 < mon_max_pg_per_osd(默认200) * num_in_osds(osd总进程数);
    # 这里volumes池是永久性存储,vms是实例临时后端存储,images是镜像存储

    [cephde@compute01 ~]$ sudo ceph osd pool create volumes 100
    pool 'volumes' created
    [cephde@compute01 ~]$ sudo ceph osd pool create vms 100
    pool 'vms' created

    [cephde@compute01 ~]$ sudo ceph osd pool create images 30
    pool 'images' created

    查看状态:

    [root@compute01 ~]# ceph pg stat
    230 pgs: 230 active+clean; 0 B data, 13 MiB used, 297 GiB / 300 GiB avail
    [root@compute01 ~]# ceph osd lspools
    1 volumes
    2 vms
    3 images

    2. 安装Ceph客户端

    # glance-api服务所在节点需要安装python-rbd;
    # 这里glance-api服务运行在3个控制节点,以controller01节点为例

    [root@controller01 ~]# yum install python-rbd -y

    # cinder-volume与nova-compute服务所在节点需要安装ceph-common;
    # 这里cinder-volume与nova-compute服务运行在3个计算(存储)节点,以compute01节点为例

    [root@compute03 ~]# yum install ceph-common -y

    另外所有节点安装

    yum install -y ceph

    3. 授权设置

    1)创建用户

    # ceph默认启用cephx authentication(见ceph.conf),需要为nova/cinder与glance客户端创建新的用户并授权;
    # 可在管理节点上分别为运行cinder-volume与glance-api服务的节点创建client.glance与client.cinder用户并设置权限;
    # 针对pool设置权限,pool名对应创建的pool

    [root@compute01 ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
    [client.cinder]
    key = AQCpxele/+hULBAAvwQiY8wlgV0/AyyPfo4eKQ==
    [root@compute01 ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
    [client.glance]
    key = AQC3xelepeYOARAAOl3BynaAHmxiNA2qHZ3nNw==

    2)推送client.glance秘钥

    # 将创建client.glance用户生成的秘钥推送到运行glance-api服务的节点

    ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring

    ceph auth get-or-create client.glance | ssh root@controller02 tee /etc/ceph/ceph.client.glance.keyring
    ceph auth get-or-create client.glance | ssh root@controller01 tee /etc/ceph/ceph.client.glance.keyring
    ceph auth get-or-create client.glance | ssh root@controller03 tee /etc/ceph/ceph.client.glance.keyring


    # 同时修改秘钥文件的属主与用户组

    [root@controller01 ~]# chown glance:glance /etc/ceph/ceph.client.glance.keyring

    [root@controller02 ~]# chown glance:glance /etc/ceph/ceph.client.glance.keyring

    [root@controller03 ~]# chown glance:glance /etc/ceph/ceph.client.glance.keyring

    3)推送client.cinder秘钥(nova-volume)

    ceph auth get-or-create client.cinder | ssh root@compute01 tee /etc/ceph/ceph.client.cinder.keyring
    ceph auth get-or-create client.cinder | ssh root@compute02 tee /etc/ceph/ceph.client.cinder.keyring
    ceph auth get-or-create client.cinder | ssh root@compute03 tee /etc/ceph/ceph.client.cinder.keyring

    # 同时修改秘钥文件的属主与用户组

    [root@compute01 ~]# chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

    [root@compute02 ~]# chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

    [root@compute03 ~]# chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

    4)推送client.cinder秘钥(nova-compute)

    这里nova-compute服务与nova-volume服务运行在相同节点,不必重复操作。

    5)libvirt秘钥 

    nova-compute所在节点需要将client.cinder用户的秘钥文件存储到libvirt中;当基于ceph后端的cinder卷被attach到虚拟机实例时,libvirt需要用到该秘钥以访问ceph集群;

    [root@compute01 ~]# ceph auth get-key client.cinder | ssh root@compute01 tee /etc/ceph/client.cinder.key

    [root@compute01 ~]# ceph auth get-key client.cinder | ssh root@compute02 tee /etc/ceph/client.cinder.key

    [root@compute01 ~]# ceph auth get-key client.cinder | ssh root@compute03 tee /etc/ceph/client.cinder.key

    # 在计算(存储)节点将秘钥加入libvirt,以compute01节点为例;
    # 首先生成1个uuid,全部计算(存储)节点可共用此uuid(其他节点不用操作此步);
    # uuid后续配置nova.conf文件时也会用到,请保持一致
    [root@compute01 ~]# uuidgen

    [root@compute ceph]# cat secret.xml
    <secret ephemeral='no' private='no'>
    <uuid>40333768-948a-4572-abe0-716762154a1e</uuid>
    <usage type='ceph'>
    <name>client.cinder secret</name>
    </usage>
    </secret>

    [root@compute01 ceph]# virsh secret-define --file secret.xml
    Secret 40333768-948a-4572-abe0-716762154a1e created

    [root@compute01 ceph]# virsh secret-set-value --secret 40333768-948a-4572-abe0-716762154a1e --base64 $(cat /etc/ceph/client.cinder.key)
    Secret value set

    [root@compute01 ceph]# scp secret.xml 10.100.214.206:/etc/ceph/
    [root@compute01 ceph]# scp secret.xml 10.100.214.207:/etc/ceph

    [root@compute03 ceph]# virsh secret-define --file secret.xml
    Secret 40333768-948a-4572-abe0-716762154a1e created

    [root@compute03 ceph]# virsh secret-set-value --secret 40333768-948a-4572-abe0-716762154a1e --base64 $(cat /etc/ceph/client.cinder.key)
    Secret value set

    [root@compute02 ceph]# virsh secret-define --file secret.xml
    Secret 40333768-948a-4572-abe0-716762154a1e created

    [root@compute02 ceph]# virsh secret-set-value --secret 40333768-948a-4572-abe0-716762154a1e --base64 $(cat /etc/ceph/client.cinder.key)
    Secret value set

  • 相关阅读:
    alpha版本冲刺总结
    近两天项目冲刺
    关于微软必应词典客户端 的案例分析
    第三次作业——结队编程
    hdu 1002 A + B Problem II(大数)
    ZOJ 3805 Machine(二叉树,递归)
    hdu 4704 sum(费马小定理+快速幂)
    欧拉图
    hdu 1116 Play on Words(欧拉通路)
    前50个斐波那契数
  • 原文地址:https://www.cnblogs.com/zhaopei123/p/13152869.html
Copyright © 2011-2022 走看看