zoukankan      html  css  js  c++  java
  • openstack高可用集群17-openstack集成Ceph准备

    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等)。
     
    环境介绍
    10.30.1.201 node1  #openstack控制节点1+glance节点1+ceph的mon
    10.30.1.202 node2  #openstack控制节点2+glance节点2+ceph的mon
    10.30.1.203 node3  #openstack计算节点1+ceph的osd节点
    10.30.1.204 node4  #openstack计算节点2+ceph的osd节点
    10.30.1.205 node5  #openstack的cinder节点1+keepalived+haproxy+ceph客户端 节点
    10.30.1.206 node6  #openstack的cinder节点2+keepalived+haproxy+ceph客户端 节点
    10.30.1.221 ceph-host-01  #ceph的mon+mgr+mds+osd节点1
    10.30.1.222 ceph-host-02  #ceph的mon+mgr+mds+osd节点2
    10.30.1.223 ceph-host-03  #ceph的mon+mgr+mds+osd节点3
    10.30.1.224 ceph-host-04  #ceph的osd节点4
    10.30.1.225 ceph-host-05  #ceph的osd节点5
     
    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总进程数);
    # pool创建在monitor节点操作,以ceph-host-01节点为例;
    # 这里volumes池是永久性存储,vms是实例临时后端存储,images是镜像存储
    创建volumes池,对应Cinder服务
    [root@ceph-host-01 ceph-cluster]# ceph osd pool create volumes 64
    创建images池,对应Glance服务
    [root@ceph-host-01 ceph-cluster]# ceph osd pool create images 64
    创建vms池,对应Nova服务
    [root@ceph-host-01 ceph-cluster]# ceph osd pool create vms 64
     
    初始化pool
    [root@ceph-host-01 ceph-cluster]# rbd pool init volumes
    [root@ceph-host-01 ceph-cluster]# rbd pool init images
    [root@ceph-host-01 ceph-cluster]# rbd pool init vms
     
    # 查看状态和pool列表
    ceph pg stat
    ceph osd lspools
    2. 安装Ceph客户端
    # glance-api服务所在节点需要安装python-rbd;
    # 这里glance-api服务运行在2个控制节点,以node1节点为例
    [root@node1 ~]# yum install python-rbd -y
    # cinder-volume与nova-compute服务所在节点需要安装ceph-common;
    # 这里cinder-volume与nova-compute服务运行在2个计算和一个cinder节点,以cinder节点node5节点为例
    [root@node5 ~]# yum install ceph-common -y
     
    #当然我们也直接在ceph的admin节点直接给glance,nova,cinder节点这就安装ceph和ceph-radosgw并把ceph.conf和admin密钥推送给这些节点
    [root@ceph-host-01 ceph-cluster]# ceph-deploy install  --no-adjust-repos node1 node2 node3 node4 node5
    [root@ceph-host-01 ceph-cluster]# ceph-deploy admin node1 node2 node3 node4 node5
     
    注1:实验的过程中发现计算(nova-compute)节点必须是ceph的osd节点,所以下面三个步骤不能少,计算(nova-compute)节点必须添加其本身的一个磁盘到osd中
    ceph-deploy install  --no-adjust-repos node3 node4
    ceph-deploy osd create --data /dev/vdb node3
    ceph-deploy osd create --data /dev/vdb node4
     
    注1:实验的过程中发现openstack控制节点是ceph的mon节点比较方便,因为glance一般放在openstack控制节点上
    ceph-deploy install  --no-adjust-repos node1 node2
    ceph-deploy mon add node1 node2
     
    注:在上面操作前所有的节点都修改/etc/hosts文件如下,并把ceph-host-01的密钥复制给这些节点,下面以复制到node5为例
    [root@node5 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.30.1.201 node1
    10.30.1.202 node2
    10.30.1.203 node3
    10.30.1.204 node4
    10.30.1.205 node5
    10.30.1.206 node6
    10.30.1.221 ceph-host-01
    10.30.1.222 ceph-host-02
    10.30.1.223 ceph-host-03
    10.30.1.224 ceph-host-04
    10.30.1.225 ceph-host-05
     
    [root@ceph-host-01 ceph-cluster]# ssh-copy-id node5
     
    3. 授权设置
    1)创建用户
    # ceph默认启用cephx authentication(见ceph.conf),需要为nova/cinder与glance客户端创建新的用户并授权;
    # 可在管理节点上分别为运行cinder-volume与glance-api服务的节点创建client.glance与client.cinder用户并设置权限;
     
    # 在ceph中创建了cinder、glance等用户,并做了权限控制
    # 在ceph集群中创建glance和cinder用户,只需在一个节点上操作即可。OpenStack中用到ceph集群中的glance和cinder服务,因此要创建这两个用户。nova不需要单独创建用户,nova是单独调用底层的kvm libvirt 使得ceph集群直接对接libvirt。
     
    # 针对pool设置权限,pool名对应创建的pool
    ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
    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'
     
    示范如下
    [root@ceph-host-01 ceph-cluster]# 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 = AQCmKjdelrXfIxAA8YwM2lpdjFZh3vBwddi7kA==
    [root@ceph-host-01 ceph-cluster]# 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 = AQAKxTdeH/dAIxAA73GmEXRQQLKnGRfxkcnz4w==
    2)推送client.glance秘钥
    安装完ceph包之后,需要将ceph集群的ceph.conf和密钥copy到所有client端。
    如果在Ceph的配置中打开了auth认证,就需要做如下的操作;如果Ceph中的auth都是设置的none,也就是关闭的话,可以不做如下操作。
    # 将创建client.glance用户生成的秘钥推送到运行glance-api服务的节点
    [root@ceph-host-01 ceph-cluster]# ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring
    [root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.glance.keyring root@node1:/etc/ceph/
    [root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.glance.keyring root@node2:/etc/ceph/
    # 同时修改秘钥文件的属主与用户组
    [root@ceph-host-01 ceph-cluster]# chown glance:glance /etc/ceph/ceph.client.glance.keyring
    [root@ceph-host-01 ceph-cluster]# ssh root@node1 chown glance:glance /etc/ceph/ceph.client.glance.keyring
    [root@ceph-host-01 ceph-cluster]# ssh root@node2 chown glance:glance /etc/ceph/ceph.client.glance.keyring
    3)推送client.cinder秘钥(nova-volume)
    # 将创建client.cinder用户生成的秘钥推送到运行cinder-volume服务的节点
    [root@ceph-host-01 ceph-cluster]# ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring
    [root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node5:/etc/ceph/
    # 同时修改秘钥文件的属主与用户组
    [root@ceph-host-01 ceph-cluster]# ssh root@node5 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
     
    4)推送client.cinder秘钥(nova-compute)
    [root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node3:/etc/ceph/
    [root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node4:/etc/ceph/
    # 同时修改秘钥文件的属主与用户组
    [root@ceph-host-01 ceph-cluster]# ssh root@node3 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
    [root@ceph-host-01 ceph-cluster]# ssh root@node4 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
    5)libvirt秘钥
    nova-compute所在节点需要将client.cinder用户的秘钥文件存储到libvirt中;当基于ceph后端的cinder卷被attach到虚拟机实例时,libvirt需要用到该秘钥以访问ceph集群;
    # 在ceph的admin节点向计算节点推送client.cinder秘钥文件,生成的文件是临时性的,将秘钥添加到libvirt后可删除
    # 在计算节点将秘钥加入libvirt,以node3节点为例;
    # 首先生成1个uuid,全部计算和cinder节点可共用此uuid(其他节点不用操作此步);
    # uuid后续配置nova.conf文件时也会用到,请保持一致
    [root@ceph-host-01 ceph-cluster]# uuidgen
    29355b97-1fd8-4135-a26e-d7efeaa27b0a
     
    # 在libvirt上添加秘钥
    [root@node3 ~]# cd /etc/ceph
    [root@node3 ceph]# touch secret.xml
    [root@node3 ceph]# vim secret.xml
    <secret ephemeral='no' private='no'>
         <uuid>29355b97-1fd8-4135-a26e-d7efeaa27b0a</uuid>
         <usage type='ceph'>
             <name>client.cinder secret</name>
         </usage>
    </secret>
    [root@node3 ceph]# virsh secret-define --file secret.xml
    [root@node3 ceph]#virsh secret-set-value --secret 29355b97-1fd8-4135-a26e-d7efeaa27b0a --base64 AQDiazlemzi3JxAAOvstXYpCD6igO0SRJ455BQ==
    注: --base64 后面的是/etc/ceph/ceph.client.cinder.keyring里的key
  • 相关阅读:
    10月20日
    tensorflow2自定义损失函数
    TensorFlow2_200729系列---20、自定义层
    Windows下Anaconda中tensorflow的tensorboard使用
    Windows下Anaconda中tensorflow的tensorboard使用(实测)
    可视化利器Visdom
    python虚拟环境-virtual environment
    TensorFlow2_200729系列---18、手写数字识别(层方式)
    tensorFlow2.1下的tf.data.Dataset.from_tensor_slices()的用法
    TensorBoard:TensorFlow 的可视化工具包
  • 原文地址:https://www.cnblogs.com/dexter-wang/p/12267188.html
Copyright © 2011-2022 走看看